Alternate e697dbe9c5997e35395fe158628dd8c5209481da
for Visual Studio 2022 and Windows 11.
読み取り中…
検索中…
一致する文字列を見つけられません
Freight.hpp
[詳解]
5
6#pragma once
7
8#include "HeapMemory.h"
9
10namespace alt
11{
12 namespace skeleton
13 {
16 template<class T>
17 class Freight
18 {
19 public:
21 Freight<T> ()
22 {
24 _lpData = NULL;
25 _size = 0;
26 };
27
30 Freight<T> (IMemory* memory)
31 {
32 if (memory == NULL)
34 else
35 _memory = memory;
36 _lpData = NULL;
37 _size = 0;
38 };
39
44 Freight<T> (T* lpData, size_t size, IMemory* memory = NULL)
45 :Freight (memory)
46 {
47 SetData (lpData, size);
48 };
49
52 Freight<T> (const Freight<T>& base)
53 {
54 if (dynamic_cast<alt::BasicMemory*>(base._memory))
56 else
57 _memory = base._memory;
58 _lpData = NULL;
59 _size = 0;
60 SetData (base._lpData, base._size);
61 };
62
64 APIENTRY ~Freight ()
65 {
66 Clear ();
67 auto basicMemory = dynamic_cast<alt::BasicMemory*>(_memory);
68 if (basicMemory)
69 {
70 delete basicMemory;
71 }
72 _memory = NULL;
73 };
74
78 VOID APIENTRY SetData (T* lpData, size_t size)
79 {
80 New (size);
81 // ここで正確に情報をコピーできるのは、
82 // charやunsigned char などのプリミティブな
83 // 型だけになる。コンストラクタやデストラクタを
84 // 持つものは、対応不可。operator = ()も動かない。
85 CopyMemory (_lpData, lpData, size * sizeof (T));
86 _size = size;
87 };
88
91 VOID APIENTRY New (size_t size)
92 {
93 Clear ();
94 _lpData = static_cast<T*>(_memory->Allocate (sizeof (T) * size));
95 _size = size;
96 };
97
100 T* APIENTRY GetData () const { return _lpData; };
101
104 size_t APIENTRY GetSize () const { return _size; }
105
107 VOID APIENTRY Clear ()
108 {
109 if (_lpData != NULL)
110 {
112 _lpData = NULL;
113 _size = 0;
114 }
115 };
116
119 VOID APIENTRY operator = (const Freight<T>& base)
120 {
121 if (dynamic_cast<alt::BasicMemory*>(base._memory))
122 _memory = new alt::BasicMemory ();
123 else
124 _memory = base._memory;
125 SetData (base._lpData, base._size);
126 };
127
128 private:
131 size_t _size;
132 };
133 }
134}
ヒープメモリに関するAPIを集約したクラス
#define size
malloc/realloc/freeを使った標準的なメモリクラス
Definition: HeapMemory.h:17
プリミティブな変数を管理するコンテナクラス
Definition: Freight.hpp:18
VOID APIENTRY Clear()
格納領域の開放
Definition: Freight.hpp:107
VOID APIENTRY operator=(const Freight< T > &base)
安全なオブジェクトのコピー
Definition: Freight.hpp:119
T *APIENTRY GetData() const
格納データの取得
Definition: Freight.hpp:100
APIENTRY ~Freight()
デストラクタ
Definition: Freight.hpp:64
Freight()
コンストラクタ
Definition: Freight.hpp:21
VOID APIENTRY New(size_t size)
事前のメモリ取得
Definition: Freight.hpp:91
size_t APIENTRY GetSize() const
格納データのサイズ取得
Definition: Freight.hpp:104
VOID APIENTRY SetData(T *lpData, size_t size)
値の設定
Definition: Freight.hpp:78
メモリの獲得・解放のインターフェースクラス
Definition: Memory.h:20
virtual LPVOID APIENTRY Allocate(SIZE_T bytes, DWORD dwFlags=MEM_ZERO)=0
メモリの取得
virtual BOOL APIENTRY Free(LPVOID lpvMem)=0
メモリの返却
Definition: DBLibrary.h:12