#include "clstepcore/enumTypeDescriptor.h" /* * why have EnumTypeDescriptor + EnumerationTypeDescriptor ??? * this was in ExpDict.cc before splitting it up */ #ifdef NOT_YET EnumerationTypeDescriptor::EnumerationTypeDescriptor( ) { _elements = new StringAggregate; } #endif EnumTypeDescriptor::EnumTypeDescriptor( const char * nm, PrimitiveType ft, Schema * origSchema, const char * d, EnumCreator f ) : TypeDescriptor( nm, ft, origSchema, d ), CreateNewEnum( f ) { } SDAI_Enum * EnumTypeDescriptor::CreateEnum() { if( CreateNewEnum ) { return CreateNewEnum(); } else { return 0; } } const char * EnumTypeDescriptor::GenerateExpress( std::string & buf ) const { char tmp[BUFSIZ+1]; buf = "TYPE "; buf.append( StrToLower( Name(), tmp ) ); buf.append( " = ENUMERATION OF \n (" ); const char * desc = Description(); const char * ptr = &( desc[16] ); while( *ptr != '\0' ) { if( *ptr == ',' ) { buf.append( ",\n " ); } else if( isupper( *ptr ) ) { buf += ( char )tolower( *ptr ); } else { buf += *ptr; } ptr++; } buf.append( ";\n" ); /////////////// // count is # of WHERE rules if( _where_rules != 0 ) { int all_comments = 1; int count = _where_rules->Count(); for( int i = 0; i < count; i++ ) { // print out each UNIQUE rule if( !( *( _where_rules ) )[i]->_label.size() ) { all_comments = 0; } } if( all_comments ) { buf.append( " (* WHERE *)\n" ); } else { buf.append( " WHERE\n" ); } for( int i = 0; i < count; i++ ) { // print out each WHERE rule if( !( *( _where_rules ) )[i]->_comment.empty() ) { buf.append( " " ); buf.append( ( *( _where_rules ) )[i]->comment_() ); } if( ( *( _where_rules ) )[i]->_label.size() ) { buf.append( " " ); buf.append( ( *( _where_rules ) )[i]->label_() ); } } } buf.append( "END_TYPE;\n" ); return const_cast( buf.c_str() ); }