0024042: Performance improvements: Foundation Classes
[occt.git] / src / TCollection / TCollection_Array2.lxx
index 2a212ad..405a271 100755 (executable)
 // purpose or non-infringement. Please see the License for the specific terms
 // and conditions governing the rights and limitations under the License.
 
+#include <Standard.hxx>
 #include <Standard_OutOfRange.hxx>
 
 #include Array2Item_hxx
 
 //=======================================================================
+//function : TCollection_Array2
+//purpose  : 
+//=======================================================================
+
+inline TCollection_Array2::TCollection_Array2 (const Standard_Integer R1, 
+                                               const Standard_Integer R2,
+                                               const Standard_Integer C1, 
+                                               const Standard_Integer C2) :
+       myLowerRow(R1),
+       myLowerColumn(C1),
+       myUpperRow(R2),
+       myUpperColumn(C2),
+       myDeletable(Standard_True)
+{
+  Allocate ();
+}
+
+//=======================================================================
+//function : TCollection_Array2
+//purpose  : User allocated data
+//=======================================================================
+
+inline TCollection_Array2::TCollection_Array2 (const Array2Item& Item,
+                                       const Standard_Integer R1, 
+                                       const Standard_Integer R2,
+                                       const Standard_Integer C1, 
+                                       const Standard_Integer C2) :
+       myLowerRow(R1),
+       myLowerColumn(C1),
+       myUpperRow(R2),
+       myUpperColumn(C2),
+       myDeletable(Standard_False),
+       myData((void*)&Item)
+{
+  Allocate ();
+}
+
+//=======================================================================
+//function : Init
+//purpose  : 
+//=======================================================================
+
+inline void TCollection_Array2::Init (const Array2Item& V) 
+{
+  Standard_Integer Size = RowLength() * ColLength();
+  Array2Item* p = &(ChangeValue(myLowerRow,myLowerColumn));
+  for (Standard_Integer I = 0; I < Size ; I++) p[I] = V;
+}
+
+//=======================================================================
+//function : Destroy
+//purpose  : 
+//=======================================================================
+
+inline void TCollection_Array2::Destroy () 
+{
+  Array2Item** anItemPtr = ((Array2Item**)myData + myLowerRow);
+  
+  // delete the data
+  //
+  if (myDeletable) 
+    delete [] &ChangeValue(myLowerRow,myLowerColumn);
+
+  // delete the indirection table
+  Standard::Free((void*&)anItemPtr);
+}
+
+//=======================================================================
 //function : ColLength
 //purpose  : 
 //=======================================================================