blob: c2de77e7073608b449435ac034f228a48794cc2a [file] [log] [blame]
Mark Sleee9ce01c2007-05-16 02:29:53 +00001// Copyright (c) 2006- Facebook
2// Distributed under the Thrift Software License
3//
4// See accompanying file LICENSE or visit the Thrift site at:
5// http://developers.facebook.com/thrift/
6
Mark Slee31985722006-05-24 21:45:31 +00007#ifndef T_FUNCTION_H
8#define T_FUNCTION_H
9
10#include <string>
11#include "t_type.h"
12#include "t_struct.h"
ccheeverf53b5cf2007-02-05 20:33:11 +000013#include "t_doc.h"
Mark Slee31985722006-05-24 21:45:31 +000014
15/**
Mark Sleef5377b32006-10-10 01:42:59 +000016 * Representation of a function. Key parts are return type, function name,
17 * optional modifiers, and an argument list, which is implemented as a thrift
18 * struct.
Mark Slee31985722006-05-24 21:45:31 +000019 *
Mark Slee31985722006-05-24 21:45:31 +000020 */
ccheeverf53b5cf2007-02-05 20:33:11 +000021class t_function : public t_doc {
Mark Slee31985722006-05-24 21:45:31 +000022 public:
Mark Slee52f643d2006-08-09 00:03:43 +000023 t_function(t_type* returntype,
24 std::string name,
25 t_struct* arglist,
David Reiss47329252009-03-24 20:01:02 +000026 bool oneway=false) :
Mark Slee52f643d2006-08-09 00:03:43 +000027 returntype_(returntype),
28 name_(name),
29 arglist_(arglist),
David Reiss47329252009-03-24 20:01:02 +000030 oneway_(oneway) {
Mark Sleef0712dc2006-10-25 19:03:57 +000031 xceptions_ = new t_struct(NULL);
Mark Slee9cb7c612006-09-01 22:17:45 +000032 }
33
Mark Slee9cb7c612006-09-01 22:17:45 +000034 t_function(t_type* returntype,
35 std::string name,
36 t_struct* arglist,
37 t_struct* xceptions,
David Reiss47329252009-03-24 20:01:02 +000038 bool oneway=false) :
Mark Slee9cb7c612006-09-01 22:17:45 +000039 returntype_(returntype),
40 name_(name),
41 arglist_(arglist),
42 xceptions_(xceptions),
David Reiss47329252009-03-24 20:01:02 +000043 oneway_(oneway)
David Reiss6d943902008-03-14 00:51:42 +000044 {
David Reiss47329252009-03-24 20:01:02 +000045 if (oneway_ && !xceptions_->get_members().empty()) {
David Reiss6ce401d2009-03-24 20:01:58 +000046 throw std::string("Oneway methods can't throw exceptions.");
David Reiss6d943902008-03-14 00:51:42 +000047 }
48 }
Mark Slee31985722006-05-24 21:45:31 +000049
50 ~t_function() {}
51
Mark Sleef5377b32006-10-10 01:42:59 +000052 t_type* get_returntype() const {
53 return returntype_;
54 }
55
56 const std::string& get_name() const {
57 return name_;
58 }
59
60 t_struct* get_arglist() const {
61 return arglist_;
62 }
63
64 t_struct* get_xceptions() const {
65 return xceptions_;
66 }
67
David Reiss47329252009-03-24 20:01:02 +000068 bool is_oneway() const {
69 return oneway_;
Mark Sleef5377b32006-10-10 01:42:59 +000070 }
Mark Sleeb15a68b2006-06-07 06:46:24 +000071
Mark Slee31985722006-05-24 21:45:31 +000072 private:
73 t_type* returntype_;
74 std::string name_;
75 t_struct* arglist_;
Mark Slee9cb7c612006-09-01 22:17:45 +000076 t_struct* xceptions_;
David Reiss47329252009-03-24 20:01:02 +000077 bool oneway_;
Mark Slee31985722006-05-24 21:45:31 +000078};
79
80#endif