Changeset 2075779 in tol
- Timestamp:
- Mar 25, 2011, 6:55:24 PM (16 years ago)
- Branches:
- 1941-docker-image-to-test, devel, master
- Children:
- 30e0e72
- Parents:
- 315916e
- Location:
- tol/btol/bgrammar
- Files:
-
- 2 edited
-
class.cpp (modified) (5 diffs)
-
tol_bclass.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
tol/btol/bgrammar/class.cpp
r315916e r2075779 308 308 309 309 //-------------------------------------------------------------------- 310 BText BMember::Dump() const 311 //-------------------------------------------------------------------- 312 { 313 BText dump; 314 const BText& name = name_; 315 BClass* cls = (BClass*)(parent_); 316 if(!cls) { return(dump); } 317 if((name[0]=='_')&&(name[1]!='.')) { return(dump); } 318 if(name.BeginWith("_.autodoc.member.")) { return(dump); } 319 BSyntaxObject* adm = cls->FindStaticMember(BText("_.autodoc.member.")+name, false); 320 dump+="\n/* \n"; 321 dump += 322 BText((isStatic_)?"Static":"Non static")+ " "+ 323 BText((declaration_.HasName())?"":"virtual ")+ 324 BText((isMethod_)?"method":"member")+ 325 " defined at " + cls->FullName()+"\n"; 326 if(adm) { dump+=Text(adm); } 327 dump+="\n*/ \n"; 328 dump+=BText((isStatic_)?"Static ":"")+declaration_; 329 if(definition_.HasName() && !(isMethod_)) 330 { 331 dump+=BText(" = ")+ definition_; 332 } 333 return(dump); 334 }; 335 336 //-------------------------------------------------------------------- 310 337 void BMember::Copy(const BMember& mbr) 311 338 //-------------------------------------------------------------------- … … 1151 1178 } 1152 1179 1180 1181 //-------------------------------------------------------------------- 1182 int BClass::GetMembers(BArray<const BMember*>& arr) const 1183 //-------------------------------------------------------------------- 1184 { 1185 int n=0; 1186 arr.AllocBuffer(0); 1187 if(memberHash_) 1188 { 1189 BMbrNumByNameHash::const_iterator iterM; 1190 BMbrNumByNameHash& mbr = *(memberHash_); 1191 arr.ReallocBuffer(mbr.size()); 1192 arr.ReallocBuffer(0); 1193 for(iterM=mbr.begin(); iterM!=mbr.end(); iterM++) 1194 { 1195 if(iterM->second) 1196 { 1197 const BMember* m = iterM->second->member_; 1198 if(!m->isMethod_) { arr.Add(m); n++; } 1199 } 1200 } 1201 } 1202 return(n); 1203 } 1204 1205 //-------------------------------------------------------------------- 1206 int BClass::GetMethods(BArray<const BMember*>& arr) const 1207 //-------------------------------------------------------------------- 1208 { 1209 int n=0; 1210 arr.AllocBuffer(0); 1211 if(memberHash_) 1212 { 1213 BMbrNumByNameHash::const_iterator iterM; 1214 BMbrNumByNameHash& mbr = *(memberHash_); 1215 arr.ReallocBuffer(mbr.size()); 1216 arr.ReallocBuffer(0); 1217 for(iterM=mbr.begin(); iterM!=mbr.end(); iterM++) 1218 { 1219 if(iterM->second) 1220 { 1221 const BMember* m = iterM->second->member_; 1222 if(m->isMethod_) { arr.Add(m); n++; } 1223 } 1224 } 1225 } 1226 return(n); 1227 } 1228 1229 1230 //-------------------------------------------------------------------- 1231 static BInt MemberCmp(const void* v1, const void* v2) 1232 1233 /*! Compair two atom receiving the double pointers. 1234 * \param v1 first atom to caompare 1235 * \param v2 second atom to compare 1236 * \return returns an integer less than, equal to, or greather then zero, 1237 * if the name of \a v1is found, respectively, to be less then, to 1238 * match, or be greater then name of \a v2 1239 */ 1240 //-------------------------------------------------------------------- 1241 { 1242 const BMember* m1 = *((const BMember**)v1); 1243 const BMember* m2 = *((const BMember**)v2); 1244 int cmp1 = m1->isMethod_ - m2->isMethod_; 1245 if(cmp1) { return(cmp1); } 1246 int cmp2 = m1->isStatic_ - m2->isStatic_; 1247 if(cmp2) { return(cmp2); } 1248 int cmp3 = m2->definition_.HasName() - m1->definition_.HasName(); 1249 if(cmp3) { return(cmp3); } 1250 BClass* cls1 = (BClass*)m1->parent_; 1251 BClass* cls2 = (BClass*)m2->parent_; 1252 BText clsNam1 = (cls1)?cls1->FullName():"~~~~~~~~~~~~~"; 1253 BText clsNam2 = (cls1)?cls1->FullName():"~~~~~~~~~~~~~"; 1254 int cmp4 = StrCmp(clsNam1, clsNam2); 1255 if(cmp4) { return(cmp4); } 1256 return(StrCmp(m1->name_, m2->name_)); 1257 } 1258 1259 //-------------------------------------------------------------------- 1260 int BClass::GetSortedMembers(BArray<const BMember*>& arr) const 1261 //-------------------------------------------------------------------- 1262 { 1263 int n = GetMembers(arr); 1264 arr.Sort(MemberCmp); 1265 return(n); 1266 } 1267 1268 //-------------------------------------------------------------------- 1269 int BClass::GetSortedMethods(BArray<const BMember*>& arr) const 1270 //-------------------------------------------------------------------- 1271 { 1272 int n = GetMethods(arr); 1273 arr.Sort(MemberCmp); 1274 return(n); 1275 } 1276 1153 1277 //-------------------------------------------------------------------- 1154 1278 BText BClass::Dump() const … … 1157 1281 //return(BParser::Unparse(tree_,"","\n")); 1158 1282 BText dump; 1159 dump+= "\n///////////////////////////////////////////////////////////////////////////////\n";1160 dump+=BText("Class ")+FullName()+" \n";1283 dump+=BText("\n/* API for Class ")+FullName()+" */\n"; 1284 dump+=BText("Class ")+FullName()+"{\n"; 1161 1285 int n; 1162 1286 if(parentHash_) … … 1176 1300 } 1177 1301 } 1178 dump+="\n///////////////////////////////////////////////////////////////////////////////\n";1179 1302 if(ascentHash_) 1180 1303 { … … 1196 1319 } 1197 1320 } 1198 dump+="\n*/ \n"; 1321 if(n) { dump+="\n*/\n"; } 1322 else { dump+="\n"; } 1199 1323 } 1200 dump += BText("{\n "); 1201 if(memberHash_) 1202 { 1203 BMbrNumByNameHash::const_iterator iterM; 1204 BMbrNumByNameHash& mbr = *(memberHash_); 1205 n=0; 1206 for(iterM=mbr.begin(); iterM!=mbr.end(); iterM++, n++) 1207 { 1208 if(iterM->second) 1209 { 1210 const BMember* mbr = iterM->second->member_; 1211 if(!mbr) { continue; } 1212 const BText& name = mbr->name_; 1213 if((name[0]=='_')&&(name[1]!='.')) { continue; } 1214 if(name.BeginWith("_.autodoc.member.")) { continue; } 1215 if(n) { dump+=";\n"; } 1216 BSyntaxObject* adm = FindStaticMember(BText("_.autodoc.member.")+name, false); 1217 dump+="\n/* ////////////////////////////////////////////////////////////////////////////\n"; 1218 dump += 1219 BText((mbr->isStatic_)?"Static":"Non static")+ " "+ 1220 BText((mbr->isMethod_)?"method":"member")+ 1221 " defined at " + ((BClass*)(mbr->parent_))->FullName()+"\n"; 1222 if(adm) { dump+=Text(adm); } 1223 dump+="\n//////////////////////////////////////////////////////////////////////////// */\n"; 1224 dump+=mbr->declaration_; 1225 if(mbr->definition_.HasName() && !(mbr->isMethod_)) 1324 BArray<const BMember*> mem; 1325 BArray<const BMember*> met; 1326 int num_mem = GetSortedMembers(mem); 1327 int num_met = GetSortedMethods(met); 1328 const BMember* m = NULL; 1329 BText md; 1330 bool is_empty = true; 1331 if(num_met) 1332 { 1333 dump += "/* Methods */"; 1334 for(n=0; n<num_met; n++) 1335 { 1336 m = met[n]; 1337 if(m) 1338 { 1339 md = m->Dump(); 1340 if(md.HasName()) 1226 1341 { 1227 dump+=BText(" = ")+ mbr->definition_; 1228 } 1229 n++; 1230 } 1342 if(is_empty) { is_empty=false; } 1343 else { dump+=";\n"; } 1344 dump += md; 1345 } 1346 } 1347 } 1348 } 1349 if(num_mem) 1350 { 1351 dump += "/* Members */"; 1352 for(n=0; n<num_mem; n++) 1353 { 1354 m = mem[n]; 1355 if(m) 1356 { 1357 md = m->Dump(); 1358 if(md.HasName()) 1359 { 1360 if(is_empty) { is_empty=false; } 1361 else { dump+=";\n"; } 1362 dump += md; 1363 } 1364 } 1231 1365 } 1232 1366 } -
tol/btol/bgrammar/tol_bclass.h
r315916e r2075779 82 82 int BuildMethod(); 83 83 int BuildStatic(); 84 BText Dump () const; 85 84 86 DeclareClassNewDelete(BMember); 85 87 }; … … 218 220 BSyntaxObject* FindStaticMethod(const BText& memberName, bool fullAccess) const; 219 221 BSyntaxObject* FindStaticMember(const BText& memberName, bool fullAccess) const; 222 223 int GetMembers(BArray<const BMember*>& arr) const; 224 int GetMethods(BArray<const BMember*>& arr) const; 225 int GetSortedMembers(BArray<const BMember*>& arr) const; 226 int GetSortedMethods(BArray<const BMember*>& arr) const; 227 220 228 DeclareClassNewDelete(BClass); 221 229 };
Note: See TracChangeset
for help on using the changeset viewer.
