blob: d68e66dab876d7ea5bec2fb048ea98242a82f55d [file] [log] [blame]
Mark Slee31985722006-05-24 21:45:31 +00001#include "t_generator.h"
2using namespace std;
3
4/**
5 * Top level program generation function. Calls the generator subclass methods
6 * for preparing file streams etc. then iterates over all the parts of the
7 * program to perform the correct actions.
8 *
9 * @param program The thrift program to compile into C++ source
10 */
11void t_generator::generate_program(t_program *tprogram) {
Mark Sleee8540632006-05-30 09:24:40 +000012 // Set program name
13 program_name_ = get_program_name(tprogram);
14
Mark Slee31985722006-05-24 21:45:31 +000015 // Initialize the generator
16 init_generator(tprogram);
17
18 // Generate typedefs
19 vector<t_typedef*> typedefs = tprogram->get_typedefs();
20 vector<t_typedef*>::iterator td_iter;
21 for (td_iter = typedefs.begin(); td_iter != typedefs.end(); ++td_iter) {
22 generate_typedef(*td_iter);
23 }
24
25 // Generate enums
26 vector<t_enum*> enums = tprogram->get_enums();
27 vector<t_enum*>::iterator en_iter;
28 for (en_iter = enums.begin(); en_iter != enums.end(); ++en_iter) {
29 generate_enum(*en_iter);
30 }
31
32 // Generate structs
33 vector<t_struct*> structs = tprogram->get_structs();
34 vector<t_struct*>::iterator st_iter;
35 for (st_iter = structs.begin(); st_iter != structs.end(); ++st_iter) {
36 generate_struct(*st_iter);
37 }
38
39 // Generate services
40 vector<t_service*> services = tprogram->get_services();
41 vector<t_service*>::iterator sv_iter;
42 for (sv_iter = services.begin(); sv_iter != services.end(); ++sv_iter) {
Mark Sleee8540632006-05-30 09:24:40 +000043 service_name_ = get_service_name(*sv_iter);
Mark Slee31985722006-05-24 21:45:31 +000044 generate_service(*sv_iter);
45 }
46
47 // Close the generator
48 close_generator();
49}