]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Issue #1037 : using of: implementation of cashing of values for method isInList
authornds <nds@opencascade.com>
Thu, 28 Apr 2016 12:57:06 +0000 (15:57 +0300)
committernds <nds@opencascade.com>
Thu, 28 Apr 2016 12:57:06 +0000 (15:57 +0300)
src/Model/Model_AttributeSelectionList.cpp
src/Model/Model_AttributeSelectionList.h

index 9fbef11c6911236e985f44ba8a97e08ebae35ddb..03dde11ab568b7eedfd1c2fafb6347e6eb577ef0 100644 (file)
@@ -35,6 +35,10 @@ void Model_AttributeSelectionList::append(
     }
   }
 
+  if (myIsCashed && !theTemporarily) {
+    myCash[theContext].push_back(theSubShape);
+  }
+
   int aNewTag = mySize->Get() + 1;
   TDF_Label aNewLab = mySize->Label().FindChild(aNewTag);
 
@@ -187,7 +191,7 @@ bool Model_AttributeSelectionList::isInList(const ResultPtr& theContext,
                                             const std::shared_ptr<GeomAPI_Shape>& theSubShape,
                                             const bool theTemporarily)
 {
-  if (!myCash.empty()) { // the cashing is active
+  if (myIsCashed) { // the cashing is active
     std::map<ResultPtr, std::list<std::shared_ptr<GeomAPI_Shape> > >::iterator aContext =
       myCash.find(theContext);
     if (aContext != myCash.end()) {
@@ -293,7 +297,9 @@ Model_AttributeSelectionList::Model_AttributeSelectionList(TDF_Label& theLabel)
   }
 }
 
-void Model_AttributeSelectionList::cashValues(const bool theEnabled) {
+void Model_AttributeSelectionList::cashValues(const bool theEnabled)
+{
+  myIsCashed = theEnabled;
   myCash.clear(); // empty list as indicator that cash is not used
   if (theEnabled) {
     for(int anIndex = size() - 1; anIndex >= 0; anIndex--) {
index 99f2dfdd8a514ccd09a43337d72f5195c3498e5d..c0f36fd7cf480e3628cb6cefdd61b859ce70da31 100644 (file)
@@ -29,6 +29,7 @@ class Model_AttributeSelectionList : public ModelAPI_AttributeSelectionList
   std::shared_ptr<Model_AttributeSelection> myTmpAttr; ///< temporary attribute (the last one)
   /// the cashed shapes to optimize isInList method: from context to set of shapes in this context
   std::map<ResultPtr, std::list<std::shared_ptr<GeomAPI_Shape> > > myCash;
+  bool myIsCashed; ///< true if cashing is performed
 public:
   /// Adds the new reference to the end of the list
   /// \param theContext object where the sub-shape was selected