Mark Slee | 3198572 | 2006-05-24 21:45:31 +0000 | [diff] [blame^] | 1 | #include "t_generator.h" |
| 2 | using 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 | */ |
| 11 | void 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 | } |