AM Daemon ライブラリリファレンス
BackupRecord.h
[詳解]
1 /// @file
2 /// @brief 不揮発データバックアップレコード情報構造体 BackupRecord のヘッダ。
3 ///
4 /// Copyright(C)SEGA
5 
6 #ifndef AMDAEMON_BACKUPRECORD_H
7 #define AMDAEMON_BACKUPRECORD_H
8 
9 #include "amdaemon/env.h"
10 #include "amdaemon/BackupDevice.h"
11 #include "amdaemon/util/traits.h"
12 
13 #include <type_traits>
14 #include <cstddef>
15 
16 namespace amdaemon
17 {
18 /// @addtogroup g_backup
19 /// @{
20 
21  /// @brief 不揮発データバックアップレコード情報構造体。
22  /// @see Backup
23  ///
24  /// 不揮発メモリにバックアップするデータ単体の情報を保持する。
25  struct BackupRecord
26  {
27  void* address; ///< データアドレス。このアドレスに対して読み書きを行う。
28  std::size_t size; ///< データサイズ。
29  BackupDevice device; ///< バックアップ先デバイス。
30 
31  /// @brief バックアップレコード情報を作成する。
32  /// @param[in] address データアドレス。
33  /// @param[in] size データサイズ。
34  /// @param[in] device バックアップ先デバイス。
35  /// @return バックアップレコード情報。
36  static BackupRecord make(void* address, std::size_t size, BackupDevice device)
37  {
38  BackupRecord record = { address, size, device };
39  return record;
40  }
41 
42  /// @brief データ参照からバックアップレコード情報を作成する。
43  /// @tparam Data データ型。後述の要件を満たす型でなければならない。
44  /// @param[in] data データ参照。
45  /// @param[in] device バックアップ先デバイス。
46  /// @return バックアップレコード情報。
47  ///
48  /// データサイズは sizeof(data) となる。
49  ///
50  /// 型 Data は下記の要件をすべて満たす必要がある。
51  ///
52  /// - const 修飾されていない。
53  /// - オブジェクト型(スカラ型、配列、クラス&構造体、共用体のいずれか)である。
54  /// - トリビアルコピー可能な型である。
55  /// - ポインタ型ではない。
56  /// - std::nullptr_t 型ではない。
57  ///
58  /// 要するに、安全に std::memcpy によるコピーが可能な型である必要がある。
59  /// 1つでも満たしていない場合はコンパイルエラーとなる。
60  template<class Data>
61  static auto make(Data& data, BackupDevice device)
62  ->
63  typename std::enable_if<
64  !std::is_const<Data>::value &&
66  BackupRecord>::type
67  {
68  return make(&data, sizeof(data), device);
69  }
70  };
71 
72 /// @}
73 } // namespace amdaemon
74 
75 #endif // AMDAEMON_BACKUPRECORD_H
不揮発データバックアップレコード情報構造体。
Definition: BackupRecord.h:25
型に関するメタ関数を定義するヘッダ。
Daemonライブラリの環境定義を行うヘッダ。
AM Daemon ライブラリクラス群の基底名前空間。
Definition: Log.h:13
static BackupRecord make(void *address, std::size_t size, BackupDevice device)
バックアップレコード情報を作成する。
Definition: BackupRecord.h:36
型 T がバイナリベースでコピー可能な型であるか否かを調べるメタ関数。
Definition: traits.h:34
バックアップ保存先デバイス列挙 BackupDevice のヘッダ。
std::size_t size
データサイズ。
Definition: BackupRecord.h:28
static auto make(Data &data, BackupDevice device) -> typename std::enable_if< !std::is_const< Data >::value && ::amdaemon::util::IsBinaryCopyable< Data >::value, BackupRecord >::type
データ参照からバックアップレコード情報を作成する。
Definition: BackupRecord.h:61
BackupDevice device
バックアップ先デバイス。
Definition: BackupRecord.h:29
void * address
データアドレス。このアドレスに対して読み書きを行う。
Definition: BackupRecord.h:27
BackupDevice
バックアップ保存先デバイス列挙。
Definition: BackupDevice.h:17