Solution46
CArray.h
[詳解]
1 //=============================================================================
2 /// @file
3 /// 配列クラスヘッダファイル
4 ///
5 /// 配列クラスヘッダファイルです。
6 ///
7 /// $Id: CArray.h 245 2019-03-20 15:03:41Z admin $
8 /// $Date: 2019-03-21 00:03:41 +0900 (2019/03/21 (木)) $
9 /// $Author: admin $
10 ///
11 /// @attention なし
12 
13 #pragma once
14 #pragma managed( push, off )
15 
16 //=============================================================================
17 // インクルードファイル
18 #include <LibCommonDef.h>
19 #include <initializer_list>
20 
21 //=============================================================================
22 // 共通ライブラリ名前空間
23 namespace LibCommon {
24  //=========================================================================
25  /// 配列クラス
26  ///
27  /// 配列クラスです。
28  ///
29  /// @tparam Type 配列要素型
30  /// @attention テンプレートクラスです。
31  ///
32  template< typename Type >
33  class CArray {
34  //=====================================================================
35  // 構築子と解体子
36  public:
37  //---------------------------------------------------------------------
38  /// コンストラクタ
39  ///
40  /// コンストラクタです。
41  ///
42  /// @param なし
43  /// @return なし
44  /// @attention なし
45  ///
46  explicit CArray() noexcept;
47 
48  //---------------------------------------------------------------------
49  /// コンストラクタ
50  ///
51  /// コンストラクタです。
52  ///
53  /// @param[in] rElement 配列要素参照
54  /// @return なし
55  /// @attention なし
56  ///
57  explicit CArray( Type const& rElement ) noexcept;
58 
59  //---------------------------------------------------------------------
60  /// コンストラクタ
61  ///
62  /// コンストラクタです。
63  ///
64  /// @param[in] pBuffer バッファポインタ
65  /// @param[in] nCount 配列要素数
66  /// @return なし
67  /// @attention なし
68  ///
69  explicit CArray( Type const* pBuffer, int nCount ) noexcept;
70 
71  //---------------------------------------------------------------------
72  /// コンストラクタ
73  ///
74  /// コンストラクタです。
75  ///
76  /// @param[in] rcInitializer 配列要素初期化子リスト参照
77  /// @return なし
78  /// @attention なし
79  ///
80  explicit CArray( std::initializer_list< Type const > const& rcInitializer ) noexcept;
81 
82  //---------------------------------------------------------------------
83  /// コピーコンストラクタ
84  ///
85  /// コピーコンストラクタです。
86  ///
87  /// @param[in] rcInstance インスタンス参照
88  /// @return なし
89  /// @attention なし
90  ///
91  explicit CArray( CArray const& rcInstance ) noexcept;
92 
93  //---------------------------------------------------------------------
94  /// ムーブコンストラクタ
95  ///
96  /// ムーブコンストラクタです。
97  ///
98  /// @param[in] rcInstance インスタンス左辺値参照
99  /// @return なし
100  /// @attention なし
101  ///
102  explicit CArray( CArray&& rcInstance ) noexcept;
103 
104  //---------------------------------------------------------------------
105  /// デストラクタ
106  ///
107  /// デストラクタです。
108  ///
109  /// @param なし
110  /// @return なし
111  /// @attention なし
112  ///
113  virtual ~CArray() noexcept;
114 
115  //=====================================================================
116  // インライン公開関数
117  public:
118  //---------------------------------------------------------------------
119  /// 配列要素バッファ取得関数
120  ///
121  /// 配列要素バッファ取得関数です。
122  ///
123  /// @param なし
124  /// @return バッファポインタ
125  /// @attention なし
126  ///
127  inline virtual Type* GetBuffer() noexcept { return m_pBuffer; }
128 
129  //---------------------------------------------------------------------
130  /// バッファサイズ取得関数
131  ///
132  /// バッファサイズ取得関数です。
133  ///
134  /// @param なし
135  /// @return バッファサイズ
136  /// @attention なし
137  ///
138  inline virtual int GetSize() const noexcept { return m_nSize; }
139 
140  //---------------------------------------------------------------------
141  /// 配列要素数取得関数
142  ///
143  /// 配列要素数取得関数です。
144  ///
145  /// @param なし
146  /// @return 配列要素数
147  /// @attention なし
148  ///
149  inline virtual int GetCount() const noexcept { return m_nCount; }
150 
151  //---------------------------------------------------------------------
152  /// セグメントサイズ取得関数
153  ///
154  /// セグメントサイズ取得関数です。
155  ///
156  /// @param なし
157  /// @return セグメントサイズ
158  /// @attention なし
159  ///
160  inline virtual int GetSegmentSize() const noexcept { return SEGMENT_SIZE; }
161 
162  //=====================================================================
163  // 公開演算子オーバーロード関数
164  public:
165  //---------------------------------------------------------------------
166  /// コピー代入演算子オーバーロード関数
167  ///
168  /// コピー代入演算子オーバーロード関数です。
169  ///
170  /// @param[in] rcInstance インスタンス参照
171  /// @return インスタンス参照
172  /// @attention なし
173  ///
174  virtual CArray& operator=( CArray const& rcInstance ) noexcept;
175 
176  //---------------------------------------------------------------------
177  /// ムーブ代入演算子オーバーロード関数
178  ///
179  /// ムーブ代入演算子オーバーロード関数です。
180  ///
181  /// @param[in] rcInstance インスタンス左辺値参照
182  /// @return インスタンス参照
183  /// @attention なし
184  ///
185  virtual CArray& operator=( CArray&& rcInstance ) noexcept;
186 
187  //---------------------------------------------------------------------
188  /// 代入演算子オーバーロード関数
189  ///
190  /// 代入演算子オーバーロード関数です。
191  ///
192  /// @param[in] rElement 配列要素参照
193  /// @return インスタンス参照
194  /// @attention なし
195  ///
196  virtual CArray& operator=( Type const& rElement ) noexcept;
197 
198  //---------------------------------------------------------------------
199  /// 代入演算子オーバーロード関数
200  ///
201  /// 代入演算子オーバーロード関数です。
202  ///
203  /// @param[in] rcInitializer 配列要素初期化子リスト参照
204  /// @attention なし
205  ///
206  virtual CArray& operator=( std::initializer_list< Type const > const& rcInitializer ) noexcept;
207 
208  //---------------------------------------------------------------------
209  /// 加算代入演算子オーバーロード関数
210  ///
211  /// 加算代入演算子オーバーロード関数です。
212  ///
213  /// @param[in] rcInstance インスタンス参照
214  /// @return インスタンス参照
215  /// @attention なし
216  ///
217  virtual CArray& operator+=( CArray const& rcInstance ) noexcept;
218 
219  //---------------------------------------------------------------------
220  /// 加算代入演算子オーバーロード関数
221  ///
222  /// 加算代入演算子オーバーロード関数です。
223  ///
224  /// @param[in] rElement 配列要素参照
225  /// @return インスタンス参照
226  /// @attention なし
227  ///
228  virtual CArray& operator+=( Type const& rElement ) noexcept;
229 
230  //---------------------------------------------------------------------
231  /// 加算代入演算子オーバーロード関数
232  ///
233  /// 加算代入演算子オーバーロード関数です。
234  ///
235  /// @param[in] rcInitializer 配列要素初期化子リスト参照
236  /// @return インスタンス参照
237  /// @attention なし
238  ///
239  virtual CArray& operator+=( std::initializer_list< Type const > const& rcInitializer ) noexcept;
240 
241  //---------------------------------------------------------------------
242  /// 配列添字演算子オーバーロード関数
243  ///
244  /// 配列添字演算子オーバーロード関数です。
245  ///
246  /// @param[in] nIndex インデックス
247  /// @return 配列要素参照
248  /// @attention なし
249  ///
250  virtual Type& operator[]( int nIndex ) noexcept;
251 
252  //---------------------------------------------------------------------
253  /// 配列要素ポインタキャスト演算子オーバーロード関数
254  ///
255  /// 配列要素ポインタキャスト演算子オーバーロード関数です。
256  ///
257  /// @param なし
258  /// @return 配列要素ポインタ
259  /// @attention なし
260  ///
261  virtual operator Type const*() noexcept { return m_pBuffer; }
262 
263  //---------------------------------------------------------------------
264  /// 関数演算子オーバーロード関数
265  ///
266  /// 関数演算子オーバーロード関数です。
267  ///
268  /// @param なし
269  /// @return インスタンス参照
270  /// @attention なし
271  ///
272  virtual CArray& operator()() noexcept { return *this; }
273 
274  //=====================================================================
275  // 公開関数
276  public:
277  //---------------------------------------------------------------------
278  /// クリア関数
279  ///
280  /// クリア関数です。
281  ///
282  /// @param なし
283  /// @return なし
284  /// @attention なし
285  ///
286  virtual void Clear() noexcept;
287 
288  //---------------------------------------------------------------------
289  /// バッファ作成関数
290  ///
291  /// バッファ作成関数です。
292  ///
293  /// @param[in] nSize バッファサイズ
294  /// @return 実行結果
295  /// - true 成功
296  /// - false 失敗
297  /// @attention なし
298  ///
299  virtual bool CreateBuffer( int nSize ) noexcept;
300 
301  //---------------------------------------------------------------------
302  /// バッファサイズ更新関数
303  ///
304  /// バッファサイズ更新関数です。
305  ///
306  /// @param[in] nCount 配列要素数
307  /// @return 実行結果
308  /// - true 成功
309  /// - false 失敗
310  /// @attention なし
311  ///
312  virtual bool UpdateBuffer( int nCount ) noexcept;
313 
314  //---------------------------------------------------------------------
315  /// バッファサイズコンパクト化関数
316  ///
317  /// バッファサイズコンパクト化関数です。
318  ///
319  /// @param なし
320  /// @return 実行結果
321  /// - true 成功
322  /// - false 失敗
323  /// @attention なし
324  ///
325  virtual bool CompactBuffer() noexcept;
326 
327  //---------------------------------------------------------------------
328  /// コピー関数
329  ///
330  /// コピー関数です。
331  ///
332  /// @param[in] rcInstance インスタンス参照
333  /// @return 実行結果
334  /// - true 成功
335  /// - false 失敗
336  /// @attention なし
337  ///
338  virtual bool Copy( CArray const& rcInstance ) noexcept;
339 
340  //---------------------------------------------------------------------
341  /// コピー関数
342  ///
343  /// コピー関数です。
344  ///
345  /// @param[in] rElement 配列要素参照
346  /// @return 実行結果
347  /// - true 成功
348  /// - false 失敗
349  /// @attention なし
350  ///
351  virtual bool Copy( Type const& rElement ) noexcept;
352 
353  //---------------------------------------------------------------------
354  /// コピー関数
355  ///
356  /// コピー関数です。
357  ///
358  /// @param[in] pBuffer バッファポインタ
359  /// @param[in] nCount 配列要素数
360  /// @return 実行結果
361  /// - true 成功
362  /// - false 失敗
363  /// @attention なし
364  ///
365  virtual bool Copy( Type const* pBuffer, int nCount ) noexcept;
366 
367  //---------------------------------------------------------------------
368  /// コピー関数
369  ///
370  /// コピー関数です。
371  ///
372  /// @param[in] rcInitializer 配列要素初期化子リスト参照
373  /// @return 実行結果
374  /// - true 成功
375  /// - false 失敗
376  /// @attention なし
377  ///
378  virtual bool Copy( std::initializer_list< Type const > const& rcInitializer ) noexcept;
379 
380  //---------------------------------------------------------------------
381  /// ムーブ関数
382  ///
383  /// ムーブ関数です。
384  ///
385  /// @param[in] rcInstance インスタンス左辺値参照
386  /// @return 実行結果
387  /// - true 成功
388  /// - false 失敗
389  /// @attention なし
390  ///
391  virtual bool Move( CArray&& rcInstance ) noexcept;
392 
393  //---------------------------------------------------------------------
394  /// 追加関数
395  ///
396  /// 追加関数です。
397  ///
398  /// @param[in] rcInstance インスタンス参照
399  /// @return 実行結果
400  /// - true 成功
401  /// - false 失敗
402  /// @attention なし
403  ///
404  virtual bool Append( CArray const& rcInstance ) noexcept;
405 
406  //---------------------------------------------------------------------
407  /// 追加関数
408  ///
409  /// 追加関数です。
410  ///
411  /// @param[in] rElement 配列要素参照
412  /// @return 実行結果
413  /// - true 成功
414  /// - false 失敗
415  /// @attention なし
416  ///
417  virtual bool Append( Type const& rElement ) noexcept;
418 
419  //---------------------------------------------------------------------
420  /// 追加関数
421  ///
422  /// 追加関数です。
423  ///
424  /// @param[in] pBuffer バッファポインタ
425  /// @param[in] nCount 配列要素数
426  /// @return 実行結果
427  /// - true 成功
428  /// - false 失敗
429  /// @attention なし
430  ///
431  virtual bool Append( Type const* pBuffer, int nCount ) noexcept;
432 
433  //---------------------------------------------------------------------
434  /// 追加関数
435  ///
436  /// 追加関数です。
437  ///
438  /// @param[in] rcInitializer 配列要素初期化子リスト参照
439  /// @return 実行結果
440  /// - true 成功
441  /// - false 失敗
442  /// @attention なし
443  ///
444  virtual bool Append( std::initializer_list< Type const > const& rcInitializer ) noexcept;
445 
446  //---------------------------------------------------------------------
447  /// 挿入関数
448  ///
449  /// 挿入関数です。
450  ///
451  /// @param[in] nIndex インデックス
452  /// @param[in] rcInstance インスタンス参照
453  /// @return 実行結果
454  /// - true 成功
455  /// - false 失敗
456  /// @attention なし
457  ///
458  virtual bool Insert( int nIndex, CArray const& rcInstance ) noexcept;
459 
460  //---------------------------------------------------------------------
461  /// 挿入関数
462  ///
463  /// 挿入関数です。
464  ///
465  /// @param[in] nIndex インデックス
466  /// @param[in] rElement 配列要素参照
467  /// @return 実行結果
468  /// - true 成功
469  /// - false 失敗
470  /// @attention なし
471  ///
472  virtual bool Insert( int nIndex, Type const& rElement ) noexcept;
473 
474  //---------------------------------------------------------------------
475  /// 挿入関数
476  ///
477  /// 挿入関数です。
478  ///
479  /// @param[in] nIndex インデックス
480  /// @param[in] pBuffer バッファポインタ
481  /// @param[in] nCount 配列要素数
482  /// @return 実行結果
483  /// - true 成功
484  /// - false 失敗
485  /// @attention なし
486  ///
487  virtual bool Insert( int nIndex, Type const* pBuffer, int nCount ) noexcept;
488 
489  //---------------------------------------------------------------------
490  /// 挿入関数
491  ///
492  /// 挿入関数です。
493  ///
494  /// @param[in] nIndex インデックス
495  /// @param[in] rcInitializer 配列要素初期化子リスト参照
496  /// @return 実行結果
497  /// - true 成功
498  /// - false 失敗
499  /// @attention なし
500  ///
501  virtual bool Insert( int nIndex, std::initializer_list< Type const > const& rcInitializer ) noexcept;
502 
503  //---------------------------------------------------------------------
504  /// 削除関数
505  ///
506  /// 削除関数です。
507  ///
508  /// @param なし
509  /// @return 実行結果
510  /// - true 成功
511  /// - false 失敗
512  /// @attention なし
513  ///
514  virtual bool Remove() noexcept;
515 
516  //---------------------------------------------------------------------
517  /// 削除関数
518  ///
519  /// 削除関数です。
520  ///
521  /// @param[in] nIndex インデックス
522  /// @return 実行結果
523  /// - true 成功
524  /// - false 失敗
525  /// @attention なし
526  ///
527  virtual bool Remove( int nIndex ) noexcept;
528 
529  //---------------------------------------------------------------------
530  /// 削除関数
531  ///
532  /// 削除関数です。
533  ///
534  /// @param[in] nIndex インデックス
535  /// @param[in] nCount 配列要素数
536  /// @return 実行結果
537  /// - true 成功
538  /// - false 失敗
539  /// @attention なし
540  ///
541  virtual bool Remove( int nIndex, int nCount ) noexcept;
542 
543  //---------------------------------------------------------------------
544  /// 取得関数
545  ///
546  /// 取得関数です。
547  ///
548  /// @param[in] nIndex インデックス
549  /// @param[in] rElement 配列要素参照
550  /// @return 実行結果
551  /// - true 成功
552  /// - false 失敗
553  /// @attention なし
554  ///
555  virtual bool Get( int nIndex, Type& rElement ) const noexcept;
556 
557  //---------------------------------------------------------------------
558  /// 設定関数
559  ///
560  /// 設定関数です。
561  ///
562  /// @param[in] nIndex インデックス
563  /// @param[in] rElement 配列要素参照
564  /// @return 実行結果
565  /// - true 成功
566  /// - false 失敗
567  /// @attention なし
568  ///
569  virtual bool Set( int nIndex, Type const& rElement ) noexcept;
570 
571  //---------------------------------------------------------------------
572  /// 検索関数
573  ///
574  /// 検索関数です。
575  ///
576  /// @param[in] rElement 配列要素参照
577  /// @return インデックス
578  /// - 0 以上 成功
579  /// - 0 未満 失敗
580  /// @attention なし
581  ///
582  virtual int Find( Type const& rElement ) const noexcept;
583 
584  //---------------------------------------------------------------------
585  /// 比較関数
586  ///
587  /// 比較関数です。
588  ///
589  /// @param[in] rElement1 第1配列要素参照
590  /// @param[in] rElement2 第2配列要素参照
591  /// @return 実行結果
592  /// - true 一致
593  /// - false 不一致
594  /// @attention なし
595  ///
596  virtual bool Compare( Type const& rElement1, Type const& rElement2 ) const noexcept;
597 
598  //---------------------------------------------------------------------
599  /// プッシュ関数
600  ///
601  /// プッシュ関数です。
602  ///
603  /// @param[in] rElement 配列要素参照
604  /// @return 実行結果
605  /// - true 成功
606  /// - false 失敗
607  /// @attention なし
608  ///
609  virtual bool Push( Type const& rElement ) noexcept;
610 
611  //---------------------------------------------------------------------
612  /// プッシュ関数
613  ///
614  /// プッシュ関数です。
615  ///
616  /// @param[in] pBuffer 配列要素ポインタ
617  /// @param[in] nCount 配列要素数
618  /// @return 実行結果
619  /// - true 成功
620  /// - false 失敗
621  /// @attention なし
622  ///
623  virtual bool Push( Type const* pBuffer, int nCount ) noexcept;
624 
625  //---------------------------------------------------------------------
626  /// プッシュ関数
627  ///
628  /// プッシュ関数です。
629  ///
630  /// @param[in] rcInitializer 配列要素初期化子リスト参照
631  /// @return 実行結果
632  /// - true 成功
633  /// - false 失敗
634  /// @attention なし
635  ///
636  virtual bool Push( std::initializer_list< Type const > const& rcInitializer ) noexcept;
637 
638  //---------------------------------------------------------------------
639  /// ポップ関数
640  ///
641  /// ポップ関数です。
642  ///
643  /// @param[in] rElement 配列要素参照
644  /// @return 実行結果
645  /// - true 成功
646  /// - false 失敗
647  /// @attention なし
648  ///
649  virtual bool Pop( Type& rElement ) noexcept;
650 
651  //---------------------------------------------------------------------
652  /// ポップフロント関数
653  ///
654  /// ポップフロント関数です。
655  ///
656  /// @param[in] rElement 配列要素参照
657  /// @return 実行結果
658  /// - true 成功
659  /// - false 失敗
660  /// @attention なし
661  ///
662  virtual bool PopFront( Type& rElement ) noexcept;
663 
664  //=====================================================================
665  // 限定公開変数
666  protected:
667  Type* m_pBuffer; ///< バッファポインタ
668  int m_nSize; ///< バッファサイズ
669  int m_nCount; ///< 要素数
670 
671  //=====================================================================
672  // 静的公開定数
673  public:
674  static int const SEGMENT_SIZE = 256; ///< セグメントサイズ初期値
675  };
676 }
677 
678 #pragma managed( pop )
virtual bool CreateBuffer(int nSize) noexcept
バッファ作成関数
Definition: CArray.hpp:222
virtual bool Set(int nIndex, Type const &rElement) noexcept
設定関数
Definition: CArray.hpp:613
virtual ~CArray() noexcept
デストラクタ
Definition: CArray.hpp:96
virtual bool Remove() noexcept
削除関数
Definition: CArray.hpp:528
virtual int GetSegmentSize() const noexcept
セグメントサイズ取得関数
Definition: CArray.h:160
virtual bool Move(CArray &&rcInstance) noexcept
ムーブ関数
Definition: CArray.hpp:365
virtual bool Append(CArray const &rcInstance) noexcept
追加関数
Definition: CArray.hpp:393
virtual void Clear() noexcept
クリア関数
Definition: CArray.hpp:209
CArray() noexcept
コンストラクタ
Definition: CArray.hpp:31
配列クラス
Definition: CArray.h:33
int m_nCount
要素数
Definition: CArray.h:669
共通ライブラリ定義ヘッダファイル
共通ライブラリ名前空間
Definition: CArray.h:23
int m_nSize
バッファサイズ
Definition: CArray.h:668
virtual bool Push(Type const &rElement) noexcept
プッシュ関数
Definition: CArray.hpp:686
virtual int GetSize() const noexcept
バッファサイズ取得関数
Definition: CArray.h:138
static int const SEGMENT_SIZE
セグメントサイズ初期値
Definition: CArray.h:674
virtual int Find(Type const &rElement) const noexcept
検索関数
Definition: CArray.hpp:637
virtual bool Pop(Type &rElement) noexcept
ポップ関数
Definition: CArray.hpp:710
virtual Type * GetBuffer() noexcept
配列要素バッファ取得関数
Definition: CArray.h:127
virtual bool Compare(Type const &rElement1, Type const &rElement2) const noexcept
比較関数
Definition: CArray.hpp:659
virtual CArray & operator()() noexcept
関数演算子オーバーロード関数
Definition: CArray.h:272
virtual CArray & operator+=(CArray const &rcInstance) noexcept
加算代入演算子オーバーロード関数
Definition: CArray.hpp:150
virtual bool Get(int nIndex, Type &rElement) const noexcept
取得関数
Definition: CArray.hpp:589
Type * m_pBuffer
バッファポインタ
Definition: CArray.h:667
virtual Type & operator[](int nIndex) noexcept
配列添字演算子オーバーロード関数
Definition: CArray.hpp:183
virtual bool Insert(int nIndex, CArray const &rcInstance) noexcept
挿入関数
Definition: CArray.hpp:425
virtual bool CompactBuffer() noexcept
バッファサイズコンパクト化関数
Definition: CArray.hpp:297
virtual bool Copy(CArray const &rcInstance) noexcept
コピー関数
Definition: CArray.hpp:321
virtual CArray & operator=(CArray const &rcInstance) noexcept
コピー代入演算子オーバーロード関数
Definition: CArray.hpp:106
virtual int GetCount() const noexcept
配列要素数取得関数
Definition: CArray.h:149
virtual bool PopFront(Type &rElement) noexcept
ポップフロント関数
Definition: CArray.hpp:736
virtual bool UpdateBuffer(int nCount) noexcept
バッファサイズ更新関数
Definition: CArray.hpp:270