Google は、黒人コミュニティのための人種的公平の促進に取り組んでいます。詳細をご覧ください。
コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

nl::Weave::TLV::TLVWriter

#include <src/lib/core/WeaveTLV.h>

Weave TLV 形式でデータを書き込むメモリ効率の良いエンコーダを提供します。

まとめ

TLVWriter は、Weave TLV データのフォワードのみのストリーム スタイルのエンコーダを実装します。アプリケーションは、ライターの Put() メソッドのいずれかを呼び出してデータを必要に応じて書き込み、関連するタグと値の情報を渡します。同様に、アプリケーションは、ライターの OpenContainer() メソッドまたは EnterContainer() メソッドを呼び出して、TLV コンテナタイプ(構造体、配列、またはパス)をエンコードできます。

TLVWriter オブジェクトは、固定出力バッファまたは 1 つ以上の PacketBuffer オブジェクトのチェーンに直接データを書き込むことができます。さらに、アプリケーションは独自の GetNewBuffer 関数と FinalizeBuffer 関数を提供して、任意の宛先(ソケットやイベントキューなど)に出力を転送できます。

継承

直接的な既知のサブクラス: nl::Weave::TLV::CircularTLVWriter

保護されるタイプ

@72{
  kEndOfContainerMarkerSize = 1
}
列挙型

パブリック タイプ

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
単一の PacketBuffer に書き込む TLVWriter オブジェクトを初期化します。
Init(PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers)
void
1 つ以上の PacketBuffer に書き込む TLVWriter オブジェクトを初期化します。
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 またはプラットフォーム固有のエラーコードは、エラーが発生したために関数で追加のバッファスペースが生成されなかったことを示します。

パブリック属性

アプリデータ

void * AppData

アプリケーション固有のデータに使用できるポインタ フィールド。

最終処理バッファ

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 型定義をご覧ください。

暗黙的プロファイル ID

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

パブリック関数

コンテナを閉じる

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 またはプラットフォーム固有のエラー。

コンテナのコピー

WEAVE_ERROR CopyContainer(
  TLVReader & container
)

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

CopyContainer() は、TLVReader オブジェクトの現在の位置にある事前エンコードされたコンテナ要素をコピーして、新しい TLV コンテナ要素をエンコードします。このメソッドは、新しいコンテナ要素全体を 1 回の呼び出しで書き込み、コンテナのタイプ、タグ、要素をソース エンコードからコピーします。メソッドが返されると、writer オブジェクトを使用して、コンテナ要素の後に追加の 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 またはプラットフォーム固有のエラー。

コンテナのコピー

WEAVE_ERROR CopyContainer(
  uint64_t tag,
  TLVReader & container
)

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

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

メソッドが返されると、writer オブジェクトを使用して、コンテナ要素の後に追加の 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 またはプラットフォーム固有のエラー。

コンテナのコピー

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

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

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

メソッドが返されると、writer オブジェクトを使用して、コンテナ要素の後に追加の 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 またはプラットフォーム固有のエラー。

コピー要素

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 またはプラットフォーム固有のエラー。

コピー要素

WEAVE_ERROR CopyElement(
  uint64_t tag,
  TLVReader & reader
)

エンドコンテナ

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
)

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

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

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

init

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

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

指定されたバッファ内の既存データの最後のバイトの直後に書き込みが開始されます。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 またはプラットフォーム固有のエラー。

put

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 またはプラットフォーム固有のエラー。

put

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 またはプラットフォーム固有のエラー。

put

WEAVE_ERROR Put(
  uint64_t tag,
  int16_t v
)

put

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

put

WEAVE_ERROR Put(
  uint64_t tag,
  int32_t v
)

put

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

put

WEAVE_ERROR Put(
  uint64_t tag,
  int64_t v
)

put

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

put

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 またはプラットフォーム固有のエラー。

put

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 またはプラットフォーム固有のエラー。

put

WEAVE_ERROR Put(
  uint64_t tag,
  uint16_t v
)

put

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

put

WEAVE_ERROR Put(
  uint64_t tag,
  uint32_t v
)

put

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

put

WEAVE_ERROR Put(
  uint64_t tag,
  uint64_t v
)

put

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

put

WEAVE_ERROR Put(
  uint64_t tag,
  float v
)

put

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 またはプラットフォーム固有のエラー。

Put ブール値

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() が返された場合は、writer オブジェクトを使用して、コンテナ要素の後に追加の 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 は、出力が文字バッファではなく TLV 要素に格納される sprintf に似ています。printf の拡張機能を使用できる場合、この関数では結果の文字列が不連続で基礎となるストレージに出力されます。この実装では、次の printf 拡張機能がサポートされています。

プラットフォームには、putchar の代わりにカスタム コールバックを呼び出す機能を提供する、コールバック ベースの vcbprintf が用意されています。

プラットフォームには、vsnprintf_ex と呼ばれる vsnprintf のバリアントが用意されています。これは、出力の最初の n 文字を省略するための規定がある点を除けば、vnsprintf とまったく同じように動作します。

コールバック ベースの関数は最も単純で、使用するコードは最小限に抑えられますが、vsprintf_ex 関数ではスタックの消費量が少なくなります。

上のどちらも利用できないが、プラットフォームが malloc を提供する場合、この関数は出力を保持するために一時バッファを割り当てます。プラットフォームが printf ファミリーと malloc の両方に拡張機能を提供しない場合、現在の TLV ストレージで連続状態に収まるように出力は省略されます。

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

開始コンテナ

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

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

StartContainer() メソッドは、TLV コンテナ要素(構造体、配列、パス)をエンコードに書き込むために使用されます。このメソッドは、新しいコンテナのタイプとタグ、およびコンテナの書き込みに使用されているライターの現在のコンテキストを保存するために使用される 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 またはプラットフォーム固有のエラー。

VputString

WEAVE_ERROR VPutStringF(
  uint64_t tag,
  const char *fmt,
  va_list ap
)

TLV 要素の形式に従って、文字列の出力をエンコードします。

PutStringF は、出力が文字バッファではなく TLV 要素に格納される sprintf に似ています。printf の拡張機能を使用できる場合、この関数では結果の文字列が不連続で基礎となるストレージに出力されます。この実装では、次の printf 拡張機能がサポートされています。

プラットフォームには、putchar の代わりにカスタム コールバックを呼び出す機能を提供する、コールバック ベースの vcbprintf が用意されています。

プラットフォームには、vsnprintf_ex と呼ばれる vsnprintf のバリアントが用意されています。これは、出力の最初の n 文字を省略するための規定がある点を除けば、vnsprintf とまったく同じように動作します。

コールバック ベースの関数は最も単純で、使用するコードは最小限に抑えられますが、vsprintf_ex 関数ではスタックの消費量が少なくなります。

上のどちらも利用できないが、プラットフォームが malloc を提供する場合、この関数は出力を保持するために一時バッファを割り当てます。プラットフォームが printf ファミリーと malloc の両方に拡張機能を提供しない場合、現在の TLV ストレージで連続状態に収まるように出力は省略されます。

詳細
パラメータ
[in] tag
値でエンコードされる TLV タグ。値をタグなしでエンコードする必要がある場合は AnonymousTag。タグ値は、ProfileTag()ContextTag()CommonTag() のいずれかで定義する必要があります。
[in] fmt
引数リストの書式設定に使用される形式設定文字列。printf 関数ファミリーの形式文字列と同じ構文とルールに従います。
[in] ap
推定に従って出力値にフォーマットする引数のリスト。
戻り値
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 つ以上の PacketBuffer のチェーンを割り当て、TLVWriter に新しい出力スペースを提供します。この関数は、TLVWriter GetNewBuffer 関数ポインタに割り当てるように設計されています。

TLVWriter で GetNewPacketBuffer を使用する場合は、対応する FinalizePacketBuffer() 関数(または同等の関数)を使用してバッファ チェーンを最終処理する必要があります。

GetNewPacketBuffer() 関数の API に関する追加情報については、GetNewBufferFunct 型定義をご覧ください。

プロテクト関数

IsCloseContainerReserved

bool IsCloseContainerReserved(
  void
) const 

コンテナを起動または開くときに、コンテナに CloseContainer シンボル用のスペースを確保するかどうかを決定します。

IsContainerOpen(IsContainerOpen)

bool IsContainerOpen(
  void
) const 

SetCloseContainerReserved

void SetCloseContainerReserved(
  bool aCloseContainerReserved
)

コンテナを開始 / 開く時点で、CloseContainer シンボルのスペースをコンテナで予約するかどうかを設定します。

SetContainerOpen

void SetContainerOpen(
  bool aContainerOpen
)

書き込みデータ

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
)