0023901: Memory leaks in tests.
[occt.git] / src / PLib / PLib_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
K
19
20#ifndef _PLib_LocalArray_HeaderFile
21#define _PLib_LocalArray_HeaderFile
22
23#include <Standard.hxx>
24#include <Standard_TypeDef.hxx>
25
26//! Auxiliary class optimizing creation of array buffer for
27//! evaluation of bspline (using stack allocation for small arrays)
28class PLib_LocalArray
29{
30public:
31
32 // 1K * sizeof (double) = 8K
33 static const size_t MAX_ARRAY_SIZE = 1024;
34
35 PLib_LocalArray (const size_t theSize)
36 : myPtr (myBuffer)
37 {
38 Allocate(theSize);
39 }
40
41 PLib_LocalArray()
42 : myPtr (myBuffer) {}
43
44 virtual ~PLib_LocalArray()
45 {
46 Deallocate();
47 }
48
49 void Allocate (const size_t theSize)
50 {
51 Deallocate();
52 if (theSize > MAX_ARRAY_SIZE)
53 myPtr = (Standard_Real*)Standard::Allocate (theSize * sizeof(Standard_Real));
54 else
55 myPtr = myBuffer;
56 }
57
58 operator Standard_Real*() const
59 {
60 return myPtr;
61 }
62
63private:
64
65 PLib_LocalArray (const PLib_LocalArray& );
66 PLib_LocalArray& operator= (const PLib_LocalArray& );
67
68protected:
69
70 void Deallocate()
71 {
72 if (myPtr != myBuffer)
73 Standard::Free (*(Standard_Address*)&myPtr);
74 }
75
76protected:
77
78 Standard_Real myBuffer[MAX_ARRAY_SIZE];
79 Standard_Real* myPtr;
80
81};
82
83#endif