blob: 0ba44ac474891fe8ac1d0caeed05569e67470bcf [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) {
12 // Initialize the generator
13 init_generator(tprogram);
14
15 // Generate typedefs
16 vector<t_typedef*> typedefs = tprogram->get_typedefs();
17 vector<t_typedef*>::iterator td_iter;
18 for (td_iter = typedefs.begin(); td_iter != typedefs.end(); ++td_iter) {
19 generate_typedef(*td_iter);
20 }
21
22 // Generate enums
23 vector<t_enum*> enums = tprogram->get_enums();
24 vector<t_enum*>::iterator en_iter;
25 for (en_iter = enums.begin(); en_iter != enums.end(); ++en_iter) {
26 generate_enum(*en_iter);
27 }
28
29 // Generate structs
30 vector<t_struct*> structs = tprogram->get_structs();
31 vector<t_struct*>::iterator st_iter;
32 for (st_iter = structs.begin(); st_iter != structs.end(); ++st_iter) {
33 generate_struct(*st_iter);
34 }
35
36 // Generate services
37 vector<t_service*> services = tprogram->get_services();
38 vector<t_service*>::iterator sv_iter;
39 for (sv_iter = services.begin(); sv_iter != services.end(); ++sv_iter) {
40 generate_service(*sv_iter);
41 }
42
43 // Close the generator
44 close_generator();
45}