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{
  kEndOfContainerMarkerSize = 1
}
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)
TLVReader オブジェクトから TLV コンテナ要素をコピーします。
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
TLVWriter オブジェクトを初期化して、1 つ以上の PacketBuffers に書き込みます。
InitMalloced(uint8_t *& outBuf, uint32_t initialBufSize, uint32_t maxLen)
void
動的バッファに書き込む TLVWriter オブジェクトを初期化します。
OpenContainer(uint64_t tag, TLVType containerType, TLVWriter & containerWriter)
TLV コンテナ要素のメンバーを書き込むための新しい TLVWriter オブジェクトを初期化します。
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 オブジェクトからの出力のファイナライズを実行するために使用される関数。

このタイプの関数は、TLVWriterFinalize() メソッドが呼び出されると呼び出されます。この関数は、ライター オブジェクトの出力の使用に関連して、必要なクリーンアップまたはファイナライズを実行することが想定されています。例としては、エンコードの最終的な長さの記録や、ファイル記述子のクローズなどが挙げられます。

詳細
パラメータ
[in] writer
ファイナライズされる TLVWriter オブジェクトへの参照。
[in,out] bufHandle
以前の GetNewBuffer 関数の呼び出しによって設定された uintptr_t コンテキスト値。
[in,out] bufStart
現在の(最後の)出力バッファの先頭へのポインタ。
[in,out] bufLen
bufStart が指すバッファに含まれるバイト数。
戻り値
WEAVE_NO_ERROR
ファイナライズが成功した場合。
other
ファイナライズ中にエラーが発生したことを示す、その他の Weave またはプラットフォーム固有のエラーコード。

GetNewBufferFunct

WEAVE_ERROR(* GetNewBufferFunct)(TLVWriter &writer, uintptr_t &bufHandle, uint8_t *&bufStart, uint32_t &bufLen)

新しい出力バッファ空間を TLVWriter に供給する関数。

この型の関数は、TLVWriter の書き込み先となる新しいバッファ領域を準備するために使用されます。この関数を呼び出すと、新しいデータを書き込むメモリ位置へのポインタと、関連する最大長を返すことが期待されます。この関数は、データを保持する新しいバッファを割り当てるか、以前に書き込まれたデータを既存のバッファから消去することで、書き込みスペースを供給できます。

詳細
パラメータ
[in] writer
新しいバッファ スペースをリクエストしている TLVWriter オブジェクトへの参照。
[in,out] bufHandle
関数が呼び出し間でコンテキスト データを保存するために使用できる uintptr_t 値への参照。この値は、最初の呼び出しの前に 0 に初期化されます。
[in,out] bufStart
データポインタへの参照。関数に入ると、bufStart が現在の出力バッファの先頭を指定します。終了時に、bufStart は新しい出力バッファの先頭をポイントすると想定されます。新しいポインタ値は、前の値と同じにすることも(関数が既存のデータを別の場所にコピーした場合など)、まったく新しい場所を指すこともできます。
[in,out] bufLen
符号なし整数への参照。関数に入ると、bufLen には現在のバッファ内の未使用領域のバイト数が格納されます。終了時に、bufLen には新しい出力バッファに書き込むことができる最大バイト数が含まれていると想定されます。
戻り値
WEAVE_NO_ERROR
関数がライター用に追加のバッファ スペースを提供できたかどうか。
other
関数が追加のバッファ領域を生成できないエラーが発生したことを示す、その他の Weave またはプラットフォーム固有のエラーコード。

パブリック属性

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 はアプリケーションによっていつでも設定できますが、通常はライターの初期化時に設定されます。

GetNewBuffer 関数の実装に関する追加情報については、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 要素を書き込むことができます。この時点で、提供されたコンテナ ライターは「初期化解除済み」とみなされます。再初期化せずに使用することはできません。

詳細
パラメータ
[in] containerWriter
OpenContainer() メソッドに指定された TLVWriter オブジェクトへの参照。
戻り値
WEAVE_NO_ERROR
メソッドが成功した場合。
WEAVE_ERROR_INCORRECT_STATE
指定されたコンテナ ライターが正しい状態でない場合。
WEAVE_ERROR_TLV_CONTAINER_OPEN
指定されたコンテナ ライターで別のコンテナ ライターが開かれていて、まだ閉じていない場合。
WEAVE_ERROR_BUFFER_TOO_SMALL
コンテナのエンコードの完了が、ライターの初期化時に指定された最大バイト数の上限を超える場合。
WEAVE_ERROR_NO_MEMORY
メモリ不足が原因で出力バッファの割り当てに失敗した場合。
other
構成された GetNewBuffer() 関数または FinalizeBuffer() 関数から返されるその他の Weave またはプラットフォーム固有のエラー。

ContinuePutBytes

WEAVE_ERROR ContinuePutBytes(
  const uint8_t *buf,
  uint32_t len
)

TLV バイト文字列値をエンコードします。

これは StartPutBytes とともに使用する必要があります。

詳細
パラメータ
[in] buf
エンコードするバイト文字列を含むバッファへのポインタ。
[in] len
エンコードするバイト数。
戻り値
WEAVE_NO_ERROR
メソッドが成功した場合。
WEAVE_ERROR_TLV_CONTAINER_OPEN
コンテナ ライターが現在の書き込みで開かれていて、まだ閉じていない場合。
WEAVE_ERROR_INVALID_TLV_TAG
指定されたタグ値が、値が書き込まれているコンテキストで無効または不適切である場合。
WEAVE_ERROR_BUFFER_TOO_SMALL
値の書き込みが、書き込みの初期化時に指定された最大バイト数の上限を超える場合。
WEAVE_ERROR_NO_MEMORY
メモリ不足が原因で出力バッファの割り当てに失敗した場合。
other
構成された GetNewBuffer() 関数または FinalizeBuffer() 関数から返されるその他の Weave またはプラットフォーム固有のエラー。

CopyContainer

WEAVE_ERROR CopyContainer(
  TLVReader & container
)

TLVReader オブジェクトから TLV コンテナ要素をコピーします。

CopyContainer() は、TLVReader オブジェクトの現在の位置にある事前にエンコードされたコンテナ要素をコピーすることにより、新しい TLV コンテナ要素をエンコードします。このメソッドは、1 回の呼び出しで新しいコンテナ要素全体を書き込み、コンテナのタイプ、タグ、要素をソース エンコードからコピーします。メソッドが戻ると、ライター オブジェクトを使用して、コンテナ要素の後に追加の TLV 要素を書き込むことができます。

詳細
パラメータ
[in] container
コピーする事前エンコードされた TLV コンテナを識別する TLVReader オブジェクトへの参照。
戻り値
WEAVE_NO_ERROR
メソッドが成功した場合。
WEAVE_ERROR_INCORRECT_STATE
指定されたリーダーがコンテナ要素上にない場合。
WEAVE_ERROR_TLV_CONTAINER_OPEN
コンテナ ライターが現在の書き込みで開かれていて、まだ閉じていない場合。
WEAVE_ERROR_TLV_UNDERRUN
提供されたリーダーに関連付けられている基となる TLV エンコードが途中で終了した場合。
WEAVE_ERROR_INVALID_TLV_ELEMENT
指定されたリーダーで、無効またはサポートされていない TLV 要素タイプが検出された場合。
WEAVE_ERROR_INVALID_TLV_TAG
指定されたリーダーが無効なコンテキストで TLV タグを検出した場合、またはソースコンテナに関連付けられたタグが無効であるか、新しいコンテナが書き込まれているコンテキストで不適切である場合。
WEAVE_ERROR_BUFFER_TOO_SMALL
値の書き込みが、書き込みの初期化時に指定された最大バイト数の上限を超える場合。
WEAVE_ERROR_NO_MEMORY
メモリ不足が原因で出力バッファの割り当てに失敗した場合。
other
構成された GetNewBuffer() 関数または FinalizeBuffer() 関数、またはリーダー オブジェクトに関連付けられた GetNextBuffer() 関数から返される、その他の Weave またはプラットフォーム固有のエラー。

CopyContainer

WEAVE_ERROR CopyContainer(
  uint64_t tag,
  TLVReader & container
)

事前にエンコードされたメンバー要素のセットから TLV コンテナ要素をエンコードします。

CopyContainer() メソッドは、TLVReader オブジェクトから取得した一連のメンバー要素を含む新しい TLV コンテナ要素(構造、配列、パス)をエンコードします。このメソッドが呼び出されると、指定されたリーダー オブジェクトが TLV コンテナ要素上に配置されることが期待されます。新たにエンコードされたコンテナの型とメンバーは、入力コンテナと同じになります。新しいコンテナのタグが入力パラメータとして指定されます。

メソッドが戻ると、ライター オブジェクトを使用して、コンテナ要素の後に追加の TLV 要素を書き込むことができます。

詳細
パラメータ
[in] tag
コンテナでエンコードする TLV タグ。コンテナをタグなしでエンコードする必要がある場合は AnonymousTag。タグ値は、タグ定義関数の ProfileTag()ContextTag()CommonTag() のいずれかを使用して作成する必要があります。
[in] container
型とメンバーをコピーする必要がある、事前にエンコードされた TLV コンテナを識別する TLVReader オブジェクトへの参照。
戻り値
WEAVE_NO_ERROR
メソッドが成功した場合。
WEAVE_ERROR_INCORRECT_STATE
指定されたリーダーがコンテナ要素上にない場合。
WEAVE_ERROR_TLV_CONTAINER_OPEN
コンテナ ライターが現在の書き込みで開かれていて、まだ閉じていない場合。
WEAVE_ERROR_TLV_UNDERRUN
提供されたリーダーに関連付けられている基となる TLV エンコードが途中で終了した場合。
WEAVE_ERROR_INVALID_TLV_ELEMENT
指定されたリーダーで、無効またはサポートされていない TLV 要素タイプが検出された場合。
WEAVE_ERROR_INVALID_TLV_TAG
指定されたリーダーが無効なコンテキストで TLV タグを検出した場合、または指定されたタグが無効であるか、新しいコンテナが書き込まれているコンテキストで不適切である場合。
WEAVE_ERROR_BUFFER_TOO_SMALL
値の書き込みが、書き込みの初期化時に指定された最大バイト数の上限を超える場合。
WEAVE_ERROR_NO_MEMORY
メモリ不足が原因で出力バッファの割り当てに失敗した場合。
other
構成された GetNewBuffer() 関数または FinalizeBuffer() 関数、またはリーダー オブジェクトに関連付けられた GetNextBuffer() 関数から返される、その他の Weave またはプラットフォーム固有のエラー。

CopyContainer

WEAVE_ERROR CopyContainer(
  uint64_t tag,
  const uint8_t *encodedContainer,
  uint16_t encodedContainerLen
)

事前にエンコードされたコンテナのメンバー要素を含む TLV コンテナ要素をエンコードします。

CopyContainer() メソッドは、提供された事前エンコード コンテナの内容から取得したメンバー要素のセットを含む新しい TLV コンテナ要素(構造、配列、パス)をエンコードします。このメソッドが呼び出されると、指定された入力バッファ内のデータが TLV コンテナ要素として解析され、入力コンテナと同じ型とメンバーを持つ新しいコンテナが書き込まれます。新しいコンテナのタグが入力パラメータとして指定されます。

メソッドが戻ると、ライター オブジェクトを使用して、コンテナ要素の後に追加の TLV 要素を書き込むことができます。

詳細
パラメータ
[in] tag
コンテナでエンコードする TLV タグ。コンテナをタグなしでエンコードする必要がある場合は AnonymousTag。タグ値は、タグ定義関数の ProfileTag()ContextTag()CommonTag() のいずれかを使用して作成する必要があります。
[in] encodedContainer
型とメンバーをコピーする必要がある、事前にエンコードされた TLV コンテナを含むバッファ。
[in] encodedContainerLen
事前にエンコードされたコンテナの長さ(バイト単位)。
戻り値
WEAVE_NO_ERROR
メソッドが成功した場合。
WEAVE_ERROR_TLV_CONTAINER_OPEN
コンテナ ライターが現在の書き込みで開かれていて、まだ閉じていない場合。
WEAVE_ERROR_TLV_UNDERRUN
エンコードされたコンテナが途中で終了した場合。
WEAVE_ERROR_INVALID_TLV_ELEMENT
エンコードされたコンテナに、無効またはサポートされていない TLV 要素タイプが含まれていたかどうか。
WEAVE_ERROR_INVALID_TLV_TAG
エンコードされたコンテナに無効なコンテキストで TLV タグが含まれていた場合、または提供されたタグが無効であるか、新しいコンテナが書き込まれるコンテキストで不適切である場合。
WEAVE_ERROR_BUFFER_TOO_SMALL
値の書き込みが、書き込みの初期化時に指定された最大バイト数の上限を超える場合。
WEAVE_ERROR_NO_MEMORY
メモリ不足が原因で出力バッファの割り当てに失敗した場合。
other
構成された GetNewBuffer() 関数または FinalizeBuffer() 関数、またはリーダー オブジェクトに関連付けられた GetNextBuffer() 関数から返される、その他の Weave またはプラットフォーム固有のエラー。

CopyElement

WEAVE_ERROR CopyElement(
  TLVReader & reader
)

リーダー オブジェクトからライターに TLV 要素をコピーします。

CopyElement() メソッドは、型、タグ、値が TLVReader オブジェクトから取得された新しい TLV 要素をエンコードします。このメソッドが呼び出されると、指定されたリーダー オブジェクトがソースの TLV 要素上に配置されることが期待されます。新たにエンコードされた要素の型、タグ、コンテンツは、入力コンテナと同じになります。指定された要素が TLV コンテナ(構造、配列、パス)の場合、コンテナのコンテンツ全体がコピーされます。

詳細
パラメータ
[in] reader
コピーされる事前エンコードされた TLV 要素を識別する TLVReader オブジェクトへの参照。
戻り値
WEAVE_NO_ERROR
メソッドが成功した場合。
WEAVE_ERROR_INCORRECT_STATE
指定されたリーダーが要素上に配置されていない場合。
WEAVE_ERROR_TLV_CONTAINER_OPEN
コンテナ ライターが現在の書き込みで開かれていて、まだ閉じていない場合。
WEAVE_ERROR_TLV_UNDERRUN
提供されたリーダーに関連付けられている基となる TLV エンコードが途中で終了した場合。
WEAVE_ERROR_INVALID_TLV_ELEMENT
指定されたリーダーで、無効またはサポートされていない TLV 要素タイプが検出された場合。
WEAVE_ERROR_INVALID_TLV_TAG
指定されたリーダーが無効なコンテキストで TLV タグを検出した場合、または指定されたタグが無効であるか、新しいコンテナが書き込まれているコンテキストで不適切である場合。
WEAVE_ERROR_BUFFER_TOO_SMALL
値の書き込みが、書き込みの初期化時に指定された最大バイト数の上限を超える場合。
WEAVE_ERROR_NO_MEMORY
メモリ不足が原因で出力バッファの割り当てに失敗した場合。
other
構成された GetNewBuffer() 関数または FinalizeBuffer() 関数、またはリーダー オブジェクトに関連付けられた GetNextBuffer() 関数から返される、その他の Weave またはプラットフォーム固有のエラー。

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 要素を書き込むことができます。

詳細
パラメータ
[in] outerContainerType
StartContainer() メソッドによって返された TLVType 値。
戻り値
WEAVE_NO_ERROR
メソッドが成功した場合。
WEAVE_ERROR_INCORRECT_STATE
対応する StartContainer() 呼び出しが行われていない場合。
WEAVE_ERROR_TLV_CONTAINER_OPEN
コンテナ ライターが現在の書き込みで開かれていて、まだ閉じていない場合。
WEAVE_ERROR_BUFFER_TOO_SMALL
値の書き込みが、書き込みの初期化時に指定された最大バイト数の上限を超える場合。
WEAVE_ERROR_NO_MEMORY
メモリ不足が原因で出力バッファの割り当てに失敗した場合。
other
構成された GetNewBuffer() 関数または FinalizeBuffer() 関数から返されるその他の Weave またはプラットフォーム固有のエラー。

完了

WEAVE_ERROR Finalize(
  void
)

TLV エンコードの書き込みを終了します。

Finalize() メソッドは、基盤となる出力バッファへの TLV エンコードの書き込みプロセスを完了します。このメソッドは、バッファの内容を使用する前にアプリケーションによって呼び出される必要があります。Finalize() は、現在のライターに対して開かれているコンテナ ライターがない場合にのみ呼び出すことができます。(OpenContainer() を参照)。

詳細
戻り値
WEAVE_NO_ERROR
エンコードが正常にファイナライズされたかどうか。
WEAVE_ERROR_TLV_CONTAINER_OPEN
コンテナ ライターが現在の書き込みで開かれていて、まだ閉じていない場合。
other
構成された FinalizeBuffer() 関数から返される、その他の Weave またはプラットフォーム固有のエラー。

GetContainerType

TLVType GetContainerType(
  void
) const 

TLVWriter が現在書き込んでいるコンテナのタイプを返します。

GetContainerType() メソッドは、TLVWriter が現在書き込みを行っている TLV コンテナのタイプを返します。TLVWriter がコンテナ内の要素を書き込まない場合(エンコードの最も外側のレベルで書き込む場合)、メソッドは kTLVType_NotSpecified を返します。

詳細
戻り値
現在のコンテナの TLVType、または TLVWriter がコンテナ内の要素を書き込まない場合は kTLVType_NotSpecified。

GetLengthWritten

uint32_t GetLengthWritten(
  void
)

ライターが初期化されてから書き込まれた合計バイト数を返します。

詳細
戻り値
書き込みの初期化以降に書き込まれた合計バイト数。

init

void Init(
  uint8_t *buf,
  uint32_t maxLen
)

TLVWriter オブジェクトを初期化して、単一の出力バッファに書き込みます。

詳細
パラメータ
[in] buf
TLV の書き込み先となるバッファへのポインタ。
[in] maxLen
出力バッファに書き込む必要がある最大バイト数。

init

void Init(
  PacketBuffer *buf,
  uint32_t maxLen
)

TLVWriter オブジェクトを初期化して、単一の PacketBuffer に書き込みます。

指定されたバッファ内の既存データの最後のバイトの直後に書き込みが開始されます。

詳細
パラメータ
[in] buf
TLV を書き込む PacketBuffer へのポインタ。
[in] maxLen
出力バッファに書き込む必要がある最大バイト数。

init

void Init(
  PacketBuffer *buf,
  uint32_t maxLen,
  bool allowDiscontiguousBuffers
)

TLVWriter オブジェクトを初期化して、1 つ以上の PacketBuffers に書き込みます。

指定したバッファ内の既存データの最後のバイトの直後に書き込みが開始されます。allowDiscontiguousBuffers が true の場合、書き込まれたデータの量に対応するため、必要に応じて追加の PacketBuffer が割り当てられ、指定されたバッファにチェーンされます。指定された出力バッファがすでにバッファのチェーンの先頭である場合、出力は新しいバッファが割り当てられる前に、チェーン内の後続のバッファに書き込まれます。

詳細
パラメータ
[in] buf
TLV データを書き込む PacketBuffer へのポインタ。
[in] maxLen
出力バッファに書き込む必要がある最大バイト数。
[in] allowDiscontiguousBuffers
true の場合、PacketBuffer のチェーンにデータを書き込み、書き込まれたデータを保存するために、必要に応じて新しいバッファを割り当てます。false の場合、書き込まれたデータが初期出力バッファで使用可能なスペースを超えると、書き込みが失敗し、WEAVE_ERROR_BUFFER_TOO_SMALL が返されます。

InitMalloced

void InitMalloced(
  uint8_t *& outBuf,
  uint32_t initialBufSize,
  uint32_t maxLen
)

動的バッファに書き込む TLVWriter オブジェクトを初期化します。

詳細
パラメータ
[in] buf
割り当てられたバッファを受け取るポインタへの参照。
[in] maxLen
出力バッファに書き込む必要がある最大バイト数。
[in] initialBufSize
バッファに割り当てる必要がある初期のバイト数。

OpenContainer

WEAVE_ERROR OpenContainer(
  uint64_t tag,
  TLVType containerType,
  TLVWriter & containerWriter
)

TLV コンテナ要素のメンバーを書き込むための新しい TLVWriter オブジェクトを初期化します。

OpenContainer() メソッドは、TLV コンテナ要素(構造、配列、パス)をエンコードに書き込むために使用されます。このメソッドは、新しいコンテナのタイプとタグ(存在する場合)と、コンテナの要素を書き込むために初期化される新しいライター オブジェクト(コンテナ ライター)への参照を受け取ります。アプリケーションはコンテナ ライターを使用して新しいコンテナのメンバーを書き込み、CloseContainer() を呼び出してコンテナのエンコードを完了します。

コンテナ ライターが開いている間、アプリケーションは親ライターで呼び出しを行ったり、親ライターの状態を変更したりすることはできません。

コンテナ ライターは、親ライターからさまざまな構成プロパティを継承します。具体的には、次のとおりです。

  • 暗黙的プロファイル ID(ImplicitProfileId)
  • アプリケーション データ ポインタ(AppData)
  • GetNewBuffer 関数と FinalizeBuffer 関数ポインタ

詳細
パラメータ
[in] tag
コンテナでエンコードする TLV タグ。コンテナをタグなしでエンコードする必要がある場合は AnonymousTag。タグ値は、タグ定義関数の ProfileTag()ContextTag()CommonTag() のいずれかを使用して作成する必要があります。
[in] containerType
エンコードするコンテナのタイプ。kTLVType_StructurekTLVType_ArraykTLVType_Path のいずれかにする必要があります。
[out] containerWriter
新しいコンテナ要素のメンバーを書き込むために初期化される TLVWriter オブジェクトへの参照。指定したオブジェクトに関連付けられているデータはすべて上書きされます。
戻り値
WEAVE_NO_ERROR
メソッドが成功した場合。
WEAVE_ERROR_WRONG_TLV_TYPE
containerType に指定された値が正しくない場合。
WEAVE_ERROR_TLV_CONTAINER_OPEN
コンテナ ライターが現在の書き込みで開かれていて、まだ閉じていない場合。
WEAVE_ERROR_INVALID_TLV_TAG
指定されたタグ値が、値が書き込まれているコンテキストで無効または不適切である場合。
WEAVE_ERROR_BUFFER_TOO_SMALL
値の書き込みが、書き込みの初期化時に指定された最大バイト数の上限を超える場合。
WEAVE_ERROR_NO_MEMORY
メモリ不足が原因で出力バッファの割り当てに失敗した場合。
other
構成された GetNewBuffer() 関数または FinalizeBuffer() 関数から返されるその他の Weave またはプラットフォーム固有のエラー。

データに

WEAVE_ERROR Put(
  uint64_t tag,
  int8_t v
)

TLV 符号付き整数値をエンコードします。

これはオーバーロードされたメンバー関数であり、便宜上提供されています。上記の関数との違いは、受け付ける引数のみです。

詳細
パラメータ
[in] tag
値とともにエンコードされる TLV タグ。値をタグなしでエンコードする必要がある場合は AnonymousTag。タグ値は、タグ定義関数の ProfileTag()ContextTag()CommonTag() のいずれかを使用して作成する必要があります。
[in] v
エンコードする値。
戻り値
WEAVE_NO_ERROR
メソッドが成功した場合。
WEAVE_ERROR_TLV_CONTAINER_OPEN
コンテナ ライターが現在の書き込みで開かれていて、まだ閉じていない場合。
WEAVE_ERROR_INVALID_TLV_TAG
指定されたタグ値が、値が書き込まれているコンテキストで無効または不適切である場合。
WEAVE_ERROR_BUFFER_TOO_SMALL
値の書き込みが、書き込みの初期化時に指定された最大バイト数の上限を超える場合。
WEAVE_ERROR_NO_MEMORY
メモリ不足が原因で出力バッファの割り当てに失敗した場合。
other
構成された GetNewBuffer() 関数または FinalizeBuffer() 関数から返されるその他の Weave またはプラットフォーム固有のエラー。

データに

WEAVE_ERROR Put(
  uint64_t tag,
  int8_t v,
  bool preserveSize
)

TLV 符号付き整数値をエンコードします。

これはオーバーロードされたメンバー関数であり、便宜上提供されています。上記の関数との違いは、受け付ける引数のみです。

詳細
パラメータ
[in] tag
値とともにエンコードされる TLV タグ。値をタグなしでエンコードする必要がある場合は AnonymousTag。タグ値は、タグ定義関数の ProfileTag()ContextTag()CommonTag() のいずれかを使用して作成する必要があります。
[in] v
エンコードする値。
[in] preserveSize
入力型と同じバイト数で値をエンコードする必要がある場合は true。値を表現するために必要な最小バイト数で値をエンコードする必要がある場合は false。注: アプリでは、このパラメータを false に設定することを強くおすすめします。
戻り値
WEAVE_NO_ERROR
メソッドが成功した場合。
WEAVE_ERROR_TLV_CONTAINER_OPEN
コンテナ ライターが現在の書き込みで開かれていて、まだ閉じていない場合。
WEAVE_ERROR_INVALID_TLV_TAG
指定されたタグ値が、値が書き込まれているコンテキストで無効または不適切である場合。
WEAVE_ERROR_BUFFER_TOO_SMALL
値の書き込みが、書き込みの初期化時に指定された最大バイト数の上限を超える場合。
WEAVE_ERROR_NO_MEMORY
メモリ不足が原因で出力バッファの割り当てに失敗した場合。
other
構成された GetNewBuffer() 関数または FinalizeBuffer() 関数から返されるその他の Weave またはプラットフォーム固有のエラー。

データに

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 符号なし整数値をエンコードします。

これはオーバーロードされたメンバー関数であり、便宜上提供されています。上記の関数との違いは、受け付ける引数のみです。

詳細
パラメータ
[in] tag
値とともにエンコードされる TLV タグ。値をタグなしでエンコードする必要がある場合は AnonymousTag。タグ値は、タグ定義関数の ProfileTag()ContextTag()CommonTag() のいずれかを使用して作成する必要があります。
[in] v
エンコードする値。
戻り値
WEAVE_NO_ERROR
メソッドが成功した場合。
WEAVE_ERROR_TLV_CONTAINER_OPEN
コンテナ ライターが現在の書き込みで開かれていて、まだ閉じていない場合。
WEAVE_ERROR_INVALID_TLV_TAG
指定されたタグ値が、値が書き込まれているコンテキストで無効または不適切である場合。
WEAVE_ERROR_BUFFER_TOO_SMALL
値の書き込みが、書き込みの初期化時に指定された最大バイト数の上限を超える場合。
WEAVE_ERROR_NO_MEMORY
メモリ不足が原因で出力バッファの割り当てに失敗した場合。
other
構成された GetNewBuffer() 関数または FinalizeBuffer() 関数から返されるその他の Weave またはプラットフォーム固有のエラー。

データに

WEAVE_ERROR Put(
  uint64_t tag,
  uint8_t v,
  bool preserveSize
)

TLV 符号なし整数値をエンコードします。

これはオーバーロードされたメンバー関数であり、便宜上提供されています。上記の関数との違いは、受け付ける引数のみです。

詳細
パラメータ
[in] tag
値とともにエンコードされる TLV タグ。値をタグなしでエンコードする必要がある場合は AnonymousTag。タグ値は、タグ定義関数の ProfileTag()ContextTag()CommonTag() のいずれかを使用して作成する必要があります。
[in] v
エンコードする値。
[in] preserveSize
入力型と同じバイト数で値をエンコードする必要がある場合は true。値を表現するために必要な最小バイト数で値をエンコードする必要がある場合は false。注: アプリでは、このパラメータを false に設定することを強くおすすめします。
戻り値
WEAVE_NO_ERROR
メソッドが成功した場合。
WEAVE_ERROR_TLV_CONTAINER_OPEN
コンテナ ライターが現在の書き込みで開かれていて、まだ閉じていない場合。
WEAVE_ERROR_INVALID_TLV_TAG
指定されたタグ値が、値が書き込まれているコンテキストで無効または不適切である場合。
WEAVE_ERROR_BUFFER_TOO_SMALL
値の書き込みが、書き込みの初期化時に指定された最大バイト数の上限を超える場合。
WEAVE_ERROR_NO_MEMORY
メモリ不足が原因で出力バッファの割り当てに失敗した場合。
other
構成された GetNewBuffer() 関数または FinalizeBuffer() 関数から返されるその他の Weave またはプラットフォーム固有のエラー。

データに

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 浮動小数点値をエンコードします。

これはオーバーロードされたメンバー関数であり、便宜上提供されています。上記の関数との違いは、受け付ける引数のみです。

詳細
パラメータ
[in] tag
値とともにエンコードされる TLV タグ。値をタグなしでエンコードする必要がある場合は AnonymousTag。タグ値は、タグ定義関数の ProfileTag()ContextTag()CommonTag() のいずれかを使用して作成する必要があります。
[in] v
エンコードする値。
戻り値
WEAVE_NO_ERROR
メソッドが成功した場合。
WEAVE_ERROR_TLV_CONTAINER_OPEN
コンテナ ライターが現在の書き込みで開かれていて、まだ閉じていない場合。
WEAVE_ERROR_INVALID_TLV_TAG
指定されたタグ値が、値が書き込まれているコンテキストで無効または不適切である場合。
WEAVE_ERROR_BUFFER_TOO_SMALL
値の書き込みが、書き込みの初期化時に指定された最大バイト数の上限を超える場合。
WEAVE_ERROR_NO_MEMORY
メモリ不足が原因で出力バッファの割り当てに失敗した場合。
other
構成された GetNewBuffer() 関数または FinalizeBuffer() 関数から返されるその他の Weave またはプラットフォーム固有のエラー。

PutBoolean

WEAVE_ERROR PutBoolean(
  uint64_t tag,
  bool v
)

TLV ブール値をエンコードします。

詳細
パラメータ
[in] tag
値とともにエンコードされる TLV タグ。値をタグなしでエンコードする必要がある場合は AnonymousTag。タグ値は、タグ定義関数の ProfileTag()ContextTag()CommonTag() のいずれかを使用して作成する必要があります。
[in] v
エンコードする値。
戻り値
WEAVE_NO_ERROR
メソッドが成功した場合。
WEAVE_ERROR_TLV_CONTAINER_OPEN
コンテナ ライターが現在の書き込みで開かれていて、まだ閉じていない場合。
WEAVE_ERROR_INVALID_TLV_TAG
指定されたタグ値が、値が書き込まれているコンテキストで無効または不適切である場合。
WEAVE_ERROR_BUFFER_TOO_SMALL
値の書き込みが、書き込みの初期化時に指定された最大バイト数の上限を超える場合。
WEAVE_ERROR_NO_MEMORY
メモリ不足が原因で出力バッファの割り当てに失敗した場合。
other
構成された GetNewBuffer() 関数または FinalizeBuffer() 関数から返されるその他の Weave またはプラットフォーム固有のエラー。

PutBytes

WEAVE_ERROR PutBytes(
  uint64_t tag,
  const uint8_t *buf,
  uint32_t len
)

TLV バイト文字列値をエンコードします。

詳細
パラメータ
[in] tag
値とともにエンコードされる TLV タグ。値をタグなしでエンコードする必要がある場合は AnonymousTag。タグ値は、タグ定義関数の ProfileTag()ContextTag()CommonTag() のいずれかを使用して作成する必要があります。
[in] buf
エンコードするバイト文字列を含むバッファへのポインタ。
[in] len
エンコードするバイト数。
戻り値
WEAVE_NO_ERROR
メソッドが成功した場合。
WEAVE_ERROR_TLV_CONTAINER_OPEN
コンテナ ライターが現在の書き込みで開かれていて、まだ閉じていない場合。
WEAVE_ERROR_INVALID_TLV_TAG
指定されたタグ値が、値が書き込まれているコンテキストで無効または不適切である場合。
WEAVE_ERROR_BUFFER_TOO_SMALL
値の書き込みが、書き込みの初期化時に指定された最大バイト数の上限を超える場合。
WEAVE_ERROR_NO_MEMORY
メモリ不足が原因で出力バッファの割り当てに失敗した場合。
other
構成された GetNewBuffer() 関数または FinalizeBuffer() 関数から返されるその他の Weave またはプラットフォーム固有のエラー。

PutNull

WEAVE_ERROR PutNull(
  uint64_t tag
)

TLV の null 値をエンコードします。

詳細
パラメータ
[in] tag
値とともにエンコードされる TLV タグ。値をタグなしでエンコードする必要がある場合は AnonymousTag。タグ値は、タグ定義関数の ProfileTag()ContextTag()CommonTag() のいずれかを使用して作成する必要があります。
戻り値
WEAVE_NO_ERROR
メソッドが成功した場合。
WEAVE_ERROR_TLV_CONTAINER_OPEN
コンテナ ライターが現在の書き込みで開かれていて、まだ閉じていない場合。
WEAVE_ERROR_INVALID_TLV_TAG
指定されたタグ値が、値が書き込まれているコンテキストで無効または不適切である場合。
WEAVE_ERROR_BUFFER_TOO_SMALL
値の書き込みが、書き込みの初期化時に指定された最大バイト数の上限を超える場合。
WEAVE_ERROR_NO_MEMORY
メモリ不足が原因で出力バッファの割り当てに失敗した場合。
other
構成された GetNewBuffer() 関数または FinalizeBuffer() 関数から返されるその他の Weave またはプラットフォーム固有のエラー。

PutPreEncodedContainer

WEAVE_ERROR PutPreEncodedContainer(
  uint64_t tag,
  TLVType containerType,
  const uint8_t *data,
  uint32_t dataLen
)

事前にエンコードされたメンバー要素のセットから TLV コンテナ要素をエンコードします。

PutPreEncodedContainer() メソッドは、事前にエンコードされたバッファから取得したメンバー要素のセットを含む新しい TLV コンテナ要素(構造、配列、パス)をエンコードします。入力バッファには、指定されたコンテナタイプに関連付けられたルールに準拠するタグを含む 0 個以上のフルエンコード TLV 要素が含まれている必要があります(たとえば、構造体メンバーにはタグが必要ですが、配列メンバーにはタグがありません)。

このメソッドは 1 回の呼び出しでコンテナ要素全体をエンコードします。PutPreEncodedContainer() から返されたら、ライター オブジェクトを使用して、コンテナ要素の後に追加の TLV 要素を書き込むことができます。

詳細
パラメータ
[in] tag
コンテナでエンコードする TLV タグ。コンテナをタグなしでエンコードする必要がある場合は AnonymousTag。タグ値は、タグ定義関数の ProfileTag()ContextTag()CommonTag() のいずれかを使用して作成する必要があります。
[in] containerType
エンコードするコンテナのタイプ。kTLVType_StructurekTLVType_ArraykTLVType_Path のいずれかにする必要があります。
[in] data
新しいコンテナのメンバーとなる、エンコードされた TLV 要素を 0 個以上含むバッファへのポインタ。
[in] dataLen
data バッファ内のバイト数。
戻り値
WEAVE_NO_ERROR
メソッドが成功した場合。
WEAVE_ERROR_WRONG_TLV_TYPE
containerType に指定された値が正しくない場合。
WEAVE_ERROR_TLV_CONTAINER_OPEN
コンテナ ライターが現在の書き込みで開かれていて、まだ閉じていない場合。
WEAVE_ERROR_INVALID_TLV_TAG
指定されたタグ値が、値が書き込まれているコンテキストで無効または不適切である場合。
WEAVE_ERROR_BUFFER_TOO_SMALL
値の書き込みが、書き込みの初期化時に指定された最大バイト数の上限を超える場合。
WEAVE_ERROR_NO_MEMORY
メモリ不足が原因で出力バッファの割り当てに失敗した場合。
other
構成された GetNewBuffer() 関数または FinalizeBuffer() 関数から返されるその他の Weave またはプラットフォーム固有のエラー。

PutString

WEAVE_ERROR PutString(
  uint64_t tag,
  const char *buf
)

TLV UTF8 文字列値をエンコードします。

詳細
パラメータ
[in] tag
値とともにエンコードされる TLV タグ。値をタグなしでエンコードする必要がある場合は AnonymousTag。タグ値は、タグ定義関数の ProfileTag()ContextTag()CommonTag() のいずれかを使用して作成する必要があります。
[in] buf
エンコードする null 終端の UTF-8 文字列へのポインタ。
戻り値
WEAVE_NO_ERROR
メソッドが成功した場合。
WEAVE_ERROR_TLV_CONTAINER_OPEN
コンテナ ライターが現在の書き込みで開かれていて、まだ閉じていない場合。
WEAVE_ERROR_INVALID_TLV_TAG
指定されたタグ値が、値が書き込まれているコンテキストで無効または不適切である場合。
WEAVE_ERROR_BUFFER_TOO_SMALL
値の書き込みが、書き込みの初期化時に指定された最大バイト数の上限を超える場合。
WEAVE_ERROR_NO_MEMORY
メモリ不足が原因で出力バッファの割り当てに失敗した場合。
other
構成された GetNewBuffer() 関数または FinalizeBuffer() 関数から返されるその他の Weave またはプラットフォーム固有のエラー。

PutString

WEAVE_ERROR PutString(
  uint64_t tag,
  const char *buf,
  uint32_t len
)

TLV UTF8 文字列値をエンコードします。

詳細
パラメータ
[in] tag
値とともにエンコードされる TLV タグ。値をタグなしでエンコードする必要がある場合は AnonymousTag。タグ値は、タグ定義関数の ProfileTag()ContextTag()CommonTag() のいずれかを使用して作成する必要があります。
[in] buf
エンコードする UTF-8 文字列へのポインタ。
[in] len
エンコードする文字列の長さ(バイト単位)。
戻り値
WEAVE_NO_ERROR
メソッドが成功した場合。
WEAVE_ERROR_TLV_CONTAINER_OPEN
コンテナ ライターが現在の書き込みで開かれていて、まだ閉じていない場合。
WEAVE_ERROR_INVALID_TLV_TAG
指定されたタグ値が、値が書き込まれているコンテキストで無効または不適切である場合。
WEAVE_ERROR_BUFFER_TOO_SMALL
値の書き込みが、書き込みの初期化時に指定された最大バイト数の上限を超える場合。
WEAVE_ERROR_NO_MEMORY
メモリ不足が原因で出力バッファの割り当てに失敗した場合。
other
構成された GetNewBuffer() 関数または FinalizeBuffer() 関数から返されるその他の Weave またはプラットフォーム固有のエラー。

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 ストレージの連続状態に収まるように出力が切り捨てられます

詳細
パラメータ
[in] tag
値とともにエンコードされる TLV タグ。値をタグなしでエンコードする必要がある場合は AnonymousTag。タグ値は、タグ定義関数の ProfileTag()ContextTag()CommonTag() のいずれかを使用して作成する必要があります。
[in] fmt
引数リストの書式設定に使用される書式文字列。printf ファミリーの関数の形式文字列と同じ構文とルールに従います。
[in] ...
fmt に従って出力値に書式設定する引数のリスト。
戻り値
WEAVE_NO_ERROR
メソッドが成功した場合。
other
TLVWriter メソッド WriteElementHead または GetNewBuffer の基礎となる呼び出しが失敗した場合、それらのエラーは直ちにコールスタックの上に転送されます。

StartContainer

WEAVE_ERROR StartContainer(
  uint64_t tag,
  TLVType containerType,
  TLVType & outerContainerType
)

新しい TLV コンテナ要素のエンコードを開始します。

StartContainer() メソッドは、TLV コンテナ要素(構造、配列、パス)をエンコードに書き込むために使用されます。このメソッドは、新しいコンテナのタイプとタグ(存在する場合)と、TLVType 値への参照を受け取ります。TLVType 値は、コンテナの書き込み中に書き込みの現在のコンテキストを保存するために使用されます。

StartContainer() メソッドが返されたら、アプリケーションは現在の TLVWriter オブジェクトを使用してコンテナの要素を書き込む必要があります。完了したら、アプリケーションで EndContainer() メソッドを呼び出して、コンテナのエンコードを終了する必要があります。

詳細
パラメータ
[in] tag
コンテナでエンコードする TLV タグ。コンテナをタグなしでエンコードする必要がある場合は AnonymousTag。タグ値は、タグ定義関数の ProfileTag()ContextTag()CommonTag() のいずれかを使用して作成する必要があります。
[in] containerType
エンコードするコンテナのタイプ。kTLVType_StructurekTLVType_ArraykTLVType_Path のいずれかにする必要があります。
[out] outerContainerType
書き込みのコンテキストを受け取る TLVType 値への参照。
戻り値
WEAVE_NO_ERROR
メソッドが成功した場合。
WEAVE_ERROR_WRONG_TLV_TYPE
containerType に指定された値が正しくない場合。
WEAVE_ERROR_TLV_CONTAINER_OPEN
コンテナ ライターが現在の書き込みで開かれていて、まだ閉じていない場合。
WEAVE_ERROR_INVALID_TLV_TAG
指定されたタグ値が、値が書き込まれているコンテキストで無効または不適切である場合。
WEAVE_ERROR_BUFFER_TOO_SMALL
値の書き込みが、書き込みの初期化時に指定された最大バイト数の上限を超える場合。
WEAVE_ERROR_NO_MEMORY
メモリ不足が原因で出力バッファの割り当てに失敗した場合。
other
構成された GetNewBuffer() 関数または FinalizeBuffer() 関数から返されるその他の Weave またはプラットフォーム固有のエラー。

StartPutBytes

WEAVE_ERROR StartPutBytes(
  uint64_t tag,
  uint32_t totalLen
)

TLV バイト文字列を複数のチャンクにエンコードします。

これは ContinuePutBytes とともに使用する必要があります。

詳細
パラメータ
[in] tag
値とともにエンコードされる TLV タグ。値をタグなしでエンコードする必要がある場合は AnonymousTag。タグ値は、タグ定義関数の ProfileTag()ContextTag()CommonTag() のいずれかを使用して作成する必要があります。
[in] totalLen
エンコードされる合計バイト数。
戻り値
WEAVE_NO_ERROR
メソッドが成功した場合。
WEAVE_ERROR_TLV_CONTAINER_OPEN
コンテナ ライターが現在の書き込みで開かれていて、まだ閉じていない場合。
WEAVE_ERROR_INVALID_TLV_TAG
指定されたタグ値が、値が書き込まれているコンテキストで無効または不適切である場合。
WEAVE_ERROR_BUFFER_TOO_SMALL
値の書き込みが、書き込みの初期化時に指定された最大バイト数の上限を超える場合。
WEAVE_ERROR_NO_MEMORY
メモリ不足が原因で出力バッファの割り当てに失敗した場合。
other
構成された GetNewBuffer() 関数または FinalizeBuffer() 関数から返されるその他の Weave またはプラットフォーム固有のエラー。

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 ストレージの連続状態に収まるように出力が切り捨てられます

詳細
パラメータ
[in] tag
値とともにエンコードされる TLV タグ。値をタグなしでエンコードする必要がある場合は AnonymousTag。タグ値は、タグ定義関数の ProfileTag()ContextTag()CommonTag() のいずれかを使用して作成する必要があります。
[in] fmt
引数リストの書式設定に使用される書式文字列。printf ファミリーの関数の形式文字列と同じ構文とルールに従います。
[in] ap
fmt に従って出力値に書式設定する引数のリスト。
戻り値
WEAVE_NO_ERROR
メソッドが成功した場合。
other
TLVWriter メソッド WriteElementHead または GetNewBuffer の基礎となる呼び出しが失敗した場合、それらのエラーは直ちにコールスタックの上に転送されます。

静的パブリック関数

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
)