Changeset 2075779 in tol


Ignore:
Timestamp:
Mar 25, 2011, 6:55:24 PM (16 years ago)
Author:
Víctor de Buen <vdebuen@…>
Branches:
1941-docker-image-to-test, devel, master
Children:
30e0e72
Parents:
315916e
Message:

Refs #740

git-svn-id: ​https://www.tol-project.org/svn/tolp/trunk@3364 be4846ae-f051-483a-831f-b64e7d08527f

Location:
tol/btol/bgrammar
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • tol/btol/bgrammar/class.cpp

    r315916e r2075779  
    308308
    309309//--------------------------------------------------------------------
     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//--------------------------------------------------------------------
    310337  void BMember::Copy(const BMember& mbr)
    311338//--------------------------------------------------------------------
    … …  
    11511178}
    11521179
     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//--------------------------------------------------------------------
     1231static 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
    11531277//--------------------------------------------------------------------
    11541278        BText BClass::Dump() const
    … …  
    11571281//return(BParser::Unparse(tree_,"","\n"));
    11581282  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";
    11611285  int n;
    11621286  if(parentHash_)
    … …  
    11761300    }
    11771301  }
    1178   dump+="\n///////////////////////////////////////////////////////////////////////////////\n"; 
    11791302  if(ascentHash_)
    11801303  {
    … …  
    11961319      }
    11971320    }
    1198     dump+="\n*/  \n"; 
     1321    if(n)  { dump+="\n*/\n"; }
     1322    else   { dump+="\n"; }
    11991323  } 
    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())
    12261341        {
    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      }
    12311365    }
    12321366  }
  • tol/btol/bgrammar/tol_bclass.h

    r315916e r2075779  
    8282  int BuildMethod();
    8383  int BuildStatic();
     84        BText       Dump             () const;
     85
    8486  DeclareClassNewDelete(BMember);
    8587};
    … …  
    218220  BSyntaxObject* FindStaticMethod(const BText& memberName, bool fullAccess) const;
    219221  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
    220228  DeclareClassNewDelete(BClass);
    221229};
Note: See TracChangeset for help on using the changeset viewer.