Fawkes API  Fawkes Development Version
CppInterfaceGenerator Class Reference

Generator that transforms input from the InterfaceParser into valid C++ classes. More...

#include <>>

Public Member Functions

 CppInterfaceGenerator (std::string directory, std::string interface_name, std::string config_basename, std::string author, std::string year, std::string creation_date, std::string data_comment, const unsigned char *hash, size_t hash_size, const std::vector< InterfaceConstant > &constants, const std::vector< InterfaceEnumConstant > &enum_constants, const std::vector< InterfaceField > &data_fields, const std::vector< InterfacePseudoMap > &pseudo_maps, const std::vector< InterfaceMessage > &messages)
 Constructor. More...
 
 ~CppInterfaceGenerator ()
 Destructor. More...
 
void write_h (FILE *f)
 Write h file. More...
 
void write_cpp (FILE *f)
 Write cpp file. More...
 
void write_constants_cpp (FILE *f)
 Write constants to cpp file. More...
 
void write_constants_h (FILE *f)
 Write constants to h file. More...
 
void write_enum_constants_tostring_cpp (FILE *f)
 Write enum constant tostring methods to cpp file. More...
 
void write_messages_cpp (FILE *f)
 Write messages to cpp file. More...
 
void write_messages_h (FILE *f)
 Write messages to h file. More...
 
void write_ctor_dtor_h (FILE *f, std::string is, std::string classname)
 Write constructor and destructor to h file. More...
 
void write_ctor_dtor_cpp (FILE *f, std::string classname, std::string super_class, std::string inclusion_prefix, std::vector< InterfaceField > fields, std::vector< InterfaceMessage > messages)
 Write constructor and destructor to cpp file. More...
 
void write_message_ctor_dtor_h (FILE *f, std::string is, std::string classname, std::vector< InterfaceField > fields)
 Write constructor and destructor for message to h file. More...
 
void write_message_ctor_dtor_cpp (FILE *f, std::string classname, std::string super_class, std::string inclusion_prefix, std::vector< InterfaceField > fields)
 Write constructor and destructor for message to cpp file. More...
 
void write_message_clone_method_h (FILE *f, std::string is)
 Write message clone method header. More...
 
void write_message_clone_method_cpp (FILE *f, std::string classname)
 Write message clone method. More...
 
void write_methods_h (FILE *f, std::string is, std::vector< InterfaceField > fields)
 Write methods to h file. More...
 
void write_methods_cpp (FILE *f, std::string interface_classname, std::string classname, std::vector< InterfaceField > fields, std::string inclusion_prefix, bool write_data_changed)
 Write methods to cpp file. More...
 
void write_create_message_method_cpp (FILE *f)
 Write create_message() method to cpp file. More...
 
void write_copy_value_method_cpp (FILE *f)
 Write copy_value() method to CPP file. More...
 
void write_enum_tostring_method_cpp (FILE *f)
 Write enum_tostring() method to CPP file. More...
 
void write_basemethods_h (FILE *f, std::string is)
 Write base methods header entries. More...
 
void write_basemethods_cpp (FILE *f)
 Write base methods. More...
 
void write_methods_h (FILE *f, std::string is, std::vector< InterfaceField > fields, std::vector< InterfacePseudoMap > pseudo_maps)
 Write methods to h file. More...
 
void write_methods_cpp (FILE *f, std::string interface_classname, std::string classname, std::vector< InterfaceField > fields, std::vector< InterfacePseudoMap > pseudo_maps, std::string inclusion_prefix)
 Write methods to cpp file including pseudo maps. More...
 
void write_management_funcs_cpp (FILE *f)
 Write management functions. More...
 
void write_enum_map_population (FILE *f)
 Write enum maps. More...
 
void write_add_fieldinfo_calls (FILE *f, std::vector< InterfaceField > &fields)
 Write the add_fieldinfo() calls. More...
 
void write_struct (FILE *f, std::string name, std::string is, std::vector< InterfaceField > fields)
 Write optimized struct. More...
 
void write_enum_maps_h (FILE *f)
 Write enum maps to header. More...
 
void write_header (FILE *f, std::string filename)
 Write header to file. More...
 
void write_deflector (FILE *f)
 Write header deflector. More...
 
void generate ()
 Generator cpp and h files. More...
 

Detailed Description

Generator that transforms input from the InterfaceParser into valid C++ classes.

Definition at line 36 of file cpp_generator.h.

Constructor & Destructor Documentation

◆ CppInterfaceGenerator()

CppInterfaceGenerator::CppInterfaceGenerator ( std::string  directory,
std::string  interface_name,
std::string  config_basename,
std::string  author,
std::string  year,
std::string  creation_date,
std::string  data_comment,
const unsigned char *  hash,
size_t  hash_size,
const std::vector< InterfaceConstant > &  constants,
const std::vector< InterfaceEnumConstant > &  enum_constants,
const std::vector< InterfaceField > &  data_fields,
const std::vector< InterfacePseudoMap > &  pseudo_maps,
const std::vector< InterfaceMessage > &  messages 
)

Constructor.

Parameters
directoryDirectory where to create the files
interface_namename of the interface, should end with Interface
config_basenamebasename of the config without suffix
authorauthor of interface
yearyear of copyright
creation_dateuser-supplied creation date of interface
data_commentcomment in data block.
hashMD5 hash of the config file that was used to generate the interface
hash_sizesize in bytes of hash
constantsconstants
enum_constantsconstants defined as an enum
data_fieldsdata fields of the interface
pseudo_mapspseudo maps of the interface
messagesmessages defined in the interface

Definition at line 58 of file cpp_generator.cpp.

References fawkes::StringConversions::to_upper().

◆ ~CppInterfaceGenerator()

CppInterfaceGenerator::~CppInterfaceGenerator ( )

Destructor.

Definition at line 102 of file cpp_generator.cpp.

Member Function Documentation

◆ generate()

void CppInterfaceGenerator::generate ( )

Generator cpp and h files.

Definition at line 1209 of file cpp_generator.cpp.

◆ write_add_fieldinfo_calls()

void CppInterfaceGenerator::write_add_fieldinfo_calls ( FILE *  f,
std::vector< InterfaceField > &  fields 
)

Write the add_fieldinfo() calls.

Parameters
ffile to write to
fieldsfields to write field info for

Definition at line 632 of file cpp_generator.cpp.

◆ write_basemethods_cpp()

void CppInterfaceGenerator::write_basemethods_cpp ( FILE *  f)

Write base methods.

Parameters
ffile to write to

Definition at line 516 of file cpp_generator.cpp.

◆ write_basemethods_h()

void CppInterfaceGenerator::write_basemethods_h ( FILE *  f,
std::string  is 
)

Write base methods header entries.

Parameters
ffile to write to
isindentation string

Definition at line 1152 of file cpp_generator.cpp.

◆ write_constants_cpp()

void CppInterfaceGenerator::write_constants_cpp ( FILE *  f)

Write constants to cpp file.

Parameters
ffile to write to

Definition at line 264 of file cpp_generator.cpp.

◆ write_constants_h()

void CppInterfaceGenerator::write_constants_h ( FILE *  f)

Write constants to h file.

Parameters
ffile to write to

Definition at line 318 of file cpp_generator.cpp.

◆ write_copy_value_method_cpp()

void CppInterfaceGenerator::write_copy_value_method_cpp ( FILE *  f)

Write copy_value() method to CPP file.

Parameters
ffile to write to

Definition at line 469 of file cpp_generator.cpp.

◆ write_cpp()

void CppInterfaceGenerator::write_cpp ( FILE *  f)

Write cpp file.

Parameters
ffile to write to

Definition at line 215 of file cpp_generator.cpp.

◆ write_create_message_method_cpp()

void CppInterfaceGenerator::write_create_message_method_cpp ( FILE *  f)

Write create_message() method to cpp file.

Parameters
ffile to write to

Definition at line 433 of file cpp_generator.cpp.

◆ write_ctor_dtor_cpp()

void CppInterfaceGenerator::write_ctor_dtor_cpp ( FILE *  f,
std::string  classname,
std::string  super_class,
std::string  inclusion_prefix,
std::vector< InterfaceField fields,
std::vector< InterfaceMessage messages 
)

Write constructor and destructor to cpp file.

Parameters
ffile to write to
classnamename of class
super_classname of base class
inclusion_prefixUsed if class is included in another class.
fieldsfields
messagesmessages

Definition at line 696 of file cpp_generator.cpp.

◆ write_ctor_dtor_h()

void CppInterfaceGenerator::write_ctor_dtor_h ( FILE *  f,
std::string  is,
std::string  classname 
)

Write constructor and destructor to h file.

Parameters
ffile to write to
isindentation space
classnamename of class

Definition at line 530 of file cpp_generator.cpp.

◆ write_deflector()

void CppInterfaceGenerator::write_deflector ( FILE *  f)

Write header deflector.

Parameters
ffile to write to

Definition at line 204 of file cpp_generator.cpp.

◆ write_enum_constants_tostring_cpp()

void CppInterfaceGenerator::write_enum_constants_tostring_cpp ( FILE *  f)

Write enum constant tostring methods to cpp file.

Parameters
ffile to write to

Definition at line 287 of file cpp_generator.cpp.

◆ write_enum_map_population()

void CppInterfaceGenerator::write_enum_map_population ( FILE *  f)

Write enum maps.

Parameters
ffile to write to

Definition at line 612 of file cpp_generator.cpp.

◆ write_enum_maps_h()

void CppInterfaceGenerator::write_enum_maps_h ( FILE *  f)

Write enum maps to header.

Parameters
ffile to write to

Definition at line 153 of file cpp_generator.cpp.

◆ write_enum_tostring_method_cpp()

void CppInterfaceGenerator::write_enum_tostring_method_cpp ( FILE *  f)

Write enum_tostring() method to CPP file.

Parameters
ffile to write to

Definition at line 493 of file cpp_generator.cpp.

◆ write_h()

void CppInterfaceGenerator::write_h ( FILE *  f)

Write h file.

Parameters
ffile to write to

Definition at line 1165 of file cpp_generator.cpp.

◆ write_header()

void CppInterfaceGenerator::write_header ( FILE *  f,
std::string  filename 
)

Write header to file.

Parameters
ffile to write to
filenamename of file

Definition at line 167 of file cpp_generator.cpp.

◆ write_management_funcs_cpp()

void CppInterfaceGenerator::write_management_funcs_cpp ( FILE *  f)

Write management functions.

Parameters
ffile to write to

Definition at line 250 of file cpp_generator.cpp.

◆ write_message_clone_method_cpp()

void CppInterfaceGenerator::write_message_clone_method_cpp ( FILE *  f,
std::string  classname 
)

Write message clone method.

Parameters
ffile to write to
classnamename of message class

Definition at line 593 of file cpp_generator.cpp.

◆ write_message_clone_method_h()

void CppInterfaceGenerator::write_message_clone_method_h ( FILE *  f,
std::string  is 
)

Write message clone method header.

Parameters
ffile to write to
isindentation space

Definition at line 582 of file cpp_generator.cpp.

◆ write_message_ctor_dtor_cpp()

void CppInterfaceGenerator::write_message_ctor_dtor_cpp ( FILE *  f,
std::string  classname,
std::string  super_class,
std::string  inclusion_prefix,
std::vector< InterfaceField fields 
)

Write constructor and destructor for message to cpp file.

Parameters
ffile to write to
classnamename of class
super_classname of base class
inclusion_prefixUsed if class is included in another class.
fieldsvector of data fields of message

Definition at line 751 of file cpp_generator.cpp.

◆ write_message_ctor_dtor_h()

void CppInterfaceGenerator::write_message_ctor_dtor_h ( FILE *  f,
std::string  is,
std::string  classname,
std::vector< InterfaceField fields 
)

Write constructor and destructor for message to h file.

Parameters
ffile to write to
isindentation space
classnamename of class
fieldsvector of data fields of message

Definition at line 548 of file cpp_generator.cpp.

◆ write_messages_cpp()

void CppInterfaceGenerator::write_messages_cpp ( FILE *  f)

Write messages to cpp file.

Parameters
ffile to write to

Definition at line 388 of file cpp_generator.cpp.

◆ write_messages_h()

void CppInterfaceGenerator::write_messages_h ( FILE *  f)

Write messages to h file.

Parameters
ffile to write to

Definition at line 358 of file cpp_generator.cpp.

◆ write_methods_cpp() [1/2]

void CppInterfaceGenerator::write_methods_cpp ( FILE *  f,
std::string  interface_classname,
std::string  classname,
std::vector< InterfaceField fields,
std::string  inclusion_prefix,
bool  write_data_changed 
)

Write methods to cpp file.

Parameters
ffile to write to
interface_classnamename of the interface class
classnamename of class (can be interface or message)
fieldsfields
inclusion_prefixused if class is included in another class.
write_data_changedif true writes code that sets the interface's data_changed flag. Set to true for interface methods, false for message methods.

Definition at line 874 of file cpp_generator.cpp.

◆ write_methods_cpp() [2/2]

void CppInterfaceGenerator::write_methods_cpp ( FILE *  f,
std::string  interface_classname,
std::string  classname,
std::vector< InterfaceField fields,
std::vector< InterfacePseudoMap pseudo_maps,
std::string  inclusion_prefix 
)

Write methods to cpp file including pseudo maps.

Parameters
ffile to write to
interface_classnamename of the interface class
classnamename of class (can be interface or message)
fieldsfields
pseudo_mapspseudo maps
inclusion_prefixused if class is included in another class.

Definition at line 1012 of file cpp_generator.cpp.

◆ write_methods_h() [1/2]

void CppInterfaceGenerator::write_methods_h ( FILE *  f,
std::string  is,
std::vector< InterfaceField fields 
)

Write methods to h file.

Parameters
ffile to write to
isindentation space.
fieldsfields to write accessor methods for.

Definition at line 1089 of file cpp_generator.cpp.

◆ write_methods_h() [2/2]

void CppInterfaceGenerator::write_methods_h ( FILE *  f,
std::string  is,
std::vector< InterfaceField fields,
std::vector< InterfacePseudoMap pseudo_maps 
)

Write methods to h file.

Parameters
ffile to write to
isindentation space.
fieldsfields to write accessor methods for.
pseudo_mapspseudo maps

Definition at line 1129 of file cpp_generator.cpp.

◆ write_struct()

void CppInterfaceGenerator::write_struct ( FILE *  f,
std::string  name,
std::string  is,
std::vector< InterfaceField fields 
)

Write optimized struct.

Create struct, try align data well, sort fields:

  1. unsigned int
  2. int
  3. unsigned long int
  4. long int
  5. float
  6. double
  7. bool
  8. byte
  1. string
    Parameters
    ffile to write to
    namename of struct
    isindentation space
    fieldsfields for struct

Definition at line 125 of file cpp_generator.cpp.


The documentation for this class was generated from the following files: