nlib
CachedHeap.h
[詳解]
1 
2 #pragma once
3 #ifndef INCLUDE_NN_NLIB_HEAP_CACHEDHEAP_H_
4 #define INCLUDE_NN_NLIB_HEAP_CACHEDHEAP_H_
5 
6 #include "nn/nlib/Config.h"
7 #include "nn/nlib/Swap.h"
8 
9 #if defined(_MSC_VER) && defined(nx_heap_EXPORTS)
10 #undef NLIB_VIS_PUBLIC
11 #define NLIB_VIS_PUBLIC NLIB_WINEXPORT
12 #endif
13 
14 NLIB_NAMESPACE_BEGIN
15 namespace heap {
16 
17 class TlsHeapCache;
18 
20  public:
21  CachedHeap() NLIB_NOEXCEPT : body_(NULL) {}
22  ~CachedHeap() NLIB_NOEXCEPT { this->Finalize(); }
23  NLIB_MOVE_MEMBER_HELPER_1(CachedHeap, body_);
25  using std::swap;
26  swap(body_, rhs.body_);
27  }
28 
29  void* Alloc(size_t n) NLIB_NOEXCEPT; // nmalloc()
30  void* Alloc(size_t n, size_t algn) NLIB_NOEXCEPT; // nmalloc_aligned()
31  size_t GetAllocSize(const void* p) NLIB_NOEXCEPT; // nmalloc_size()
32  errno_t Free(void* p) NLIB_NOEXCEPT; // nfree()
33  errno_t FreeWithSize(void* p, size_t size) NLIB_NOEXCEPT; // nfree_size()
34  errno_t Realloc(void* ptr, size_t size, void** p) NLIB_NOEXCEPT; // nrealloc() minus
35 
36  void ReleaseAllCache() NLIB_NOEXCEPT; // nmalloc_query(NMALLOC_QUERY_CLEAR_CACHE);
37  void Finalize() NLIB_NOEXCEPT; // nmalloc_query(NMALLOC_QUERY_FINALIZE_CACHE);
38  bool CheckCache() NLIB_NOEXCEPT;
39  errno_t QueryV(int query, va_list ap) NLIB_NOEXCEPT;
40  errno_t Query(int query, ...) NLIB_NOEXCEPT;
41 
42  // Internal use only
43  NLIB_VIS_HIDDEN void Reset(TlsHeapCache* body) NLIB_NOEXCEPT;
44  NLIB_VIS_HIDDEN TlsHeapCache* Release() NLIB_NOEXCEPT;
45 
46  NLIB_SAFE_BOOL(CachedHeap, (body_ != NULL))
47 
48  private:
49  TlsHeapCache* body_;
51 };
52 
53 } // namespace heap
54 NLIB_NAMESPACE_END
55 
56 NLIB_DEFINE_STD_SWAP(::nlib_ns::heap::CachedHeap)
57 
58 #if defined(_MSC_VER) && defined(nx_heap_EXPORTS)
59 #undef NLIB_VIS_PUBLIC
60 #define NLIB_VIS_PUBLIC NLIB_WINIMPORT
61 #endif
62 
63 #endif // INCLUDE_NN_NLIB_HEAP_CACHEDHEAP_H_
#define NLIB_DISALLOW_COPY_AND_ASSIGN(TypeName)
TypeName で指定されたクラスのコピーコンストラクタと代入演算子を禁止します。
Definition: Config.h:145
#define NLIB_SAFE_BOOL(class_name, exp)
クラス内に安全なoperator bool()を定義します。 可能であればC++11のexplicit boolを利用します。 ...
Definition: Config.h:160
~CachedHeap() noexcept
デストラクタです。Finalize()を呼び出します。
Definition: CachedHeap.h:22
void swap(CachedHeap &rhs) noexcept
オブジェクトの内容をスワップします。
Definition: CachedHeap.h:24
#define NLIB_VIS_HIDDEN
関数やクラス等のシンボルをライブラリの外部に公開しません。
Definition: Platform_unix.h:60
#define NLIB_VIS_PUBLIC
関数やクラス等のシンボルをライブラリの外部に公開します。
Definition: Platform_unix.h:61
CachedHeap() noexcept
デフォルトコンストラクタです。
Definition: CachedHeap.h:21
#define NLIB_NOEXCEPT
環境に合わせてnoexcept 又は同等の定義がされます。
Definition: Config.h:86
開発環境別の設定が書かれるファイルです。
CentralHeapと対になって利用されるスレッド専用キャッシュクラスです。
Definition: CachedHeap.h:19
#define NLIB_FINAL
利用可能であればfinalが定義されます。そうでない場合は空文字列です。
Definition: Config.h:211
int errno_t
intのtypedefで、戻り値としてPOSIXのエラー値を返すことを示します。
Definition: NMalloc.h:24