0023850: TDataStd_ByteArray is too slow on storage on disk
[occt.git] / src / NCollection / NCollection_LocalArray.hxx
CommitLineData
b311480e 1// Created on: 2009-09-23
2// Copyright (c) 2009-2012 OPEN CASCADE SAS
3//
4// The content of this file is subject to the Open CASCADE Technology Public
5// License Version 6.5 (the "License"). You may not use the content of this file
6// except in compliance with the License. Please obtain a copy of the License
7// at http://www.opencascade.org and read it completely before using this file.
8//
9// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
10// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
11//
12// The Original Code and all software distributed under the License is
13// distributed on an "AS IS" basis, without warranty of any kind, and the
14// Initial Developer hereby disclaims all such warranties, including without
15// limitation, any warranties of merchantability, fitness for a particular
16// purpose or non-infringement. Please see the License for the specific terms
17// and conditions governing the rights and limitations under the License.
18
41194117 19
f7b4312f 20#ifndef _NCollection_LocalArray_HeaderFile
21#define _NCollection_LocalArray_HeaderFile
41194117
K
22
23#include <Standard.hxx>
24#include <Standard_TypeDef.hxx>
25
f7b4312f 26//! Auxiliary class optimizing creation of array buffer
27//! (using stack allocation for small arrays).
28template<class theItem> class NCollection_LocalArray
41194117
K
29{
30public:
31
f7b4312f 32 // 1K * sizeof (theItem)
41194117
K
33 static const size_t MAX_ARRAY_SIZE = 1024;
34
f7b4312f 35 NCollection_LocalArray (const size_t theSize)
41194117
K
36 : myPtr (myBuffer)
37 {
38 Allocate(theSize);
39 }
40
f7b4312f 41 NCollection_LocalArray ()
41194117
K
42 : myPtr (myBuffer) {}
43
f7b4312f 44 virtual ~NCollection_LocalArray()
41194117
K
45 {
46 Deallocate();
47 }
48
49 void Allocate (const size_t theSize)
50 {
51 Deallocate();
52 if (theSize > MAX_ARRAY_SIZE)
f7b4312f 53 myPtr = (theItem*)Standard::Allocate (theSize * sizeof(theItem));
41194117
K
54 else
55 myPtr = myBuffer;
56 }
57
f7b4312f 58 operator theItem*() const
41194117
K
59 {
60 return myPtr;
61 }
62
63private:
64
f7b4312f 65 NCollection_LocalArray (const NCollection_LocalArray& );
66 NCollection_LocalArray& operator= (const NCollection_LocalArray& );
41194117
K
67
68protected:
69
70 void Deallocate()
71 {
72 if (myPtr != myBuffer)
73 Standard::Free (*(Standard_Address*)&myPtr);
74 }
75
76protected:
77
f7b4312f 78 theItem myBuffer[MAX_ARRAY_SIZE];
79 theItem* myPtr;
41194117
K
80
81};
82
f7b4312f 83#endif // _NCollection_LocalArray_HeaderFile