GME
13
|
00001 //############################################################################################################################################### 00002 // 00003 // Object Constraint Language Generic Manager 00004 // OCLCommon.cpp 00005 // 00006 //############################################################################################################################################### 00007 #include "Solve4786.h" 00008 #include "OCLCommon.h" 00009 00010 std::string& TrimLeft( std::string& strIn ) 00011 { 00012 while ( ! strIn.empty() && ((strIn[0] < 20 && strIn[0] >= 0) || strIn[ 0 ] == ' ' || strIn[ 0 ] == '\t' ) ) 00013 strIn.erase( 0, 1 ); 00014 return strIn; 00015 } 00016 00017 std::string& TrimRight( std::string& strIn ) 00018 { 00019 while ( ! strIn.empty() && ((strIn[strIn.length() - 1] < 20 && strIn[strIn.length() - 1] >= 0)|| strIn[ strIn.length() - 1 ] == ' ' || strIn[ strIn.length() - 1 ] == '\t' ) ) 00020 strIn.erase( strIn.length() - 1, 1 ); 00021 return strIn; 00022 } 00023 00024 std::string& Trim( std::string& strIn ) 00025 { 00026 return TrimRight( TrimLeft( strIn ) ); 00027 } 00028 00029 bool operator!=( const std::string& str1, const std::string& str2 ) 00030 { 00031 return ! ( str1 == str2 ); 00032 } 00033 00034 namespace OclCommon { 00035 00036 void convertR( const TypeSeq& si, int i, std::string& s ) 00037 { 00038 s += si[ i ]; 00039 if ( (int) si.size() > i + 1 ) { 00040 s += "("; 00041 convertR( si, i + 1, s ); 00042 s += ")"; 00043 } 00044 } 00045 00046 void Convert( const TypeSeq& si, std::string& s ) 00047 { 00048 s = ""; 00049 if ( si.size() > 0 ) 00050 convertR( si, 0, s ); 00051 } 00052 00053 int convertR( std::string& s, TypeSeq& si, int i ) 00054 { 00055 size_t p = s.find( '(' ); 00056 if ( p == std::string::npos ) { 00057 si.push_back( s ); 00058 return 0; 00059 } 00060 if ( s[ s.length() - 1 ] != ')' ) 00061 return i + s.length(); 00062 std::string strTemp = s.substr( 0, p ); 00063 TrimRight( strTemp ); 00064 if ( strTemp.empty() ) 00065 return i; 00066 si.push_back( strTemp ); 00067 strTemp = s.substr( p + 1, s.length() - 1 - p - 1 ); 00068 TrimLeft( strTemp ); 00069 i += s.length() - strTemp.length(); 00070 TrimRight( strTemp ); 00071 return convertR( strTemp, si, i ); 00072 } 00073 00074 int Convert( const std::string& s, TypeSeq& si ) 00075 { 00076 si.clear(); 00077 std::string ss( s ); 00078 TrimLeft( ss ); 00079 int i = s.length() - ss.length(); 00080 TrimRight( ss ); 00081 return convertR( ss, si, i ); 00082 } 00083 00084 }; // namespace OclCommon 00085 00086