CTR-Pia  5.4.3
Game Communication Engine
 全て クラス ネームスペース 関数 変数 型定義 列挙型 列挙型の値 ページ
クラス テンプレート nn::pia::clone::SerializePolicy< Type_ >

クローンエレメントに設定する値のシリアライズ・デシリアライズの方法を定義します。 [詳細]

Static Public メソッド

static void Deserialize (Type *pValue, const void *cpData)
 デシリアライズします。
 
static uint32_t GetSerializedSize ()
 シリアライズされたサイズです。
 
static void Serialize (void *pBuffer, const Type &value)
 シリアライズします。
 

説明

template<typename Type_>
class nn::pia::clone::SerializePolicy< Type_ >

クローンエレメントに設定する値のシリアライズ・デシリアライズの方法を定義します。

Template Parameters
Type_シリアライズ対象のデータ型です。

このクラスが実装されているのは、 Type が uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t, float, double のものだけです。 任意の型に対してこのクラスを使用するためには、その型に対応したシリアライズ関数とデシリアライズ関数を実装し、シリアライズ後のサイズを GetSerializedSize() の戻り値として定義する必要があります。

例えば、

struct StructValue
{
uint32_t v1;
float v2;
};

という型に対して、

template<>
void nn::pia::clone::SerializePolicy<StructValue>::Serialize(void* pBuffer, const Type& value)
{
uint8_t* offset = reinterpret_cast<uint8_t*>(pBuffer);
offset += 4;
}
template<>
void nn::pia::clone::SerializePolicy<StructValue>::Deserialize(Type* pValue, const void* cpData)
{
const uint8_t* offset = reinterpret_cast<const uint8_t*>(cpData);
offset += 4;
}
template<>
{
return 4 + 4;
}

と実装する必要があります。

異種プラットフォーム間マッチメイクによる異なるプラットフォーム間での通信を行う際には、パディングによる構造体のサイズ変動やエンディアンの不一致等が起こる可能性があります。 その場合に、Serialize / Deserialize / GetSerializedSize 関数で構造体のメモリコピーや sizeof() によるデータサイズ取得を行うように実装すると、正常に通信を行うことができません。 将来にわたって異種プラットフォーム間マッチメイクを行わない場合は、構造体のメモリコピーや sizeof() によるデータサイズ取得を行うように実装することも可能です。

関数

template<typename Type_ >
static void nn::pia::clone::SerializePolicy< Type_ >::Deserialize ( Type *  pValue,
const void *  cpData 
)
static

デシリアライズします。

引数
[out]pValueデシリアライズされたデータの保存先です。
[in]cpDataデシリアライズするバイト列です。
template<typename Type_ >
static uint32_t nn::pia::clone::SerializePolicy< Type_ >::GetSerializedSize ( )
static

シリアライズされたサイズです。

CloneProtocol::GetElementSizeMax() より大きな値は使用できません。

戻り値
シリアライズされたサイズです。
template<typename Type_ >
static void nn::pia::clone::SerializePolicy< Type_ >::Serialize ( void *  pBuffer,
const Type &  value 
)
static

シリアライズします。

引数
[out]pBuffer出力先バッファです。
[in]valueシリアライズ対象のデータです。