0029151: GCC 7.1 warnings "this statement may fall through" [-Wimplicit-fallthrough=]
[occt.git] / src / NCollection / NCollection_BaseAllocator.hxx
1 // Created on: 2002-04-12
2 // Created by: Alexander KARTOMIN (akm)
3 // Copyright (c) 2002-2014 OPEN CASCADE SAS
4 //
5 // This file is part of Open CASCADE Technology software library.
6 //
7 // This library is free software; you can redistribute it and/or modify it under
8 // the terms of the GNU Lesser General Public License version 2.1 as published
9 // by the Free Software Foundation, with special exception defined in the file
10 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11 // distribution for complete text of the license and disclaimer of any warranty.
12 //
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement.
15
16 // Purpose:     Basic class for memory allocation wizards.
17 //              Defines  the  interface  for devising  different  allocators
18 //              firstly to be used  by collections of NCollection, though it
19 //              it is not  deferred. It allocates/frees  the memory  through
20 //              Standard procedures, thus it is  unnecessary (and  sometimes
21 //              injurious) to have  more than one such  allocator.  To avoid
22 //              creation  of multiple  objects the  constructors  were  maid
23 //              inaccessible.  To  create the  BaseAllocator use  the method
24 //              CommonBaseAllocator.
25 //              Note that this object is managed by Handle.
26
27 #ifndef NCollection_BaseAllocator_HeaderFile
28 #define NCollection_BaseAllocator_HeaderFile
29
30 #include <Standard_Transient.hxx>
31 #include <Standard_Type.hxx>
32 #include <NCollection_TypeDef.hxx>
33
34
35 /**
36 * Purpose:     Basic class for memory allocation wizards.
37 *              Defines  the  interface  for devising  different  allocators
38 *              firstly to be used  by collections of NCollection, though it
39 *              it is not  deferred. It allocates/frees  the memory  through
40 *              Standard procedures, thus it is  unnecessary (and  sometimes
41 *              injurious) to have  more than one such  allocator.  To avoid
42 *              creation  of multiple  objects the  constructors  were  maid
43 *              inaccessible.  To  create the  BaseAllocator use  the method
44 *              CommonBaseAllocator.
45 *              Note that this object is managed by Handle.
46 */              
47 class NCollection_BaseAllocator : public Standard_Transient
48 {
49  public:
50   // ---------- PUBLIC METHODS ------------
51   Standard_EXPORT virtual void* Allocate (const size_t size);
52   Standard_EXPORT virtual void  Free     (void * anAddress);
53   
54   //! CommonBaseAllocator
55   //! This method is designed to have the only one BaseAllocator (to avoid
56   //! useless copying of collections). However one can use operator new to
57   //! create more BaseAllocators, but it is injurious.
58   Standard_EXPORT static const Handle(NCollection_BaseAllocator)&
59     CommonBaseAllocator(void);
60
61   //! Callback function to register alloc/free calls
62   Standard_EXPORT static void StandardCallBack
63                     (const Standard_Boolean theIsAlloc,
64                      const Standard_Address theStorage,
65                      const Standard_Size theRoundSize,
66                      const Standard_Size theSize);
67
68   //! Prints memory usage statistics cumulated by StandardCallBack
69   Standard_EXPORT static void PrintMemUsageStatistics();
70
71  protected:
72   //! Constructor - prohibited
73   NCollection_BaseAllocator(void) {}
74
75  private:
76   //! Copy constructor - prohibited
77   NCollection_BaseAllocator(const NCollection_BaseAllocator&);
78
79  public:
80   // ---------- CasCade RunTime Type Information
81   DEFINE_STANDARD_RTTIEXT(NCollection_BaseAllocator,Standard_Transient)
82 };
83
84 DEFINE_STANDARD_HANDLE(NCollection_BaseAllocator,Standard_Transient)
85
86 #endif