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
1 つ以上の PacketBuffers に書き込むように 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 またはプラットフォーム固有のエラーコード。

パブリック属性

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 要素を書き込むことができます。この時点で、提供されたコンテナ ライターは「初期化解除済み」と見なされ、再初期化なしで使用することはできません。

詳細
パラメータ
[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() メソッドは、新しい TLV 要素をエンコードします。その型、タグ、値は TLVReader オブジェクトから取得されます。このメソッドが呼び出されたとき、提供されたリーダー オブジェクトはソースの 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
)

1 つ以上の PacketBuffers に書き込むように 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 またはプラットフォーム固有のエラー。

データに

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 コンテナ要素(構造体、配列、またはパス)をエンコードします。入力バッファには、フルエンコードされた TLV 要素が 0 個以上、指定されたコンテナタイプに関連付けられたルールに適合するタグが含まれることが想定されます(たとえば、構造のメンバーにはタグが必要ですが、配列のメンバーにはできません)。

このメソッドは、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
)