trick/trick_source/codegen/Interface_Code_Gen/FieldDescription.hh
Alex Lin 6defa99b34 Use udunits package for units conversions
Changed the include for udunits to #include <udunits2.h> to work
on all platforms.  Added the include directory /usr/include/udunits2
for Linux.

refs #231
2016-05-09 10:23:19 -05:00

175 lines
5.0 KiB
C++

#ifndef FIELDVALUES_HH
#define FIELDVALUES_HH
#include <string>
#include <map>
#include <stdint.h>
#include <udunits2.h>
#include "ConstructValues.hh"
#include "clang/Basic/Specifiers.h"
/**
FieldDescription holds information describing a field found with ICG. The
information includes everything about the data member.
The class also provides print routines for each field in the io_src.
@author Alexander S. Lin
@date July 2012
*/
class ClassValues ;
class FieldDescription : public ConstructValues {
public:
/* Default the inheritance to false */
FieldDescription( std::string in_container_class ) ;
/* Extracts units and io code from a comment */
void parseComment(std::string) ;
/* Accessor functions to the data of the class */
std::string getContainerClass() ;
void setContainerClass( std::string in_name ) ;
unsigned int getBaseClassOffset() ;
void setFieldOffset( unsigned int in_offset ) ;
unsigned int getFieldOffset() ;
void setFieldWidth( unsigned int in_offset ) ;
unsigned int getFieldWidth() ;
void setNonCanonicalTypeName( std::string in_val ) ;
std::string getNonCanonicalTypeName() ;
void setTypeName( std::string in_val ) ;
std::string getTypeName() ;
void setLineNo( unsigned int ) ;
unsigned int getLineNo() ;
void setMangledTypeName( std::string in_val ) ;
std::string getMangledTypeName() ;
std::string getUnits() ;
void setIO(unsigned int) ;
unsigned int getIO() ;
std::string getDescription() ;
void setEnumString(std::string) ;
std::string getEnumString() ;
void setBitField( bool yes_no ) ;
void setBitFieldWidth( unsigned int len ) ;
unsigned int getBitFieldWidth() ;
unsigned int getBitFieldStart() ;
unsigned int getBitFieldByteOffset() ;
unsigned int getNumDims() ;
int getArrayDim(unsigned int dim_num) ;
bool isBitField() ;
void setEnum( bool yes_no ) ;
bool isEnum() ;
void setRecord( bool yes_no ) ;
bool isRecord() ;
void setSTL( bool yes_no ) ;
bool isSTL() ;
void setSTLClear( bool yes_no ) ;
bool hasSTLClear() ;
void setStatic( bool yes_no ) ;
bool isStatic() ;
void setInherited( bool yes_no ) ;
bool isInherited() ;
void setAccess( clang::AccessSpecifier in_val ) ;
clang::AccessSpecifier getAccess() ;
void addOffset( unsigned int offset ) ;
/** Adds an array dimension to the field */
void addArrayDim( int in_dim ) ;
friend std::ostream & operator << (std::ostream & os , FieldDescription & cv ) ;
private:
/** Line number in current file where field is */
unsigned int line_no ;
/** Name of the class this field is in */
std::string container_class ;
/** The total offset to the current field in bits */
unsigned int field_offset ;
/** The size of the current field in bits */
unsigned int field_width ;
/** Name of the type. Non-canonical. It's what was actually read in input file */
std::string non_canonical_type_name ;
/** Name of the type, will be canonical, resolving all typedefs and adding default template args */
std::string type_name ;
/** Name of the type */
std::string mangled_type_name ;
/** String representing the type enumeration */
std::string type_enum_string ;
/** Units specified of the field */
std::string units ;
/** io restrictions */
unsigned int io ;
/** Comment description */
std::string description ;
/** public/protected/private */
clang::AccessSpecifier access ;
/** is this field a bitfield */
bool is_bitfield ;
/** how many bits is this bitfield */
unsigned int bitfield_width ;
/** what bit in the word does this bit start on? */
unsigned int bitfield_start_bit ;
/** word offset into struct/class of this bitfield */
uint64_t bitfield_word_offset ;
/** Number of fixed and pointer dimensions */
unsigned int num_dims ;
/** dimensions sizes */
int array_sizes[8] ;
/** is this field inherited from parent class */
bool inherited ;
/** is an enumeration */
bool is_enum ;
/** is a record class */
bool is_record ;
/** is an stl */
bool is_stl ;
/** does this stl have a clear */
bool has_stl_clear ;
/** is this field declared static */
bool is_static ;
/** map of strings to io numbers. One copy for all fields */
static std::map<std::string , unsigned int> io_map ;
/** Internal function to execute regular expression */
std::string get_regex_field(std::string input , const char * expr , unsigned int index) ;
static ut_system * u_system ;
} ;
#endif