Changeset e5448d2 in tol


Ignore:
Timestamp:
Nov 15, 2010, 3:53:22 PM (16 years ago)
Author:
Víctor de Buen <vdebuen@…>
Branches:
1941-docker-image-to-test, devel, master
Children:
f8fc37e
Parents:
d4a11e1
Message:

Refs #887
Avoiding the use of generic calling to IncNRefs and DecNRefs by means of a more sophisticated method.
BOisLoader creates a Bist* localDependencies_ to save orphan objets like time series dating, structs of sets and classes of nameblocks, when new argument addToLocalDependencies of ReadNextObject is true.
This list is passed to the returned set in new member BSet::oisLocalDependencies_ in order to be cleaned by the destructor of these returned set.

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

Location:
tol
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • tol/OIS/oisloader.cpp

    rd4a11e1 re5448d2  
    104104  oisHasPriorityOnConflict_(true),
    105105  lostSource_(false),
    106   tolSources_()
     106  tolSources_(),
     107  localDependencies_(NULL)
    107108{ 
    108109}
    … …  
    724725
    725726//--------------------------------------------------------------------
    726   BSyntaxObject* BOisLoader::ReadNextObject()
     727  BSyntaxObject* BOisLoader::ReadNextObject(bool addToLocalDependencies)
    727728//--------------------------------------------------------------------
    728729{
    … …  
    752753    if(mode==BOBJECTMODE)
    753754    {
    754       return(gra->FindOperand(name,false));
     755      result = gra->FindOperand(name,false);
    755756    }
    756757    else if((mode==BBUILTINFUNMODE)||(mode==BUSERFUNMODE))
    757758    {
    758       return(gra->FindOperator(name));
     759      result = gra->FindOperator(name);
    759760    }
    760761    else if(mode==BSTRUCTMODE)
    761762    {
    762       return(FindStruct(name));
     763      result = FindStruct(name);
    763764    }
    764765    else if(mode==BCLASSMODE)
    765766    {
    766       return(FindClass(name,-1));
     767      result = FindClass(name,-1);
    767768    }
    768769    else
    769770    {
    770       return(NullError("FATAL in BOisLoader::ReadNextObject()"));
     771      result = NullError("FATAL in BOisLoader::ReadNextObject()");
    771772    }
    772773  }
    … …  
    817818        str->PutFunction(new BNewStruct(*str));
    818819      }
    819       return(readed_[found].PutObject(str));
     820      result = str;
    820821    }
    821822    else if(mode==BCLASSMODE)
    … …  
    825826      Ensure(Read(*cls,object_));
    826827    //Std(BText("\nBOisLoader::ReadNextObject Reading Class ")+cls->Name()+" "+cls->FullName());
    827       return(readed_[found].PutObject(cls));
     828      result = cls;
    828829    }
    829830    else
    … …  
    10491050          {
    10501051            object_->SetPos(offset);
    1051             BSyntaxObject* r = ReadNextObject();
     1052            //CALL ReadNextObject
     1053            BSyntaxObject* r = ReadNextObject(true);
    10521054            if(!r || (r->Mode()!=BSTRUCTMODE))
    10531055            {
    … …  
    10751077            ERead(offset, set_);
    10761078            object_->SetPos(offset);
    1077             r = ReadNextObject();
     1079            //CALL ReadNextObject
     1080            r = ReadNextObject(false);
    10781081            if(!r)
    10791082            {
    … …  
    11631166          {
    11641167            object_->SetPos(offset);
    1165             BSyntaxObject* r = ReadNextObject();
     1168            //CALL ReadNextObject
     1169            BSyntaxObject* r = ReadNextObject(true);
    11661170            if(!r || (r->Mode()!=BSTRUCTMODE))
    11671171            {
    … …  
    12041208            ERead(offset, set_);
    12051209            object_->SetPos(offset);
    1206             r = ReadNextObject();
     1210            //CALL ReadNextObject
     1211            r = ReadNextObject(false);
    12071212            if(!r)
    12081213            {
    … …  
    12871292          {
    12881293            object_->SetPos(offset);
    1289             BSyntaxObject* r = ReadNextObject();
     1294            //CALL ReadNextObject
     1295            BSyntaxObject* r = ReadNextObject(true);
    12901296            if(!r || (r->Grammar()!=GraTimeSet()))
    12911297            {
    … …  
    14241430      result->PutDescription(description);
    14251431    }
    1426     return(readed_[found].PutObject(result));
    1427   }
     1432  }
     1433  if(result)
     1434  {
     1435    result = readed_[found].PutObject(result);
     1436    if(addToLocalDependencies)
     1437    {
     1438      localDependencies_ = Cons(result, localDependencies_);
     1439    }
     1440  }
     1441  return(result);
    14281442}
    14291443
    … …  
    15801594    Ensure(SearchOffsetInHierarchy(partial));
    15811595    object_->GetPos();
    1582 
    1583 
    1584     data_ = ReadNextObject();
     1596    //CALL ReadNextObject
     1597    localDependencies_ = NULL;
     1598    data_ = ReadNextObject(false);
    15851599    ok = (data_!=NULL);
     1600    if(ok)
     1601    {
     1602      BSet& set = Set(data_);
     1603      set.PutOisLocalDependencies(localDependencies_);
     1604    }
    15861605  }
    15871606  Close();
  • tol/OIS/tol_oisloader.h

    rd4a11e1 re5448d2  
    7979  BArray<BOffsetObject> readed_;
    8080  BArray<BTOLDependency> tolSources_;
     81  BList* localDependencies_;
    8182  BSyntaxObject* data_;
    8283  BText curHrchyPartialPath_;
    … …  
    145146  bool   SearchOffsetInHierarchy(const BSet* partial);
    146147
    147   BSyntaxObject* ReadNextObject();
     148  BSyntaxObject* ReadNextObject(bool addToLocalDependencies);
    148149  BSyntaxObject* PutVariableName(BSyntaxObject* result,
    149150                                 const BText& name,
  • tol/btol/set_type/set.cpp

    rd4a11e1 re5448d2  
    4747: sourcePath_(NULL), struct_(NIL), subType_(Generic), array_(0),
    4848  indexByName_(NULL),
    49   nameBlock_(NULL)
     49  nameBlock_(NULL),
     50  oisLocalDependencies_(NULL)
    5051{
    5152}
    … …  
    6061: sourcePath_(NULL), struct_(NIL), subType_(Generic), array_(0),
    6162  indexByName_(NULL),
    62   nameBlock_(NULL)
     63  nameBlock_(NULL),
     64  oisLocalDependencies_(NULL)
    6365{
    6466  Copy(set);
    … …  
    7476: sourcePath_(NULL), struct_(NIL), subType_(Generic), array_(0),
    7577  indexByName_(NULL),
    76   nameBlock_(NULL)
     78  nameBlock_(NULL),
     79  oisLocalDependencies_(NULL)
    7780{
    7881  RobStruct(arg,str,sub);
    … …  
    8891{
    8992  Delete();
     93  DESTROY(oisLocalDependencies_);
    9094}
    9195
  • tol/btol/set_type/tol_bset.h

    rd4a11e1 re5448d2  
    9090  BObjByIdxNameHash* indexByName_;
    9191  const BNameBlock* nameBlock_;
    92 
     92  BList* oisLocalDependencies_;
    9393  static BText          orderError_;
    9494  static BCode          order_;
    … …  
    150150                                    BText& errMsg) const;
    151151
    152   BBool   Includes(BSyntaxObject*) const;
     152  void PutOisLocalDependencies(BList* dep)
     153  {
     154    dep = oisLocalDependencies_;
     155  };
     156
     157  BBool Includes(BSyntaxObject*) const;
    153158
    154159  int BinWrite(FILE*) const { return 0; }
Note: See TracChangeset for help on using the changeset viewer.