[brlcad-commits] SF.net SVN: brlcad:[50741] brlcad/trunk/src/other/step/src/cleditor
Open Source Solid Modeling CAD
Brought to you by:
brlcad
From: <n_...@us...> - 2012-05-29 19:06:31
|
Revision: 50741 http://brlcad.svn.sourceforge.net/brlcad/?rev=50741&view=rev Author: n_reed Date: 2012-05-29 19:06:22 +0000 (Tue, 29 May 2012) Log Message: ----------- Have STEPfile::schemaName return std::string instead of writing char* arg. SCL git b8fc557. Modified Paths: -------------- brlcad/trunk/src/other/step/src/cleditor/STEPfile.cc brlcad/trunk/src/other/step/src/cleditor/STEPfile.h brlcad/trunk/src/other/step/src/cleditor/STEPfile.inline.cc Modified: brlcad/trunk/src/other/step/src/cleditor/STEPfile.cc =================================================================== --- brlcad/trunk/src/other/step/src/cleditor/STEPfile.cc 2012-05-29 16:10:12 UTC (rev 50740) +++ brlcad/trunk/src/other/step/src/cleditor/STEPfile.cc 2012-05-29 19:06:22 UTC (rev 50741) @@ -765,8 +765,7 @@ std::string objnm; char c; - char schnm[BUFSIZ]; - schnm[0] = '\0'; + std::string schnm; int fileid = -1; SDAI_Application_instance_ptr * scopelist = 0; @@ -845,8 +844,8 @@ << endl; return ENTITY_NULL; } else { - schemaName( schnm ); - obj = reg().ObjCreate( objnm.c_str(), schnm ); + schnm = schemaName(); + obj = reg().ObjCreate( objnm.c_str(), schnm.c_str() ); if( obj == ENTITY_NULL ) { // This will be the case if objnm does not exist in the reg. result.UserMsg( "Unknown ENTITY type" ); @@ -992,8 +991,7 @@ SDAI_Application_instance * obj = ENTITY_NULL; char c; - char schnm[BUFSIZ]; - schnm[0] = '\0'; + std::string schnm; std::string buf; // used to hold the simple record that is read ErrorDescriptor err; // used to catch error msgs @@ -1028,10 +1026,9 @@ } } entNmArr[enaIndex] = 0; - schemaName( schnm ); + schnm = schemaName(); - obj = new STEPcomplex( &_reg, ( const std::string ** )entNmArr, fileid, - schnm ); + obj = new STEPcomplex( &_reg, ( const std::string ** )entNmArr, fileid, schnm.c_str() ); if( obj->Error().severity() <= SEVERITY_WARNING ) { // If obj is not legal, record its error info and delete it: @@ -1141,8 +1138,7 @@ std::string tmpbuf; char errbuf[BUFSIZ]; errbuf[0] = '\0'; - char currSch[BUFSIZ]; - currSch[0] = '\0'; + std::string currSch; std::string objnm; char c; @@ -1213,12 +1209,12 @@ in.putback( c ); } - schemaName( currSch ); + currSch = schemaName(); //check for subtype/supertype record if( c == '(' ) { // TODO - sev = obj->STEPread( fileid, idIncrNum, &instances(), in, currSch, + sev = obj->STEPread( fileid, idIncrNum, &instances(), in, currSch.c_str(), useTechCor ); ReadTokenSeparator( in, &cmtStr ); @@ -1265,7 +1261,7 @@ // NOTE: this function is called for all FileTypes // (WORKING_SESSION included) - sev = obj->STEPread( fileid, idIncrNum, &instances(), in, currSch, + sev = obj->STEPread( fileid, idIncrNum, &instances(), in, currSch.c_str(), useTechCor ); ReadTokenSeparator( in, &cmtStr ); @@ -1571,28 +1567,22 @@ } void STEPfile::WriteData( ostream & out, int writeComments ) { - char currSch[BUFSIZ]; - currSch[0] = '\0'; - + std::string currSch = schemaName(); out << "DATA;\n"; - schemaName( currSch ); int n = instances().InstanceCount(); for( int i = 0; i < n; ++i ) { - instances().GetMgrNode( i )->GetApplication_instance()->STEPwrite( out, currSch, writeComments ); + instances().GetMgrNode( i )->GetApplication_instance()->STEPwrite( out, currSch.c_str(), writeComments ); } out << "ENDSEC;\n"; } void STEPfile::WriteValuePairsData( ostream & out, int writeComments, int mixedCase ) { - char currSch[BUFSIZ]; - currSch[0] = '\0'; - - schemaName( currSch ); + std::string currSch = schemaName(); int n = instances().InstanceCount(); for( int i = 0; i < n; ++i ) { - instances().GetMgrNode( i )->GetApplication_instance()->WriteValuePairs( out, currSch, writeComments, mixedCase ); + instances().GetMgrNode( i )->GetApplication_instance()->WriteValuePairs( out, currSch.c_str(), writeComments, mixedCase ); } } @@ -1787,33 +1777,31 @@ } void STEPfile::WriteWorkingData( ostream & out, int writeComments ) { - char currSch[BUFSIZ]; - currSch[0] = '\0'; - - schemaName( currSch ); + std::string currSch = schemaName(); out << "DATA;\n"; int n = instances().InstanceCount(); + for( int i = 0; i < n; ++i ) { switch( instances().GetMgrNode( i )->CurrState() ) { case deleteSE: out << wsDelete; instances().GetMgrNode( i )->GetApplication_instance()-> - STEPwrite( out, currSch, writeComments ); + STEPwrite( out, currSch.c_str(), writeComments ); break; case completeSE: out << wsSaveComplete; instances().GetMgrNode( i )->GetApplication_instance()-> - STEPwrite( out, currSch, writeComments ); + STEPwrite( out, currSch.c_str(), writeComments ); break; case incompleteSE: out << wsSaveIncomplete; instances().GetMgrNode( i )->GetApplication_instance()-> - STEPwrite( out, currSch, writeComments ); + STEPwrite( out, currSch.c_str(), writeComments ); break; case newSE: out << wsNew; instances().GetMgrNode( i )->GetApplication_instance()-> - STEPwrite( out, currSch, writeComments ); + STEPwrite( out, currSch.c_str(), writeComments ); break; case noStateSE: _error.AppendToUserMsg( "no state information for this node\n" ); Modified: brlcad/trunk/src/other/step/src/cleditor/STEPfile.h =================================================================== --- brlcad/trunk/src/other/step/src/cleditor/STEPfile.h 2012-05-29 16:10:12 UTC (rev 50740) +++ brlcad/trunk/src/other/step/src/cleditor/STEPfile.h 2012-05-29 19:06:22 UTC (rev 50741) @@ -164,9 +164,8 @@ protected: //member functions - char * schemaName( char * ); // returns and copies out schema name from - // header instances -//called by ReadExchangeFile + std::string schemaName(); /**< Returns and copies out schema name from header instances. + Called by ReadExchangeFile */ istream * OpenInputFile( const char * filename = "" ); void CloseInputFile( istream * in ); Modified: brlcad/trunk/src/other/step/src/cleditor/STEPfile.inline.cc =================================================================== --- brlcad/trunk/src/other/step/src/cleditor/STEPfile.inline.cc 2012-05-29 16:10:12 UTC (rev 50740) +++ brlcad/trunk/src/other/step/src/cleditor/STEPfile.inline.cc 2012-05-29 19:06:22 UTC (rev 50741) @@ -255,44 +255,48 @@ } } -char * STEPfile::schemaName( char * schName ) -/* +/** * Returns the schema name from the file schema header section (or the 1st * one if more than one exists). Copies this value into schName. If there * is no header section or no value for file schema, NULL is returned and * schName is unset. */ -{ +std::string STEPfile::schemaName() { SdaiFile_schema * fs; - std::string tmp; + std::string schName; STEPnode * n; if( _headerInstances == NULL ) { - return NULL; + return schName; } fs = ( SdaiFile_schema * )_headerInstances->GetApplication_instance( "File_Schema" ); if( fs == ENTITY_NULL ) { - return NULL; + return schName; } n = ( STEPnode * )fs->schema_identifiers_()->GetHead(); // (take the first one) if( n == NULL ) { - return NULL; + return schName; } - n->STEPwrite( tmp ); - if( *tmp.c_str() == '\0' || *tmp.c_str() == '$' ) { - return NULL; + n->STEPwrite( schName ); + if( schName.empty() || schName[0] == '$' ) { + schName.clear(); + return schName; + } else if( schName[0] == '\0' ) { + //probably never - it seems that putting null in std::string takes effort + _error.AppendToUserMsg( "In STEPfile::schemaName: schName contains \\0 - it should be empty." ); + _error.GreaterSeverity( SEVERITY_WARNING ); + schName.clear(); + return schName; } - // tmp returns the string we want plus a beginning and ending - // quote mark ('). We remove these below. - strncpy( schName, tmp.c_str() + 1, BUFSIZ - 1 ); - // "+1" to remove beginning '. - if( *( schName + strlen( schName ) - 1 ) == '\'' ) { - // Remove trailing '. This condition checks that it wasn't removed - // already. That may have happend if strncpy had truncated schName - // (it were >= BUFSIZ). - *( schName + strlen( schName ) - 1 ) = '\0'; + if( schName[ schName.length() - 1 ] == '\'' ) { + schName = schName.substr( 1, schName.length() - 2 ); + } else { + _error.AppendToUserMsg( "In STEPfile::schemaName: schName was truncated." ); + _error.GreaterSeverity( SEVERITY_WARNING ); + + schName = schName.substr( 1, schName.length() - 1 ); } return schName; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |