35 vector<t_enum*> enums = program_->get_enums();
36 vector<t_enum*>::iterator en_iter;
37 for (en_iter = enums.begin(); en_iter != enums.end(); ++en_iter) {
38 generate_enum(*en_iter);
42 vector<t_typedef*> typedefs = program_->get_typedefs();
43 vector<t_typedef*>::iterator td_iter;
44 for (td_iter = typedefs.begin(); td_iter != typedefs.end(); ++td_iter) {
45 generate_typedef(*td_iter);
49 vector<t_struct*> objects = program_->get_objects();
50 vector<t_struct*>::iterator o_iter;
51 for (o_iter = objects.begin(); o_iter != objects.end(); ++o_iter) {
52 if ((*o_iter)->is_xception()) {
53 generate_xception(*o_iter);
55 generate_struct(*o_iter);
61 vector<t_sandesh*> sandeshs = program_->get_sandeshs();
62 vector<t_sandesh*>::iterator s_iter;
63 for (s_iter = sandeshs.begin(); s_iter != sandeshs.end(); ++s_iter) {
64 sandesh_name_ = get_sandesh_name(*s_iter);
65 generate_sandesh(*s_iter);
68 generate_sandesh_info();
72 vector<t_const*> consts = program_->get_consts();
73 generate_consts(consts);
76 vector<t_service*> services = program_->get_services();
77 vector<t_service*>::iterator sv_iter;
78 for (sv_iter = services.begin(); sv_iter != services.end(); ++sv_iter) {
79 service_name_ = get_service_name(*sv_iter);
80 generate_service(*sv_iter);
89 for (string::const_iterator it = in.begin(); it < in.end(); it++) {
90 std::map<char, std::string>::const_iterator res = escape_.find(*it);
91 if (res != escape_.end()) {
92 result.append(res->second);
94 result.push_back(*it);
101 vector<t_const*>::iterator c_iter;
102 for (c_iter = consts.begin(); c_iter != consts.end(); ++c_iter) {
103 generate_const(*c_iter);
108 const string& comment_start,
109 const string& line_prefix,
110 const string& contents,
111 const string& comment_end) {
112 if (comment_start !=
"") indent(out) << comment_start;
113 stringstream docs(contents, ios_base::in);
114 while (!docs.eof()) {
116 docs.getline(line, 1024);
119 if (strlen(line) == 0 && line_prefix ==
"" && !docs.eof()) {
121 }
else if (strlen(line) > 0 || !docs.eof()) {
122 indent(out) << line_prefix << line << std::endl;
125 if (comment_end !=
"") indent(out) << comment_end;
130 gen_map_t& the_map = get_generator_map();
139 string::size_type colon = options.find(
':');
140 string language = options.substr(0, colon);
142 map<string, string> parsed_options;
143 if (colon != string::npos) {
144 string::size_type pos = colon+1;
145 while (pos != string::npos && pos < options.size()) {
146 string::size_type next_pos = options.find(
',', pos);
147 string option = options.substr(pos, next_pos-pos);
148 pos = ((next_pos == string::npos) ? next_pos : next_pos+1);
150 string::size_type separator = option.find(
'=');
152 if (separator == string::npos) {
156 key = option.substr(0, separator);
157 value = option.substr(separator+1);
160 parsed_options[key] = value;
164 gen_map_t& the_map = get_generator_map();
165 gen_map_t::iterator iter = the_map.find(language);
167 if (iter == the_map.end()) {
171 return iter->second->get_generator(program, parsed_options, options);
181 const std::string& short_name,
182 const std::string& long_name,
183 const std::string& documentation)
184 : short_name_(short_name)
185 , long_name_(long_name)
186 , documentation_(documentation)
virtual void generate_program()
void failure(const char *fmt,...)
t_generator_factory(const std::string &short_name, const std::string &long_name, const std::string &documentation)
static void register_generator(t_generator_factory *factory)
virtual std::string escape_string(const std::string &in) const
std::map< std::string, t_generator_factory * > gen_map_t
static gen_map_t & get_generator_map()
std::string get_short_name()
virtual void generate_consts(std::vector< t_const * > consts)
static t_generator * get_generator(t_program *program, const std::string &options)
void generate_docstring_comment(std::ofstream &out, const std::string &comment_start, const std::string &line_prefix, const std::string &contents, const std::string &comment_end)