trick/trick_source/codegen/Interface_Code_Gen/PrintFileContentsBase.hh
Alex Lin 14a75508a3 Cleaning up once include variables and copyright cleanup.
Changed all header file once include variables to follow the same naming
convention and not start with any underscores.  Also deleted old
incorrect copyright notices.  Also removed $Id: tags from all files.

Fixes #14.  Fixes #22.
2015-03-23 16:03:14 -05:00

76 lines
2.5 KiB
C++

#ifndef PRINTFILECONTENTSBASE_HH
#define PRINTFILECONTENTSBASE_HH
#include <string>
#include <vector>
#include <map>
#include <set>
class ConstructValues ;
class ClassValues ;
class EnumValues ;
class FieldDescription ;
/**
This class prints Trick 10 style io_src code. Given a vector of class information,
this class determines the io_src code file names, excluding files in system directories,
and writes out the attributes.
@author Alexander S. Lin
@date July 2012
*/
class PrintFileContentsBase {
public:
PrintFileContentsBase() ;
virtual void printIOHeader(std::ofstream & out, std::string header_file_name) = 0 ;
virtual void printClass(std::ofstream & out, ClassValues * cv) = 0 ;
virtual void printEnum(std::ofstream & out, EnumValues * ev) = 0 ;
// these routines provide default empty implementation
virtual void printClassMapHeader(std::ofstream & out, std::string function_name ) ;
virtual void printClassMap(std::ofstream & out, ClassValues * cv) ;
virtual void printClassMapFooter(std::ofstream & out) ;
virtual void printEnumMapHeader(std::ofstream & out, std::string function_name ) ;
virtual void printEnumMap(std::ofstream & out, EnumValues * ev) ;
virtual void printEnumMapFooter(std::ofstream & out) ;
protected:
/** Prints the io_src_allocate function */
virtual void print_units_map(std::ofstream & out, ClassValues * cv) ;
/** Prints "extern \"C\" {" */
void print_open_extern_c(std::ofstream & out) ;
/** Prints "} // extern C" */
void print_close_extern_c(std::ofstream & out) ;
/* internal function determines if a particular field is printable */
bool determinePrintAttr(ClassValues * c , FieldDescription *fdes) ;
/** Prints namespace containers of a class delimited by delim */
void printNamespaces(std::ofstream & out, ConstructValues * c , const char * delim ) ;
/** Prints namespace open block */
void printOpenNamespaceBlocks( std::ofstream & out, ClassValues * c ) ;
/** Prints namespace close block */
void printCloseNamespaceBlocks( std::ofstream & out, ClassValues * c ) ;
/* Note: There are no open/close namespace blocks for enums. The
enum attributes do not have anything that needs to be enclosed in
namespaces */
/** Prints class containers of a class delimited by delim */
void printContainerClasses(std::ofstream & out, ConstructValues * c , const char * delim ) ;
} ;
#endif