0027970: Improvement of standard attributes usability - containers.
[occt.git] / src / Standard / Standard.hxx
CommitLineData
42cf5bc1 1// Created on: 1991-09-05
2// Created by: J.P. TIRAUlt
3// Copyright (c) 1991-1999 Matra Datavision
4// Copyright (c) 1999-2014 OPEN CASCADE SAS
5//
6// This file is part of Open CASCADE Technology software library.
7//
8// This library is free software; you can redistribute it and/or modify it under
9// the terms of the GNU Lesser General Public License version 2.1 as published
10// by the Free Software Foundation, with special exception defined in the file
11// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12// distribution for complete text of the license and disclaimer of any warranty.
13//
14// Alternatively, this file may be used under the terms of Open CASCADE
15// commercial license or contractual agreement.
16
17#ifndef _Standard_HeaderFile
18#define _Standard_HeaderFile
19
42cf5bc1 20#include <Standard_DefineAlloc.hxx>
42cf5bc1 21#include <Standard_Address.hxx>
22#include <Standard_Size.hxx>
23#include <Standard_Integer.hxx>
c60ae7f6 24
42cf5bc1 25class Standard_ErrorHandler;
42cf5bc1 26class Standard_Persistent;
27class Standard_Transient;
28class Standard_Failure;
29
c60ae7f6 30//! The package Standard provides global memory allocator and other basic
31//! services used by other OCCT components.
42cf5bc1 32
33class Standard
34{
35public:
36
37 DEFINE_STANDARD_ALLOC
38
39
40 //! Allocates memory blocks
41 //! aSize - bytes to allocate
42 Standard_EXPORT static Standard_Address Allocate (const Standard_Size aSize);
43
44 //! Deallocates memory blocks
c60ae7f6 45 //! @param thePtr - previously allocated memory block to be freed
46 Standard_EXPORT static void Free (const Standard_Address thePtr);
5b111128 47
c60ae7f6 48 //! Template version of function Free(), nullifies the argument pointer
49 //! @param thePtr - previously allocated memory block to be freed
50 template <typename T>
51 static inline void Free (T*& thePtr)
52 {
53 Free ((void*)thePtr);
54 thePtr = 0;
55 }
42cf5bc1 56
57 //! Reallocates memory blocks
58 //! aStorage - previously allocated memory block
59 //! aNewSize - new size in bytes
60 Standard_EXPORT static Standard_Address Reallocate (const Standard_Address aStorage, const Standard_Size aNewSize);
61
62 //! Allocates aligned memory blocks.
63 //! Should be used with CPU instructions which require specific alignment.
64 //! For example: SSE requires 16 bytes, AVX requires 32 bytes.
65 //! @param theSize bytes to allocate
66 //! @param theAlign alignment in bytes
67 Standard_EXPORT static Standard_Address AllocateAligned (const Standard_Size theSize, const Standard_Size theAlign);
68
69 //! Deallocates memory blocks
70 //! @param thePtrAligned the memory block previously allocated with AllocateAligned()
71 Standard_EXPORT static void FreeAligned (const Standard_Address thePtrAligned);
5b111128 72
c60ae7f6 73 //! Template version of function FreeAligned(), nullifies the argument pointer
74 //! @param thePtrAligned the memory block previously allocated with AllocateAligned()
75 template <typename T>
76 static inline void FreeAligned (T*& thePtrAligned)
77 {
78 FreeAligned ((void* )thePtrAligned);
79 thePtrAligned = 0;
80 }
42cf5bc1 81
82 //! Deallocates the storage retained on the free list
83 //! and clears the list.
84 //! Returns non-zero if some memory has been actually freed.
85 Standard_EXPORT static Standard_Integer Purge();
86
42cf5bc1 87};
88
d1a67b9d 89// include definition of handle to make it always visible
90// (put at the and of the file due to cyclic dependency between headers)
91#include <Standard_Transient.hxx>
42cf5bc1 92
42cf5bc1 93#endif // _Standard_HeaderFile