nl:: Weave:: TLV:: TLVWriter
#include <src/lib/core/WeaveTLV.h>
Weave の TLV 形式でデータを書き込むためのメモリ効率の高いエンコーダを提供します。
概要
TLVWriter は、Weave TLV データ用の転送専用のストリーム スタイルのエンコーダを実装しています。アプリケーションは、ライターの Put() メソッドの 1 つを呼び出して、エンコードにデータを書き込み、必要に応じて関連するタグと値の情報を渡します。同様に、アプリケーションで、ライターの OpenContainer() メソッドまたは EnterContainer() メソッドを呼び出すことで、TLV コンテナタイプ(構造、配列、パス)をエンコードできます。
TLVWriter オブジェクトは、固定出力バッファ、または 1 つ以上の PacketBuffer オブジェクトのチェーンに直接データを書き込むことができます。さらに、アプリは独自の GetNewBuffer
関数と FinalizeBuffer
関数を用意して、出力を任意の宛先(ソケットやイベントキューなど)に渡すことができます。
継承
直接的な既知のサブクラス: nl::Weave::TLV::CircularTLVWriter
保護された型 |
|
---|---|
@72{
|
enum |
パブリック タイプ |
|
---|---|
FinalizeBufferFunct)(TLVWriter &writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t bufLen)
|
WEAVE_ERROR( TLVWriter オブジェクトからの出力のファイナライズを実行するために使用する関数。 |
GetNewBufferFunct)(TLVWriter &writer, uintptr_t &bufHandle, uint8_t *&bufStart, uint32_t &bufLen)
|
WEAVE_ERROR( 新しい出力バッファ空間を TLVWriter に提供する関数。 |
パブリック属性 |
|
---|---|
AppData
|
void *
アプリケーション固有のデータに使用できるポインタ フィールド。
|
FinalizeBuffer
|
TLVWriter がファイナライズされたときに呼び出される関数へのポインタ。
|
GetNewBuffer
|
新しい出力バッファ空間を TLVWriter に提供する関数へのポインタ。
|
ImplicitProfileId
|
uint32_t
暗黙的な形式でエンコードする必要があるタグのプロファイル ID。
|
プロテクト属性 |
|
---|---|
mBufHandle
|
uintptr_t
|
mBufStart
|
uint8_t *
|
mContainerType
|
|
mLenWritten
|
uint32_t
|
mMaxLen
|
uint32_t
|
mRemainingLen
|
uint32_t
|
mWritePoint
|
uint8_t *
|
パブリック関数 |
|
---|---|
CloseContainer(TLVWriter & containerWriter)
|
OpenContainer() を呼び出した後に、TLV コンテナの書き込みを完了します。
|
ContinuePutBytes(const uint8_t *buf, uint32_t len)
|
TLV バイト文字列値をエンコードします。
|
CopyContainer(TLVReader & container)
|
|
CopyContainer(uint64_t tag, TLVReader & container)
|
事前にエンコードされたメンバー要素のセットの中から TLV コンテナ要素をエンコードします。
|
CopyContainer(uint64_t tag, const uint8_t *encodedContainer, uint16_t encodedContainerLen)
|
事前にエンコードされたコンテナのメンバー要素を格納する TLV コンテナ要素をエンコードします。
|
CopyElement(TLVReader & reader)
|
リーダー オブジェクトからライターに TLV 要素をコピーします。
|
CopyElement(uint64_t tag, TLVReader & reader)
|
|
EndContainer(TLVType outerContainerType)
|
TLV コンテナ要素のエンコードを完了します。
|
Finalize(void)
|
TLV エンコードの書き込みを終了します。
|
GetContainerType(void) const
|
TLVWriter が現在書き込みを行っているコンテナのタイプを返します。
|
GetLengthWritten(void)
|
uint32_t
ライターの初期化後に書き込まれた合計バイト数を返します。
|
Init(uint8_t *buf, uint32_t maxLen)
|
void
TLVWriter オブジェクトを初期化して、単一の出力バッファに書き込む。
|
Init(PacketBuffer *buf, uint32_t maxLen)
|
void
TLVWriter オブジェクトを初期化して、単一の PacketBuffer に書き込む。
|
Init(PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers)
|
void
1 つ以上の PacketBuffers に書き込むように TLVWriter オブジェクトを初期化します。
|
InitMalloced(uint8_t *& outBuf, uint32_t initialBufSize, uint32_t maxLen)
|
void
動的バッファに書き込むように TLVWriter オブジェクトを初期化します。
|
OpenContainer(uint64_t tag, TLVType containerType, TLVWriter & containerWriter)
|
|
Put(uint64_t tag, int8_t v)
|
TLV 符号付き整数値をエンコードします。
|
Put(uint64_t tag, int8_t v, bool preserveSize)
|
TLV 符号付き整数値をエンコードします。
|
Put(uint64_t tag, int16_t v)
|
|
Put(uint64_t tag, int16_t v, bool preserveSize)
|
|
Put(uint64_t tag, int32_t v)
|
|
Put(uint64_t tag, int32_t v, bool preserveSize)
|
|
Put(uint64_t tag, int64_t v)
|
|
Put(uint64_t tag, int64_t v, bool preserveSize)
|
|
Put(uint64_t tag, uint8_t v)
|
TLV 符号なし整数値をエンコードします。
|
Put(uint64_t tag, uint8_t v, bool preserveSize)
|
TLV 符号なし整数値をエンコードします。
|
Put(uint64_t tag, uint16_t v)
|
|
Put(uint64_t tag, uint16_t v, bool preserveSize)
|
|
Put(uint64_t tag, uint32_t v)
|
|
Put(uint64_t tag, uint32_t v, bool preserveSize)
|
|
Put(uint64_t tag, uint64_t v)
|
|
Put(uint64_t tag, uint64_t v, bool preserveSize)
|
|
Put(uint64_t tag, float v)
|
|
Put(uint64_t tag, double v)
|
TLV 浮動小数点値をエンコードします。
|
PutBoolean(uint64_t tag, bool v)
|
TLV ブール値をエンコードします。
|
PutBytes(uint64_t tag, const uint8_t *buf, uint32_t len)
|
TLV バイト文字列値をエンコードします。
|
PutNull(uint64_t tag)
|
TLV null 値をエンコードします。
|
PutPreEncodedContainer(uint64_t tag, TLVType containerType, const uint8_t *data, uint32_t dataLen)
|
事前にエンコードされたメンバー要素のセットの中から TLV コンテナ要素をエンコードします。
|
PutString(uint64_t tag, const char *buf)
|
TLV UTF8 文字列値をエンコードします。
|
PutString(uint64_t tag, const char *buf, uint32_t len)
|
TLV UTF8 文字列値をエンコードします。
|
PutStringF(uint64_t tag, const char *fmt, ...)
|
TLV 要素の形式に従ってフォーマットされた文字列出力をエンコードします。
|
StartContainer(uint64_t tag, TLVType containerType, TLVType & outerContainerType)
|
新しい TLV コンテナ要素のエンコードを開始します。
|
StartPutBytes(uint64_t tag, uint32_t totalLen)
|
TLV バイト文字列を複数のチャンクにエンコードします。
|
VPutStringF(uint64_t tag, const char *fmt, va_list ap)
|
TLV 要素の形式に従ってフォーマットされた文字列出力をエンコードします。
|
静的パブリック関数 |
|
---|---|
FinalizePacketBuffer(TLVWriter & writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t dataLen)
|
PacketBuffer のチェーンに書き込むための TLVWriter FinalizeBuffer 関数の実装。
|
GetNewBuffer_Malloced(TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen)
|
動的バッファに書き込むための TLVWriter GetNewBuffer 関数の実装。
|
GetNewPacketBuffer(TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen)
|
PacketBuffer のチェーンに書き込むための TLVWriter GetNewBuffer 関数の実装。
|
プロテクト関数 |
|
---|---|
IsCloseContainerReserved(void) const
|
bool
コンテナを開始または開く時点で、コンテナが CloseContainer シンボル用のスペースを予約する必要があるかどうかを決定します。
|
IsContainerOpen(void) const
|
bool
|
SetCloseContainerReserved(bool aCloseContainerReserved)
|
void
コンテナを開始または開く時点で、コンテナが CloseContainer シンボル用のスペースを予約するかどうかを設定します。
|
SetContainerOpen(bool aContainerOpen)
|
void
|
WriteData(const uint8_t *p, uint32_t len)
|
|
WriteElementHead(TLVElementType elemType, uint64_t tag, uint64_t lenOrVal)
|
|
WriteElementWithData(TLVType type, uint64_t tag, const uint8_t *data, uint32_t dataLen)
|
保護された型
@72
@72
パブリック タイプ
FinalizeBufferFunct
WEAVE_ERROR(* FinalizeBufferFunct)(TLVWriter &writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t bufLen)
TLVWriter オブジェクトからの出力のファイナライズを実行するために使用する関数。
このタイプの関数は、TLVWriter の Finalize() メソッドが呼び出されると呼び出されます。この関数は、ライター オブジェクトの出力の使用に関連する必要なクリーンアップまたはファイナライズを実行することが想定されています。たとえば、エンコードの最終的な長さの記録、ファイル記述子の終了などがこれに該当します。
詳細 | |||||||||
---|---|---|---|---|---|---|---|---|---|
パラメータ |
|
||||||||
戻り値 |
|
GetNewBufferFunct
WEAVE_ERROR(* GetNewBufferFunct)(TLVWriter &writer, uintptr_t &bufHandle, uint8_t *&bufStart, uint32_t &bufLen)
新しい出力バッファ空間を TLVWriter に提供する関数。
このタイプの関数は、TLVWriter の書き込み先の新しいバッファ スペースを準備するために使用されます。この関数は、呼び出されたときに、新しいデータを書き込む必要があるメモリ位置へのポインタと、関連する最大長を返すことが想定されています。この関数は、データを保持する新しいバッファを割り当てるか、以前に書き込まれたデータを既存のバッファから消去することで、書き込みスペースを提供できます。
詳細 | |||||||||
---|---|---|---|---|---|---|---|---|---|
パラメータ |
|
||||||||
戻り値 |
|
パブリック属性
AppData
void * AppData
アプリケーション固有のデータに使用できるポインタ フィールド。
FinalizeBuffer
FinalizeBufferFunct FinalizeBuffer
TLVWriter がファイナライズされたときに呼び出される関数へのポインタ。
TLVWriter オブジェクトは、Finalize() メソッドが呼び出されるたびに、FinalizeBuffer 関数を呼び出します。アプリケーションは、Finalize() を呼び出す前の任意の時点で関数ポインタを設定できます。デフォルトでは、ポインタは NULL に設定されます。これにより、Finalize() メソッドによる関数の呼び出しがなくなります。
FinalizeBuffer 関数の実装の詳細については、FinalizeBufferFunct 型の定義をご覧ください。
GetNewBuffer
GetNewBufferFunct GetNewBuffer
新しい出力バッファ空間を TLVWriter に提供する関数へのポインタ。
TLVWriter オブジェクトは、現在の出力バッファのサイズを超えるデータを書き込もうとするたびに、GetNewBuffer 関数を呼び出します。NULL(デフォルト値)に設定すると、出力データが現在のバッファをオーバーフローすると、ライターは WEAVE_ERROR_NO_MEMORY を返します。
GetNewBuffer は、アプリケーションによっていつでも設定できますが、通常はライターが初期化されたときに設定されます。
GetNewBufferFunct 関数の実装の詳細については、GetNewBufferFunct 型定義をご覧ください。
ImplicitProfileId
uint32_t ImplicitProfileId
暗黙的な形式でエンコードする必要があるタグのプロファイル ID。
ライターが新しい要素のエンコードを求められ、新しい要素に関連付けられたタグのプロファイル ID が ImplicitProfileId
メンバーの値と一致すると、ライターは暗黙的な形式でタグをエンコードし、プロセスでプロファイル ID は省略します。
デフォルトでは、ImplicitProfileId
プロパティは kProfileIdNotSpecified に設定されます。これは暗黙的にエンコードされたタグを出力しないようライターに指示します。アプリは ImplicitProfileId
をいつでも設定して、エンコードの現在の時点から暗黙的な形式でのエンコード タグを有効にできます。設定する適切なプロファイル ID は通常、話されているアプリケーションやプロトコルのコンテキストによって異なります。
プロテクト属性
mBufHandle
uintptr_t mBufHandle
mBufStart
uint8_t * mBufStart
mContainerType
TLVType mContainerType
mLenWritten
uint32_t mLenWritten
mMaxLen
uint32_t mMaxLen
mRemainingLen
uint32_t mRemainingLen
mWritePoint
uint8_t * mWritePoint
パブリック関数
CloseContainer
WEAVE_ERROR CloseContainer( TLVWriter & containerWriter )
OpenContainer() を呼び出した後に、TLV コンテナの書き込みを完了します。
CloseContainer() メソッドは、OpenContainer() 呼び出しの後、親 TLVWriter オブジェクトの状態を復元します。OpenContainer() アプリケーションを呼び出すたびに、対応する CloseContainer() 呼び出しを行って、両方のメソッドに同じコンテナ ライターへの参照を渡す必要があります。
CloseContainer() が返された場合、アプリケーションは親ライターを引き続き使用して、コンテナ要素の後に表示される追加の TLV 要素を書き込むことができます。この時点で、提供されたコンテナ ライターは「初期化解除済み」と見なされ、再初期化なしで使用することはできません。
詳細 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
パラメータ |
|
||||||||||||
戻り値 |
|
ContinuePutBytes
WEAVE_ERROR ContinuePutBytes( const uint8_t *buf, uint32_t len )
TLV バイト文字列値をエンコードします。
StartPutBytes で使用する必要があります。
詳細 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
パラメータ |
|
||||||||||||
戻り値 |
|
CopyContainer
WEAVE_ERROR CopyContainer( TLVReader & container )
TLVReader オブジェクトから TLV コンテナ要素をコピーします。
CopyContainer() は、TLVReader オブジェクトの現在の位置にある事前にエンコードされたコンテナ要素をコピーすることにより、新しい TLV コンテナ要素をエンコードします。このメソッドは、新しいコンテナ要素全体を 1 回の呼び出しで書き込み、コンテナのタイプ、タグ、要素をソース エンコードからコピーします。メソッドが戻ると、ライター オブジェクトを使用してコンテナ要素の後に追加の TLV 要素を書き込めます。
詳細 | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
パラメータ |
|
||||||||||||||||||
戻り値 |
|
CopyContainer
WEAVE_ERROR CopyContainer( uint64_t tag, TLVReader & container )
事前にエンコードされたメンバー要素のセットの中から TLV コンテナ要素をエンコードします。
CopyContainer() メソッドは、TLVReader オブジェクトから取得したメンバー要素のセットを含む新しい TLV コンテナ要素(構造体、配列、またはパス)をエンコードします。このメソッドが呼び出されると、指定されたリーダー オブジェクトは TLV コンテナ要素に配置されることが想定されます。新しくエンコードされたコンテナの型とメンバーは入力コンテナと同じになります。新しいコンテナのタグが入力パラメータとして指定されています。
メソッドが戻ると、ライター オブジェクトを使用してコンテナ要素の後に追加の TLV 要素を書き込めます。
詳細 | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
パラメータ |
|
||||||||||||||||||
戻り値 |
|
CopyContainer
WEAVE_ERROR CopyContainer( uint64_t tag, const uint8_t *encodedContainer, uint16_t encodedContainerLen )
事前にエンコードされたコンテナのメンバー要素を格納する TLV コンテナ要素をエンコードします。
CopyContainer() メソッドは、事前にエンコードされたコンテナの内容から取得されたメンバー要素のセットを含む、新しい TLV コンテナ要素(構造体、配列、またはパス)をエンコードします。メソッドが呼び出されると、提供された入力バッファ内のデータが TLV コンテナ要素として解析され、入力コンテナと同じ型とメンバーを持つ新しいコンテナが書き込まれます。新しいコンテナのタグが入力パラメータとして指定されています。
メソッドが戻ると、ライター オブジェクトを使用してコンテナ要素の後に追加の TLV 要素を書き込めます。
詳細 | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
パラメータ |
|
||||||||||||||||
戻り値 |
|
CopyElement
WEAVE_ERROR CopyElement( TLVReader & reader )
リーダー オブジェクトからライターに TLV 要素をコピーします。
CopyElement() メソッドは、新しい TLV 要素をエンコードします。その型、タグ、値は TLVReader オブジェクトから取得されます。このメソッドが呼び出されたとき、提供されたリーダー オブジェクトはソースの TLV 要素に配置されることが想定されます。新しくエンコードされた要素は、入力コンテナと同じ型、タグ、コンテンツを持ちます。指定された要素が TLV コンテナ(構造、配列、またはパス)である場合、コンテナのコンテンツ全体がコピーされます。
詳細 | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
パラメータ |
|
||||||||||||||||||
戻り値 |
|
CopyElement
WEAVE_ERROR CopyElement( uint64_t tag, TLVReader & reader )
EndContainer
WEAVE_ERROR EndContainer( TLVType outerContainerType )
TLV コンテナ要素のエンコードを完了します。
EndContainer() メソッドは、TLV コンテナ要素のエンコードを完了し、以前の StartContainer() の呼び出しの後で TLVWrite オブジェクトの状態を復元します。StartContainer() アプリケーションを呼び出すたびに、対応する EndContainer() を呼び出して、StartContainer() 呼び出しで返された TLVType 値を渡す必要があります。EndContainer() が返されたら、ライター オブジェクトを使用して、コンテナ要素の後に続く追加の TLV 要素を書き込めます。
詳細 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
パラメータ |
|
||||||||||||
戻り値 |
|
ファイナライズ
WEAVE_ERROR Finalize( void )
TLV エンコードの書き込みを終了します。
Finalize() メソッドは、基盤となる出力バッファに TLV エンコードを書き込むプロセスを完了します。このメソッドは、バッファの内容を使用する前に、アプリケーションから呼び出す必要があります。Finalize() は、現在のライターでコンテナ ライターを開いていない場合にのみ呼び出すことができます。(OpenContainer()
を参照)。
詳細 | |||||||
---|---|---|---|---|---|---|---|
戻り値 |
|
GetContainerType
TLVType GetContainerType( void ) const
GetLengthWritten
uint32_t GetLengthWritten( void )
ライターの初期化後に書き込まれた合計バイト数を返します。
詳細 | |
---|---|
戻り値 |
ライターの初期化後に書き込まれた合計バイト数。
|
init
void Init( uint8_t *buf, uint32_t maxLen )
init
void Init( PacketBuffer *buf, uint32_t maxLen )
init
void Init( PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers )
1 つ以上の PacketBuffers に書き込むように TLVWriter オブジェクトを初期化します。
指定したバッファ内の既存データの最後のバイトの直後に、書き込みが開始されます。allowDiscontiguousBuffers
が true の場合、書き込まれたデータ量に対応するために、必要に応じて追加の PacketBuffer が割り当てられ、指定されたバッファにチェーンされます。指定した出力バッファがすでにバッファのチェーンの先頭である場合、新しいバッファが割り当てられる前に、チェーン内の後続のバッファに出力が書き込まれます。
詳細 | |||||||
---|---|---|---|---|---|---|---|
パラメータ |
|
InitMalloced
void InitMalloced( uint8_t *& outBuf, uint32_t initialBufSize, uint32_t maxLen )
動的バッファに書き込むように TLVWriter オブジェクトを初期化します。
詳細 | |||||||
---|---|---|---|---|---|---|---|
パラメータ |
|
OpenContainer
WEAVE_ERROR OpenContainer( uint64_t tag, TLVType containerType, TLVWriter & containerWriter )
TLV コンテナ要素のメンバーを書き込むために、新しい TLVWriter オブジェクトを初期化します。
OpenContainer() メソッドは、TLV コンテナ要素(構造、配列、パス)をエンコードに書き込むために使用されます。このメソッドは、新しいコンテナのタイプとタグ(存在する場合)と、コンテナの要素を書き込むために初期化される新しいライター オブジェクト(コンテナ ライター)への参照を受け取ります。アプリケーションはコンテナ ライターを使用して新しいコンテナのメンバーを書き込み、次に CloseContainer() を呼び出してコンテナのエンコードを完了します。
コンテナ ライターが開いている間、アプリケーションは親ライターの状態を呼び出したり、それを変更したりしてはなりません。
コンテナ ライターは、親ライターからさまざまな構成プロパティを継承します。わかっています。
- 暗黙的なプロファイル ID(ImplicitProfileId)
- アプリケーション データポインタ(AppData)
- GetNewBuffer 関数と FinalizeBuffer 関数ポインタ
詳細 | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
パラメータ |
|
||||||||||||||
戻り値 |
|
データに
WEAVE_ERROR Put( uint64_t tag, int8_t v )
TLV 符号付き整数値をエンコードします。
これは、利便性のために提供されているオーバーロードのメンバー関数です。上記の関数と異なるのは、受け入れる引数だけです。
詳細 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
パラメータ |
|
||||||||||||
戻り値 |
|
データに
WEAVE_ERROR Put( uint64_t tag, int8_t v, bool preserveSize )
TLV 符号付き整数値をエンコードします。
これは、利便性のために提供されているオーバーロードのメンバー関数です。上記の関数と異なるのは、受け入れる引数だけです。
詳細 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
パラメータ |
|
||||||||||||
戻り値 |
|
データに
WEAVE_ERROR Put( uint64_t tag, int16_t v )
データに
WEAVE_ERROR Put( uint64_t tag, int16_t v, bool preserveSize )
データに
WEAVE_ERROR Put( uint64_t tag, int32_t v )
データに
WEAVE_ERROR Put( uint64_t tag, int32_t v, bool preserveSize )
データに
WEAVE_ERROR Put( uint64_t tag, int64_t v )
データに
WEAVE_ERROR Put( uint64_t tag, int64_t v, bool preserveSize )
データに
WEAVE_ERROR Put( uint64_t tag, uint8_t v )
TLV 符号なし整数値をエンコードします。
これは、利便性のために提供されているオーバーロードのメンバー関数です。上記の関数と異なるのは、受け入れる引数だけです。
詳細 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
パラメータ |
|
||||||||||||
戻り値 |
|
データに
WEAVE_ERROR Put( uint64_t tag, uint8_t v, bool preserveSize )
TLV 符号なし整数値をエンコードします。
これは、利便性のために提供されているオーバーロードのメンバー関数です。上記の関数と異なるのは、受け入れる引数だけです。
詳細 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
パラメータ |
|
||||||||||||
戻り値 |
|
データに
WEAVE_ERROR Put( uint64_t tag, uint16_t v )
データに
WEAVE_ERROR Put( uint64_t tag, uint16_t v, bool preserveSize )
データに
WEAVE_ERROR Put( uint64_t tag, uint32_t v )
データに
WEAVE_ERROR Put( uint64_t tag, uint32_t v, bool preserveSize )
データに
WEAVE_ERROR Put( uint64_t tag, uint64_t v )
データに
WEAVE_ERROR Put( uint64_t tag, uint64_t v, bool preserveSize )
データに
WEAVE_ERROR Put( uint64_t tag, float v )
データに
WEAVE_ERROR Put( uint64_t tag, double v )
TLV 浮動小数点値をエンコードします。
これは、利便性のために提供されているオーバーロードのメンバー関数です。上記の関数と異なるのは、受け入れる引数だけです。
詳細 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
パラメータ |
|
||||||||||||
戻り値 |
|
PutBoolean
WEAVE_ERROR PutBoolean( uint64_t tag, bool v )
TLV ブール値をエンコードします。
詳細 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
パラメータ |
|
||||||||||||
戻り値 |
|
PutBytes
WEAVE_ERROR PutBytes( uint64_t tag, const uint8_t *buf, uint32_t len )
TLV バイト文字列値をエンコードします。
詳細 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
パラメータ |
|
||||||||||||
戻り値 |
|
PutNull
WEAVE_ERROR PutNull( uint64_t tag )
TLV null 値をエンコードします。
詳細 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
パラメータ |
|
||||||||||||
戻り値 |
|
PutPreEncodedContainer
WEAVE_ERROR PutPreEncodedContainer( uint64_t tag, TLVType containerType, const uint8_t *data, uint32_t dataLen )
事前にエンコードされたメンバー要素のセットの中から TLV コンテナ要素をエンコードします。
PutPreEncodedContainer() メソッドは、事前にエンコードされたバッファから取得したメンバー要素のセットを含む新しい TLV コンテナ要素(構造体、配列、またはパス)をエンコードします。入力バッファには、フルエンコードされた TLV 要素が 0 個以上、指定されたコンテナタイプに関連付けられたルールに適合するタグが含まれることが想定されます(たとえば、構造のメンバーにはタグが必要ですが、配列のメンバーにはできません)。
このメソッドは、1 回の呼び出しでコンテナ要素全体をエンコードします。PutPreEncodedContainer() が返されたら、ライター オブジェクトを使用して、コンテナ要素の後に追加の TLV 要素を書き込めます。
詳細 | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
パラメータ |
|
||||||||||||||
戻り値 |
|
PutString
WEAVE_ERROR PutString( uint64_t tag, const char *buf )
TLV UTF8 文字列値をエンコードします。
詳細 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
パラメータ |
|
||||||||||||
戻り値 |
|
PutString
WEAVE_ERROR PutString( uint64_t tag, const char *buf, uint32_t len )
TLV UTF8 文字列値をエンコードします。
詳細 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
パラメータ |
|
||||||||||||
戻り値 |
|
PutStringF
WEAVE_ERROR PutStringF( uint64_t tag, const char *fmt, ... )
TLV 要素の形式に従ってフォーマットされた文字列出力をエンコードします。
PutStringF は sprintf に似ており、出力は文字バッファではなく TLV 要素に格納されます。拡張 printf 機能が利用可能な場合、この関数は結果文字列を基となる不連続ストレージに出力できます。実装では、次の printf 拡張機能がサポートされています。
プラットフォームには、putchar の代わりにカスタム コールバックを呼び出す機能を提供するコールバック ベースの vcbprintf
が用意されています。
プラットフォームには vsnprintf_ex
という vsnprintf
のバリアントが用意されています。これは vsnprintf とまったく同じように動作しますが、出力の最初の n
文字を省略する条件があります。
コールバック ベースの関数は最もシンプルでコードの使用量が最も少ない関数ですが、vsprintf_ex
のような関数はスタックの消費量が少ないことに注意してください。
上のどちらも利用できないが、プラットフォームが malloc
を提供している場合、この関数は出力を保持するための一時バッファを割り当てます。プラットフォームから printf ファミリーも malloc にも拡張機能が提供されない場合、現在の TLV ストレージの連続状態に収まるように出力が切り捨てられます
詳細 | |||||||
---|---|---|---|---|---|---|---|
パラメータ |
|
||||||
戻り値 |
|
StartContainer
WEAVE_ERROR StartContainer( uint64_t tag, TLVType containerType, TLVType & outerContainerType )
新しい TLV コンテナ要素のエンコードを開始します。
StartContainer() メソッドは、TLV コンテナ要素(構造、配列、またはパス)をエンコードに書き込むために使用されます。このメソッドは、新しいコンテナのタイプとタグ(存在する場合)と、TLVType 値への参照を受け取ります。TLVType 値は、コンテナの書き込みに使用されているライターの現在のコンテキストを保存するために使用されます。
StartContainer() メソッドが戻ると、アプリケーションは現在の TLVWriter オブジェクトを使用してコンテナの要素を書き込む必要があります。その後、アプリケーションは EndContainer() メソッドを呼び出してコンテナのエンコードを完了する必要があります。
詳細 | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
パラメータ |
|
||||||||||||||
戻り値 |
|
StartPutBytes
WEAVE_ERROR StartPutBytes( uint64_t tag, uint32_t totalLen )
TLV バイト文字列を複数のチャンクにエンコードします。
これは、ContinuePutBytes とともに使用する必要があります。
詳細 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
パラメータ |
|
||||||||||||
戻り値 |
|
VPutStringF
WEAVE_ERROR VPutStringF( uint64_t tag, const char *fmt, va_list ap )
TLV 要素の形式に従ってフォーマットされた文字列出力をエンコードします。
PutStringF は sprintf に似ており、出力は文字バッファではなく TLV 要素に格納されます。拡張 printf 機能が利用可能な場合、この関数は結果文字列を基となる不連続ストレージに出力できます。実装では、次の printf 拡張機能がサポートされています。
プラットフォームには、putchar の代わりにカスタム コールバックを呼び出す機能を提供するコールバック ベースの vcbprintf
が用意されています。
プラットフォームには vsnprintf_ex
という vsnprintf
のバリアントが用意されています。これは vsnprintf とまったく同じように動作しますが、出力の最初の n
文字を省略する条件があります。
コールバック ベースの関数は最もシンプルでコードの使用量が最も少ない関数ですが、vsprintf_ex
のような関数はスタックの消費量が少ないことに注意してください。
上のどちらも利用できないが、プラットフォームが malloc
を提供している場合、この関数は出力を保持するための一時バッファを割り当てます。プラットフォームから printf ファミリーも malloc にも拡張機能が提供されない場合、現在の TLV ストレージの連続状態に収まるように出力が切り捨てられます
詳細 | |||||||
---|---|---|---|---|---|---|---|
パラメータ |
|
||||||
戻り値 |
|
静的パブリック関数
FinalizePacketBuffer
WEAVE_ERROR FinalizePacketBuffer( TLVWriter & writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t dataLen )
PacketBuffer のチェーンに書き込むための TLVWriter FinalizeBuffer 関数の実装。
FinalizePacketBuffer() 関数は、TLVWriter を使用して PacketBuffer のチェーンに書き込む際に必要なファイナライズを実行します。この関数は、GetNewPacketBuffer() 関数と組み合わせて使用するように設計されています。
FinalizePacketBuffer() 関数の API の詳細については、FinalizeBufferFunct タイプの定義をご覧ください。
GetNewBuffer_Malloced
WEAVE_ERROR GetNewBuffer_Malloced( TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen )
動的バッファに書き込むための TLVWriter GetNewBuffer 関数の実装。
GetNewBuffer_Malloced() 関数は、エンコードを保存するために必要に応じて基となる動的バッファのサイズを 2 倍にすることで、TLVWriter に新しい出力空間を提供します。この関数は、TLVWriter GetNewBuffer 関数ポインタに割り当てられるように設計されています。
GetNewBuffer_Malloced() 関数の API の詳細については、GetNewBufferFunct 型の定義をご覧ください。
GetNewPacketBuffer
WEAVE_ERROR GetNewPacketBuffer( TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen )
PacketBuffer のチェーンに書き込むための TLVWriter GetNewBuffer 関数の実装。
GetNewPacketBuffer() 関数は、エンコードを保存するために必要に応じて 1 つ以上の PacketBuffers のチェーンを割り当てることで、TLVWriter に新しい出力空間を提供します。この関数は、TLVWriter GetNewBuffer 関数ポインタに割り当てられるように設計されています。
TLVWriter で GetNewPacketBuffer を使用する場合、対応する FinalizePacketBuffer() 関数(または同等の関数)もバッファ チェーンのファイナライズに使用する必要があります。
GetNewPacketBuffer() 関数の API の詳細については、GetNewBufferFunct 型の定義をご覧ください。
プロテクト関数
IsCloseContainerReserved
bool IsCloseContainerReserved( void ) const
コンテナを開始または開く時点で、コンテナが CloseContainer シンボル用のスペースを予約する必要があるかどうかを決定します。
IsContainerOpen
bool IsContainerOpen( void ) const
SetCloseContainerReserved
void SetCloseContainerReserved( bool aCloseContainerReserved )
コンテナを開始または開く時点で、コンテナが CloseContainer シンボル用のスペースを予約するかどうかを設定します。
SetContainerOpen
void SetContainerOpen( bool aContainerOpen )
WriteData
WEAVE_ERROR WriteData( const uint8_t *p, uint32_t len )
WriteElementHead
WEAVE_ERROR WriteElementHead( TLVElementType elemType, uint64_t tag, uint64_t lenOrVal )
WriteElementWithData
WEAVE_ERROR WriteElementWithData( TLVType type, uint64_t tag, const uint8_t *data, uint32_t dataLen )