nl::Weave::TLV::TLVReader

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

Weave TLV 形式でエンコードされたデータ用のメモリ効率パーサーを提供します。

概要

TLVReader は、Weave TLV データ用の順方向専用の「pull スタイル」パーサーを実装しています。TLVReader オブジェクトはカーソルとして機能します。このカーソルを使用すると、一連の TLV 要素を反復処理し、その内容を解釈できます。要素が要素に配置された場合、アプリケーションはリーダーの Get() メソッドを呼び出して、現在の要素の型とタグを照会し、関連する値を抽出できます。リーダーの Next() メソッドは、要素から要素へ進むために使用されます。

TLVReader オブジェクトは、常に TLV 要素の前、上、後のいずれかに配置されます。最初に初期化されたとき、TLVReader はエンコードの最初の要素の直前に配置されます。読み取りを開始するには、アプリケーションで Next() メソッドの最初の呼び出しを行い、リーダーを最初の要素に配置する必要があります。コンテナ要素が検出されると、配列またはパス、OpenContainer() メソッドまたは EnterContainer() メソッドのいずれかを使用して、コンテナの内容を反復処理できます。

リーダーが TLV エンコードの終わり、またはコンテナ内の最後の要素に到達すると、Next() メソッドから WEAVE_END_OF_TLV エラーを返すことによってアプリケーションに通知します。リーダーは、再初期化されるか、現在のコンテナが(CloseContainer() / ExitContainer() で)終了するまで、WEAVE_END_OF_TLV を返し続けます。

TLVReader オブジェクトは、固定入力バッファのデータ、または 1 つ以上の PacketBuffer のチェーンのデータを直接解析できます。また、アプリで GetNextBuffer 関数を提供し、ソケットやシリアルポートなどの任意のソースからリーダーにデータをフィードすることもできます。

継承

直接的な既知のサブクラス:
  nl::Weave::Profiles::DataManagement_Current::CircularEventReader
  nl::Weave::TLV::CircularTLVReader

パブリック タイプ

GetNextBufferFunct)(TLVReader &reader, uintptr_t &bufHandle, const uint8_t *&bufStart, uint32_t &bufLen) WEAVE_ERROR(
解析対象の追加の TLV データを取得するために使用できる関数。

パブリック属性

AppData
void *
アプリケーション固有のデータに使用できるポインタ フィールド。
GetNextBuffer
TLVReader オブジェクトの入力データを生成する関数へのポインタ。
ImplicitProfileId
uint32_t
暗黙的な形式でエンコードされたプロファイル タグに使用するプロファイル ID。

プロテクト属性

mBufEnd
const uint8_t *
mBufHandle
uintptr_t
mContainerType
mControlByte
uint16_t
mElemLenOrVal
uint64_t
mElemTag
uint64_t
mLenRead
uint32_t
mMaxLen
uint32_t
mReadPoint
const uint8_t *

パブリック関数

CloseContainer(TLVReader & containerReader)
OpenContainer() の呼び出し後に TLV コンテナの読み取りを完了します。
DupBytes(uint8_t *& buf, uint32_t & dataLen)
現在のバイトまたは UTF8 文字列の値を格納するバッファを割り当てて返します。
DupString(char *& buf)
現在のバイトまたは UTF8 文字列の null 終端値を格納するバッファを割り当てて返します。
EnterContainer(TLVType & outerContainerType)
TLV コンテナ要素のメンバーを読み取るための TLVReader オブジェクトを準備します。
ExitContainer(TLVType outerContainerType)
TLV コンテナの読み取りを完了し、コンテナの後の要素を読み取るように TLVReader オブジェクトを準備します。
Get(bool & v)
現在の要素の値をブール値として取得します。
Get(int8_t & v)
現在の要素の値を 8 ビット符号付き整数として取得します。
Get(int16_t & v)
現在の要素の値を 16 ビット符号付き整数として取得します。
Get(int32_t & v)
現在の要素の値を 32 ビット符号付き整数として取得します。
Get(int64_t & v)
現在の要素の値を 64 ビット符号付き整数として取得します。
Get(uint8_t & v)
現在の要素の値を 8 ビット符号なし整数として取得します。
Get(uint16_t & v)
現在の要素の値を 16 ビット符号なし整数として取得します。
Get(uint32_t & v)
現在の要素の値を 32 ビット符号なし整数として取得します。
Get(uint64_t & v)
現在の要素の値を 64 ビット符号なし整数として取得します。
Get(float & v)
Get(double & v)
現在の要素の値を倍精度浮動小数点数として取得します。
GetBufHandle(void) const
uintptr_t
GetBytes(uint8_t *buf, uint32_t bufSize)
現在のバイトまたは UTF8 文字列要素の値を取得します。
GetContainerType(void) const
TLVReader が現在読み取っているコンテナのタイプを返します。
GetControlByte(void) const
uint16_t
現在の TLV 要素に関連付けられている制御バイトを返します。
GetDataPtr(const uint8_t *& data)
TLV バイトまたは UTF8 文字列要素の、最初にエンコードされたバイトへのポインタを取得します。
GetLength(void) const
uint32_t
現在の TLV 要素に関連付けられているデータの長さを返します。
GetLengthRead(void) const
uint32_t
リーダーの初期化以降に読み取られたバイト数の合計を返します。
GetReadPoint(void) const
const uint8_t *
リーダーの現在の位置に対応する、基になる入力バッファ内のポイントを取得します。
GetRemainingLength(void) const
uint32_t
最大読み取り長に達するまで読み取り可能なバイト数の合計を返します。
GetString(char *buf, uint32_t bufSize)
現在のバイトまたは UTF8 文字列要素の値を、null 終端文字列として取得します。
GetTag(void) const
uint64_t
現在の TLV 要素に関連付けられているタグを返します。
GetType(void) const
現在の TLV 要素のタイプを返します。
Init(const TLVReader & aReader)
void
別の TLVReader オブジェクトから TLVReader オブジェクトを初期化します。
Init(const uint8_t *data, uint32_t dataLen)
void
単一の入力バッファから読み取る TLVReader オブジェクトを初期化します。
Init(PacketBuffer *buf, uint32_t maxLen)
void
単一の PacketBuffer から読み取るように TLVReader オブジェクトを初期化します。
Init(PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers)
void
1 つ以上の PacketBuffers から読み取るように TLVReader オブジェクトを初期化します。
Next(void)
TLVReader オブジェクトを、次に読み取る TLV 要素に移動します。
Next(TLVType expectedType, uint64_t expectedTag)
TLVReader オブジェクトを次に読み取る TLV 要素に進み、新しい要素のタイプとタグをアサートします。
OpenContainer(TLVReader & containerReader)
TLV コンテナ要素のメンバーを読み取るために、新しい TLVReader オブジェクトを初期化します。
Skip(void)
TLVReader オブジェクトを現在の TLV 要素の直後に移動します。
VerifyEndOfContainer(void)
TVLReader オブジェクトが TLV コンテナの最後にあることを確認します。

プロテクト関数

ClearElementState(void)
void
TLVReader の状態をクリアします。
ElementType(void) const
TLVElementType
これは、mControlByte から TLVElementType を返すプライベート メソッドです。
EnsureData(WEAVE_ERROR noDataErr)
GetElementHeadLength(uint8_t & elemHeadBytes) const
これは、TLV 要素ヘッドの長さを計算するために使用される非公開のメソッドです。
IsContainerOpen(void) const
bool
ReadData(uint8_t *buf, uint32_t len)
ReadElement(void)
ReadTag(TLVTagControl tagControl, const uint8_t *& p)
uint64_t
SetContainerOpen(bool aContainerOpen)
void
SkipData(void)
現在の TLV に含まれるデータを、宛先バッファなしで読み取ってスキップします。
SkipToEndOfContainer(void)
VerifyElement(void)

保護された静的関数

FailGetNextBuffer(TLVReader & reader, uintptr_t & bufHandle, const uint8_t *& bufStart, uint32_t & bufLen)
GetNextPacketBuffer(TLVReader & reader, uintptr_t & bufHandle, const uint8_t *& bufStart, uint32_t & bufLen)

パブリック タイプ

GetNextBufferFunct

WEAVE_ERROR(* GetNextBufferFunct)(TLVReader &reader, uintptr_t &bufHandle, const uint8_t *&bufStart, uint32_t &bufLen)

解析対象の追加の TLV データを取得するために使用できる関数。

このタイプの関数は、入力データを TLVReader にフィードするために使用されます。この関数は、呼び出されたときに追加のデータを生成して、リーダーが解析したり、これ以上データがないことをリーダーに通知したりすることが求められます。

詳細
パラメータ
[in] reader
入力データをリクエストする TLVReader オブジェクトへの参照。
[in,out] bufHandle
関数が呼び出し間でコンテキスト データを保存するために使用できる uintptr_t 値への参照。この値は、最初の呼び出しの前に 0 に初期化されます。
[in,out] bufStart
データポインタへの参照。関数へのエントリ時に、bufStart は、リーダーによって消費された最後の TLV データバイトより 1 バイト後を指します。終了時に、bufStart は解析対象の新しい TLV データの最初のバイトを指すことが想定されます。新しいポインタ値は、以前に使用したデータと同じバッファ内に存在することも、まったく新しいバッファを指すこともできます。
[out] bufLen
関数で返される TLV データのバイト数に設定する必要がある符号なし整数の参照。入力 TLV データの最後に到達した場合、この関数はこの値を 0 に設定します。
戻り値
WEAVE_NO_ERROR
関数が追加の TLV データを正常に生成した場合、または入力データの最後に到達した場合(この場合、bufLen は 0 に設定する必要があります)。
other
エラーが発生し、関数がリクエストされたデータを生成できなかったことを示すその他の Weave またはプラットフォーム固有のエラーコード。

パブリック属性

AppData

void * AppData

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

GetNextBuffer

GetNextBufferFunct GetNextBuffer

TLVReader オブジェクトの入力データを生成する関数へのポインタ。

NULL(デフォルト値)に設定すると、リーダーはこれ以上入力データがないと見なします。

GetNextBuffer はアプリケーションによっていつでも設定できますが、通常はリーダーの初期化時に設定されます。

GetNextBufferFunct 関数の実装の詳細については、GetNextBufferFunct 型定義をご覧ください。

ImplicitProfileId

uint32_t ImplicitProfileId

暗黙的な形式でエンコードされたプロファイル タグに使用するプロファイル ID。

リーダーは、暗黙的な形式でエンコードされたプロファイル固有のタグを見つけると、ImplicitProfileId プロパティの値をタグの推定プロファイル ID として使用します。

デフォルトでは、ImplicitProfileId プロパティは kProfileIdNotSpecified に設定されています。暗黙的にエンコードされたタグを含む TLV をデコードする場合、アプリはそのようなタグを持つ TLV 要素を読み取る前に ImplicitProfileId を設定する必要があります。適切なプロファイル ID は通常、話されているアプリケーションやプロトコルのコンテキストによって異なります。

ImplicitProfileId が kProfileIdNotSpecified に設定されているときに暗黙的にエンコードされたタグが検出されると、リーダーは WEAVE_ERROR_UNKNOWN_IMPLICIT_TLV_TAG エラーを返します。

プロテクト属性

mBufEnd

const uint8_t * mBufEnd

mBufHandle

uintptr_t mBufHandle

mContainerType

TLVType mContainerType

mControlByte

uint16_t mControlByte

mElemLenOrVal

uint64_t mElemLenOrVal

mElemTag

uint64_t mElemTag

mLenRead

uint32_t mLenRead

mMaxLen

uint32_t mMaxLen

mReadPoint

const uint8_t * mReadPoint

パブリック関数

CloseContainer

WEAVE_ERROR CloseContainer(
  TLVReader & containerReader
)

OpenContainer() の呼び出し後に TLV コンテナの読み取りを完了します。

CloseContainer() メソッドは、OpenContainer() を呼び出した後に親の TLVReader オブジェクトの状態を復元します。OpenContainer() アプリケーションを呼び出すたびに、対応する CloseContainer() を呼び出して、両方のメソッドに同じコンテナ リーダーへの参照を渡す必要があります。

CloseContainer() が返されると、コンテナに続く最初の要素の直前に親リーダーが配置されます。この時点から、アプリは Next() メソッドを使用して残りの要素を進められるようになります。

アプリケーションは、基盤となるコンテナ内のすべての要素が読み取られたかどうかにかかわらず、いつでも親リーダーで closeCloseContainer()を呼び出すことができます。CloseContainer() が呼び出された後、アプリケーションはコンテナ リーダーが「初期化解除」されたと見なし、再初期化せずにそれ以上使用してはなりません。

詳細
パラメータ
[in] containerReader
OpenContainer() メソッドに指定された TLVReader オブジェクトへの参照。
戻り値
WEAVE_NO_ERROR
メソッドが成功したかどうか。
WEAVE_ERROR_INCORRECT_STATE
リーダーで OpenContainer() が呼び出されていない場合、またはコンテナ リーダーが OpenContainer() メソッドに渡されたものと一致しない場合。
WEAVE_ERROR_TLV_UNDERRUN
基盤となる TLV エンコードが途中で終了した場合。
WEAVE_ERROR_INVALID_TLV_ELEMENT
読者が、無効またはサポートされていない TLV 要素タイプを検出した場合。
WEAVE_ERROR_INVALID_TLV_TAG
読者が無効なコンテキストで TLV タグを検出した場合。
other
構成された GetNextBuffer() 関数によって返される、その他の Weave またはプラットフォームのエラーコード。GetNextBuffer が NULL でない場合にのみ可能です。

DupBytes

WEAVE_ERROR DupBytes(
  uint8_t *& buf,
  uint32_t & dataLen
)

現在のバイトまたは UTF8 文字列の値を格納するバッファを割り当てて返します。

このメソッドは、現在の位置にあるバイト要素または UTF-8 文字列要素に関連付けられたデータのコピーを返します。バッファのメモリは malloc() で取得し、不要になったら呼び出し元は free() で解放する必要があります。

詳細
パラメータ
[out] buf
成功時にヒープに割り当てられた dataLen バイトのバッファが割り当てられるポインタへの参照。
[out] dataLen
成功時の buf のサイズ(バイト単位)のストレージへの参照。
戻り値
WEAVE_NO_ERROR
メソッドが成功したかどうか。
WEAVE_ERROR_WRONG_TLV_TYPE
現在の要素が TLV バイトまたは UTF8 文字列でない場合、またはリーダーが要素上に配置されていない場合。
WEAVE_ERROR_NO_MEMORY
出力バッファにメモリを割り当てることができなかった場合。
WEAVE_ERROR_TLV_UNDERRUN
基盤となる TLV エンコードが途中で終了した場合。
WEAVE_ERROR_UNSUPPORTED_WEAVE_FEATURE
ターゲット プラットフォームが malloc() と free() をサポートしていない場合
other
構成された GetNextBuffer() 関数によって返される、その他の Weave またはプラットフォームのエラーコード。GetNextBuffer が NULL でない場合にのみ可能です。

DupString

WEAVE_ERROR DupString(
  char *& buf
)

現在のバイトまたは UTF8 文字列の null 終端値を格納するバッファを割り当てて返します。

このメソッドは、現在の位置にあるバイトまたは UTF-8 文字列要素に関連付けられたデータの null 終端コピーを返します。バッファのメモリは malloc() で取得し、不要になったら呼び出し元は free() で解放する必要があります。

詳細
パラメータ
[out] buf
成功時にヒープに割り当てられたバッファが割り当てられるポインタへの参照。
戻り値
WEAVE_NO_ERROR
メソッドが成功したかどうか。
WEAVE_ERROR_WRONG_TLV_TYPE
現在の要素が TLV バイトまたは UTF8 文字列でない場合、またはリーダーが要素上に配置されていない場合。
WEAVE_ERROR_NO_MEMORY
出力バッファにメモリを割り当てることができなかった場合。
WEAVE_ERROR_TLV_UNDERRUN
基盤となる TLV エンコードが途中で終了した場合。
WEAVE_ERROR_UNSUPPORTED_WEAVE_FEATURE
ターゲット プラットフォームが malloc() と free() をサポートしていない場合
other
構成された GetNextBuffer() 関数によって返される、その他の Weave またはプラットフォームのエラーコード。GetNextBuffer が NULL でない場合にのみ可能です。

EnterContainer

WEAVE_ERROR EnterContainer(
  TLVType & outerContainerType
)

TLV コンテナ要素のメンバーを読み取るための TLVReader オブジェクトを準備します。

EnterContainer() メソッドは、現在の TLVReader オブジェクトを準備して、TLV コンテナのメンバー要素(構造体、配列、またはパス)の読み取りを開始します。EnterContainer() アプリケーションを呼び出すたびに、対応する ExitContainer() 呼び出しを行う必要があります。

EnterContainer() が呼び出されたら、TLVReader オブジェクトを読み取り対象のコンテナ要素上に配置する必要があります。このメソッドは、コンテナの読み取り中にリーダーのコンテキストを保存するために使用される TLVType 値への参照を引数として受け取ります。

EnterContainer() メソッドが戻ると、リーダーはコンテナの最初のメンバーのに配置されます。Next() を繰り返し呼び出すと、リーダーはコレクションのメンバー間を進め、最後まで進み、その時点で、リーダーは WEAVE_END_OF_TLV を返します。

アプリケーションでコンテナの読み取りが完了したら、ExitContainer() メソッドを呼び出して、コンテナ以降の要素の読み取りを続行できます。

詳細
パラメータ
[out] outerContainerType
リーダーのコンテキストを受け取る TLVType 値への参照。
戻り値
WEAVE_NO_ERROR
メソッドが成功したかどうか。
WEAVE_ERROR_INCORRECT_STATE
現在の要素がコンテナ要素上に配置されていない場合。

ExitContainer

WEAVE_ERROR ExitContainer(
  TLVType outerContainerType
)

TLV コンテナの読み取りを完了し、コンテナの後の要素を読み取るように TLVReader オブジェクトを準備します。

ExitContainer() メソッドは、EnterContainer() の呼び出し後に TLVReader オブジェクトの状態を復元します。EnterContainer() アプリケーションを呼び出すたびに、対応する ExitContainer() を呼び出して、EnterContainer() メソッドから返されたコンテキスト値を渡す必要があります。

ExitContainer() が返されると、コンテナに続く最初の要素の直前にリーダーが配置されます。この時点から、アプリは Next() メソッドを使用して残りの要素を進められるようになります。

EnterContainer() が呼び出されると、基となるコンテナ内のすべての要素が読み取られたかどうかにかかわらず、アプリケーションはいつでもリーダーの ExitContainer() を呼び出すことができます。

詳細
パラメータ
[in] outerContainerType
EnterContainer() メソッドによって返された TLVType 値。
戻り値
WEAVE_NO_ERROR
メソッドが成功したかどうか。
WEAVE_ERROR_INCORRECT_STATE
リーダーで OpenContainer() が呼び出されていない場合、またはコンテナ リーダーが OpenContainer() メソッドに渡されたものと一致しない場合。
WEAVE_ERROR_TLV_UNDERRUN
基盤となる TLV エンコードが途中で終了した場合。
WEAVE_ERROR_INVALID_TLV_ELEMENT
読者が、無効またはサポートされていない TLV 要素タイプを検出した場合。
WEAVE_ERROR_INVALID_TLV_TAG
読者が無効なコンテキストで TLV タグを検出した場合。
other
構成された GetNextBuffer() 関数によって返される、その他の Weave またはプラットフォームのエラーコード。GetNextBuffer が NULL でない場合にのみ可能です。

Get

WEAVE_ERROR Get(
  bool & v
)

現在の要素の値をブール値として取得します。

詳細
パラメータ
[out] v
現在の TLV 要素に関連付けられている値を受け取ります。
戻り値
WEAVE_NO_ERROR
メソッドが成功したかどうか。
WEAVE_ERROR_WRONG_TLV_TYPE
現在の要素が TLV ブール値型でない場合、またはリーダーが要素上に配置されていない場合。

Get

WEAVE_ERROR Get(
  int8_t & v
)

現在の要素の値を 8 ビット符号付き整数として取得します。

エンコードされた整数値が出力データ型よりも大きい場合、結果の値は切り捨てられます。

詳細
パラメータ
[out] v
現在の TLV 要素に関連付けられている値を受け取ります。
戻り値
WEAVE_NO_ERROR
メソッドが成功したかどうか。
WEAVE_ERROR_WRONG_TLV_TYPE
現在の要素が TLV 整数型(符号付きまたは符号なし)でない場合、またはリーダーが要素上に配置されていない場合。

Get

WEAVE_ERROR Get(
  int16_t & v
)

現在の要素の値を 16 ビット符号付き整数として取得します。

エンコードされた整数値が出力データ型よりも大きい場合、結果の値は切り捨てられます。

詳細
パラメータ
[out] v
現在の TLV 要素に関連付けられている値を受け取ります。
戻り値
WEAVE_NO_ERROR
メソッドが成功したかどうか。
WEAVE_ERROR_WRONG_TLV_TYPE
現在の要素が TLV 整数型(符号付きまたは符号なし)でない場合、またはリーダーが要素上に配置されていない場合。

Get

WEAVE_ERROR Get(
  int32_t & v
)

現在の要素の値を 32 ビット符号付き整数として取得します。

エンコードされた整数値が出力データ型よりも大きい場合、結果の値は切り捨てられます。

詳細
パラメータ
[out] v
現在の TLV 要素に関連付けられている値を受け取ります。
戻り値
WEAVE_NO_ERROR
メソッドが成功したかどうか。
WEAVE_ERROR_WRONG_TLV_TYPE
現在の要素が TLV 整数型(符号付きまたは符号なし)でない場合、またはリーダーが要素上に配置されていない場合。

Get

WEAVE_ERROR Get(
  int64_t & v
)

現在の要素の値を 64 ビット符号付き整数として取得します。

エンコードされた整数値が出力データ型よりも大きい場合、結果の値は切り捨てられます。

詳細
パラメータ
[out] v
現在の TLV 要素に関連付けられている値を受け取ります。
戻り値
WEAVE_NO_ERROR
メソッドが成功したかどうか。
WEAVE_ERROR_WRONG_TLV_TYPE
現在の要素が TLV 整数型(符号付きまたは符号なし)でない場合、またはリーダーが要素上に配置されていない場合。

Get

WEAVE_ERROR Get(
  uint8_t & v
)

現在の要素の値を 8 ビット符号なし整数として取得します。

エンコードされた整数値が出力データ型よりも大きい場合、結果の値は切り捨てられます。同様に、エンコードされた整数値が負の場合、値は符号なしに変換されます。

詳細
パラメータ
[out] v
現在の TLV 要素に関連付けられている値を受け取ります。
戻り値
WEAVE_NO_ERROR
メソッドが成功したかどうか。
WEAVE_ERROR_WRONG_TLV_TYPE
現在の要素が TLV 整数型(符号付きまたは符号なし)でない場合、またはリーダーが要素上に配置されていない場合。

Get

WEAVE_ERROR Get(
  uint16_t & v
)

現在の要素の値を 16 ビット符号なし整数として取得します。

エンコードされた整数値が出力データ型よりも大きい場合、結果の値は切り捨てられます。同様に、エンコードされた整数値が負の場合、値は符号なしに変換されます。

詳細
パラメータ
[out] v
現在の TLV 要素に関連付けられている値を受け取ります。
戻り値
WEAVE_NO_ERROR
メソッドが成功したかどうか。
WEAVE_ERROR_WRONG_TLV_TYPE
現在の要素が TLV 整数型(符号付きまたは符号なし)でない場合、またはリーダーが要素上に配置されていない場合。

Get

WEAVE_ERROR Get(
  uint32_t & v
)

現在の要素の値を 32 ビット符号なし整数として取得します。

エンコードされた整数値が出力データ型よりも大きい場合、結果の値は切り捨てられます。同様に、エンコードされた整数値が負の場合、値は符号なしに変換されます。

詳細
パラメータ
[out] v
現在の TLV 要素に関連付けられている値を受け取ります。
戻り値
WEAVE_NO_ERROR
メソッドが成功したかどうか。
WEAVE_ERROR_WRONG_TLV_TYPE
現在の要素が TLV 整数型(符号付きまたは符号なし)でない場合、またはリーダーが要素上に配置されていない場合。

Get

WEAVE_ERROR Get(
  uint64_t & v
)

現在の要素の値を 64 ビット符号なし整数として取得します。

エンコードされた整数値が負の場合、値は符号なしに変換されます。

詳細
パラメータ
[out] v
現在の TLV 要素に関連付けられている値を受け取ります。
戻り値
WEAVE_NO_ERROR
メソッドが成功したかどうか。
WEAVE_ERROR_WRONG_TLV_TYPE
現在の要素が TLV 整数型(符号付きまたは符号なし)でない場合、またはリーダーが要素上に配置されていない場合。

Get

WEAVE_ERROR Get(
  float & v
)

Get

WEAVE_ERROR Get(
  double & v
)

現在の要素の値を倍精度浮動小数点数として取得します。

詳細
パラメータ
[out] v
現在の TLV 要素に関連付けられている値を受け取ります。
戻り値
WEAVE_NO_ERROR
メソッドが成功したかどうか。
WEAVE_ERROR_WRONG_TLV_TYPE
現在の要素が TLV 浮動小数点型でない場合、またはリーダーが要素上に配置されていない場合。

GetBufHandle

uintptr_t GetBufHandle(
  void
) const 

GetBytes

WEAVE_ERROR GetBytes(
  uint8_t *buf,
  uint32_t bufSize
)

現在のバイトまたは UTF8 文字列要素の値を取得します。

必要な入力バッファサイズを決定するには、GetBytes() を呼び出す前に GetLength() メソッドを呼び出します。

詳細
パラメータ
[in] buf
文字列データを受け取るバッファへのポインタ。
[in] bufSize
buf がポイントするバッファのサイズ(バイト単位)。
戻り値
WEAVE_NO_ERROR
メソッドが成功したかどうか。
WEAVE_ERROR_WRONG_TLV_TYPE
現在の要素が TLV バイトまたは UTF8 文字列でない場合、またはリーダーが要素上に配置されていない場合。
WEAVE_ERROR_BUFFER_TOO_SMALL
指定されたバッファが小さすぎて、現在の要素に関連付けられているデータを保持できない場合。
WEAVE_ERROR_TLV_UNDERRUN
基盤となる TLV エンコードが途中で終了した場合。
other
構成された GetNextBuffer() 関数によって返される、その他の Weave またはプラットフォームのエラーコード。GetNextBuffer が NULL でない場合にのみ可能です。

GetContainerType

TLVType GetContainerType(
  void
) const 

TLVReader が現在読み取っているコンテナのタイプを返します。

GetContainerType() メソッドは、TLVReader が読み取っている TLV コンテナのタイプを返します。TLVReaderTLV エンコードの最も外側のレベル(最も外側の TLV 要素の前、上、後)に存在する場合、メソッドは kTLVType_NotSpecified を返します。

詳細
戻り値
現在のコンテナの TLVType、または TLVReader がコンテナ内に配置されていない場合は kTLVType_NotSpecified。

GetControlByte

uint16_t GetControlByte(
  void
) const 

現在の TLV 要素に関連付けられている制御バイトを返します。

理想的には、誰も制御バイトについて知る必要はなく、TLV の内部実装のみが制御バイトにアクセスできるようにする必要があります。ただし、コントロール バイトにアクセスできることは、TLVデバッグユーティリティTLV バッファの内容をプリティ プリントする際にタグ コントロール バイトのデコードを試みる)によるデバッグに役立ちます。

詳細
戻り値
現在の TLV 要素に関連付けられている制御バイトを含む符号なし整数。リーダーが要素上に配置されていない場合は、kTLVControlByte_NotSpecified が返されます。

GetDataPtr

WEAVE_ERROR GetDataPtr(
  const uint8_t *& data
)

TLV バイトまたは UTF8 文字列要素の、最初にエンコードされたバイトへのポインタを取得します。

このメソッドは、基になる入力バッファ内のエンコードされた文字列値をダイレクト ポインタで返します。このメソッドが成功するには、文字列値全体が 1 つのバッファに存在する必要があります。そうでない場合、メソッドは WEAVE_ERROR_TLV_UNDERRUN を返します。そのため、隣接しない複数のバッファからデータを読み取る際に、メソッドの使用が制限されます。

詳細
パラメータ
[out] data
基となる文字列データへのポインタを受け取る定数ポインタへの参照。
戻り値
WEAVE_NO_ERROR
メソッドが成功したかどうか。
WEAVE_ERROR_WRONG_TLV_TYPE
現在の要素が TLV バイトまたは UTF8 文字列でない場合、またはリーダーが要素上に配置されていない場合。
WEAVE_ERROR_TLV_UNDERRUN
基になる TLV エンコードが途中で終了したか、現在の文字列要素の値が単一の連続したバッファに含まれていない場合。
other
構成された GetNextBuffer() 関数によって返される、その他の Weave またはプラットフォームのエラーコード。GetNextBuffer が NULL でない場合にのみ可能です。

GetLength

uint32_t GetLength(
  void
) const 

現在の TLV 要素に関連付けられているデータの長さを返します。

データ長は、UTF8 文字列またはバイト文字列型の要素にのみ適用されます。UTF8 文字列の場合、返される値は文字数ではなく、文字列のバイト数です。

詳細
戻り値
現在の TLV 要素に関連付けられているデータの長さ(バイト単位)。現在の要素が UTF8 文字列またはバイト文字列でない場合、またはリーダーが要素上に配置されていない場合は 0。

GetLengthRead

uint32_t GetLengthRead(
  void
) const 

リーダーの初期化以降に読み取られたバイト数の合計を返します。

詳細
戻り値
リーダーの初期化後に読み取られた合計バイト数。

GetReadPoint

const uint8_t * GetReadPoint(
  void
) const 

リーダーの現在の位置に対応する、基になる入力バッファ内のポイントを取得します。

詳細
戻り値
リーダーの現在の位置に対応する基盤となる入力バッファへのポインタ。

GetRemainingLength

uint32_t GetRemainingLength(
  void
) const 

最大読み取り長に達するまで読み取り可能なバイト数の合計を返します。

詳細
戻り値
最大読み取り長に達するまでに読み取り可能なバイト数の合計。

GetString

WEAVE_ERROR GetString(
  char *buf,
  uint32_t bufSize
)

現在のバイトまたは UTF8 文字列要素の値を、null 終端文字列として取得します。

必要な入力バッファサイズを決定するには、GetBytes() を呼び出す前に GetLength() メソッドを呼び出します。入力バッファは、null 文字に対応するため、文字列長より 1 バイト以上大きくする必要があります。

詳細
パラメータ
[in] buf
バイト文字列データを受け取るバッファへのポインタ。
[in] bufSize
buf がポイントするバッファのサイズ(バイト単位)。
戻り値
WEAVE_NO_ERROR
メソッドが成功したかどうか。
WEAVE_ERROR_WRONG_TLV_TYPE
現在の要素が TLV バイトまたは UTF8 文字列でない場合、またはリーダーが要素上に配置されていない場合。
WEAVE_ERROR_BUFFER_TOO_SMALL
指定されたバッファが小さすぎて、現在の要素に関連付けられているデータを保持できない場合。
WEAVE_ERROR_TLV_UNDERRUN
基盤となる TLV エンコードが途中で終了した場合。
other
構成された GetNextBuffer() 関数によって返される、その他の Weave またはプラットフォームのエラーコード。GetNextBuffer が NULL でない場合にのみ可能です。

GetTag

uint64_t GetTag(
  void
) const 

現在の TLV 要素に関連付けられているタグを返します。

GetTag() から返された値をタグ ユーティリティ関数(IsProfileTag()IsContextTag()ProfileIdFromTag() など)とともに使用して、タグのタイプを判別し、さまざまなタグ フィールド値を抽出することができます。

詳細
戻り値
現在の TLV 要素に関連付けられているタグに関する情報を含む符号なし整数。

GetType

TLVType GetType(
  void
) const 

現在の TLV 要素のタイプを返します。

詳細
戻り値
現在の TLV 要素のデータ型を表す TLVType 値。リーダーが TLV 要素に配置されていない場合、戻り値は kTLVType_NotSpecified になります。

init

void Init(
  const TLVReader & aReader
)

別の TLVReader オブジェクトから TLVReader オブジェクトを初期化します。

詳細
パラメータ
[in] aReader
初期化元の TLVReader への読み取り専用参照。

init

void Init(
  const uint8_t *data,
  uint32_t dataLen
)

単一の入力バッファから読み取る TLVReader オブジェクトを初期化します。

詳細
パラメータ
[in] data
解析される TLV データを含むバッファへのポインタ。
[in] dataLen
解析される TLV データの長さ。

init

void Init(
  PacketBuffer *buf,
  uint32_t maxLen
)

単一の PacketBuffer から読み取るように TLVReader オブジェクトを初期化します。

解析はバッファの開始位置(buf->DataStart())から始まり、バッファ内のデータの終わり(buf->Datalen() で示される)まで、または maxLen バイトが解析されるまで継続します。

詳細
パラメータ
[in] buf
解析される TLV データを含む PacketBuffer へのポインタ。
[in] maxLen
解析する最大バイト数。デフォルトは、入力バッファ内のデータ量です。

init

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

1 つ以上の PacketBuffers から読み取るように TLVReader オブジェクトを初期化します。

解析は初期バッファの開始位置(buf->DataStart())から始まります。allowDiscontiguousBuffers が true の場合、リーダーは Next() ポインタによってリンクされたバッファのチェーンを進めます。解析は、バッファ チェーン内のすべてのデータが消費される(buf->Datalen() で示される)か、maxLen のバイト数が解析されるまで継続します。

詳細
パラメータ
[in] buf
解析される TLV データを含む PacketBuffer へのポインタ。
[in] maxLen
解析する最大バイト数。デフォルトは、入力バッファ チェーン内のデータ量の合計です。
[in] allowDiscontiguousBuffers
true の場合、現在のバッファ内のすべてのデータが消費されると、チェーンの次のバッファに進みます。false の場合、初期バッファの最後で解析を停止します。

次へ

WEAVE_ERROR Next(
  void
)

TLVReader オブジェクトを、次に読み取る TLV 要素に移動します。

Next() メソッドは、同じ包含コンテキストに存在する TLV エンコードの次の要素にリーダー オブジェクトを配置します。特に、リーダーが TLV エンコードの最も外側にあるレベルにある場合、Next() を呼び出すと、リーダーは次の最上位の要素に進みます。リーダーが TLV コンテナ要素(構造体、配列、またはパス)内にある場合、Next() を呼び出すと、リーダーはコンテナの次のメンバー要素に進みます。

Next() は、リーダーの動きを現在のコンテインメント コンテキストに制限するため、リーダーがコンテナ要素上に置かれたときに Next() を呼び出すと、コンテナの上に移動し、コンテナ後の最初の要素に到達するまでメンバー要素(およびネストされたコンテナのメンバー)はスキップされます。

特定の包含コンテキスト内にそれ以上要素がない場合、Next() メソッドは WEAVE_END_OF_TLV エラーを返し、リーダーの位置は変更されません。

詳細
戻り値
WEAVE_NO_ERROR
リーダーが新しい要素上に配置されたかどうか。
WEAVE_END_OF_TLV
他の要素が利用できない場合。
WEAVE_ERROR_TLV_UNDERRUN
基盤となる TLV エンコードが途中で終了した場合。
WEAVE_ERROR_INVALID_TLV_ELEMENT
読者が、無効またはサポートされていない TLV 要素タイプを検出した場合。
WEAVE_ERROR_INVALID_TLV_TAG
読者が無効なコンテキストで TLV タグを検出した場合。
WEAVE_ERROR_UNKNOWN_IMPLICIT_TLV_TAG
対応するプロファイル ID が不明な、暗黙的にエンコードされた TLV タグがリーダーに表示された場合。
other
構成された GetNextBuffer() 関数によって返される、その他の Weave またはプラットフォームのエラーコード。GetNextBuffer が NULL でない場合にのみ可能です。

次へ

WEAVE_ERROR Next(
  TLVType expectedType,
  uint64_t expectedTag
)

TLVReader オブジェクトを次に読み取る TLV 要素に進み、新しい要素のタイプとタグをアサートします。

Next(TLVTypeexpectedType, uint64_texpectedTag) メソッドは、Next() と同じ動作をする便利なメソッドですが、新しい TLV 要素の型とタグが指定された引数と一致することも検証します。

詳細
パラメータ
[in] expectedType
次の要素で想定されるデータ型。
[in] expectedTag
次の要素に想定されるタグ。
戻り値
WEAVE_NO_ERROR
リーダーが新しい要素上に配置されたかどうか。
WEAVE_END_OF_TLV
他の要素が利用できない場合。
WEAVE_ERROR_WRONG_TLV_TYPE
新しい要素の型が expectedType 引数の値と一致しない場合。
WEAVE_ERROR_UNEXPECTED_TLV_ELEMENT
新しい要素に関連付けられたタグが、expectedTag 引数の値と一致しない場合。
WEAVE_ERROR_TLV_UNDERRUN
基盤となる TLV エンコードが途中で終了した場合。
WEAVE_ERROR_INVALID_TLV_ELEMENT
読者が、無効またはサポートされていない TLV 要素タイプを検出した場合。
WEAVE_ERROR_INVALID_TLV_TAG
読者が無効なコンテキストで TLV タグを検出した場合。
other
構成された GetNextBuffer() 関数によって返される、その他の Weave またはプラットフォームのエラーコード。GetNextBuffer が NULL でない場合にのみ可能です。

OpenContainer

WEAVE_ERROR OpenContainer(
  TLVReader & containerReader
)

TLV コンテナ要素のメンバーを読み取るために、新しい TLVReader オブジェクトを初期化します。

OpenContainer() メソッドは、TLV コンテナのメンバー要素(構造体、配列、またはパス)を読み取るために、新しい TLVReader オブジェクトを初期化します。OpenContainer() が呼び出されたら、現在の TLVReader オブジェクトを読み取り対象のコンテナ要素上に配置する必要があります。このメソッドは、コンテナを読み取るために初期化される新しいリーダーへの参照を唯一の引数として受け取ります。このリーダーはコンテナ リーダーと呼ばれ、OpenContainer() が呼び出されるリーダーは親リーダーと呼ばれます。

OpenContainer() メソッドが返されると、コンテナ リーダーがコンテナの最初のメンバーの直前に配置されます。コンテナ リーダーで Next() を呼び出すと、最後までコレクションのメンバー間が進み、最後まで進み、その時点でリーダーは WEAVE_END_OF_TLV を返します。

コンテナ リーダーが開いている間、アプリケーションは親リーダーの状態を呼び出したり、状態を変更したりしてはなりません。アプリケーションでコンテナ リーダーの使用が終了したら、親リーダーで CloseContainer() を呼び出し、コンテナ リーダーを引数として渡してアプリを閉じる必要があります。アプリケーションは、基盤となるコンテナに含まれるすべての要素を読み取ったりしなくても、任意の時点でコンテナ リーダーを閉じることができます。コンテナ リーダーを閉じた後も、アプリケーションは親リーダーを引き続き使用できます。

コンテナ リーダーは、親リーダーからさまざまな構成プロパティを継承します。わかっています。

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

詳細
パラメータ
[out] containerReader
現在のコンテナ要素のメンバーを読み取るために初期化される TLVReader オブジェクトへの参照。指定したオブジェクトに関連付けられているデータはすべて上書きされます。
戻り値
WEAVE_NO_ERROR
メソッドが成功したかどうか。
WEAVE_ERROR_INCORRECT_STATE
現在の要素がコンテナ要素上に配置されていない場合。

スキップ

WEAVE_ERROR Skip(
  void
)

TLVReader オブジェクトを現在の TLV 要素の直後に移動します。

Skip() メソッドは、現在の TLV 要素の直後にリーダー オブジェクトを配置して、その後の Next() の呼び出しでリーダーを次の要素に進めるようにします。Next() と同様に、呼び出しの時点でリーダーがコンテナ要素に配置されていた場合、コンテナのメンバーはスキップされます。リーダーがどの要素にも配置されていない場合、その位置は変更されません。

詳細
戻り値
WEAVE_NO_ERROR
リーダーが新しい要素上に配置されたかどうか。
WEAVE_END_OF_TLV
他の要素が利用できない場合。
WEAVE_ERROR_TLV_UNDERRUN
基盤となる TLV エンコードが途中で終了した場合。
WEAVE_ERROR_INVALID_TLV_ELEMENT
読者が、無効またはサポートされていない TLV 要素タイプを検出した場合。
WEAVE_ERROR_INVALID_TLV_TAG
読者が無効なコンテキストで TLV タグを検出した場合。
other
構成された GetNextBuffer() 関数によって返される、その他の Weave またはプラットフォームのエラーコード。GetNextBuffer が NULL でない場合にのみ可能です。

VerifyEndOfContainer

WEAVE_ERROR VerifyEndOfContainer(
  void
)

TVLReader オブジェクトが TLV コンテナの最後にあることを確認します。

VerifyEndOfContainer() メソッドは、現在の TLV コンテナ内に読み取る対象となる TLV 要素がないことを検証します。これは、Next() を呼び出して WEAVE_END_OF_TLV の戻り値を確認するのと同等の便利なメソッドです。

詳細
戻り値
WEAVE_NO_ERROR
読み取る TLV 要素がそれ以上ない場合。
WEAVE_ERROR_UNEXPECTED_TLV_ELEMENT
コレクションで別の TLV 要素が見つかったかどうか。
WEAVE_ERROR_TLV_UNDERRUN
基盤となる TLV エンコードが途中で終了した場合。
WEAVE_ERROR_INVALID_TLV_ELEMENT
読者が、無効またはサポートされていない TLV 要素タイプを検出した場合。
WEAVE_ERROR_INVALID_TLV_TAG
読者が無効なコンテキストで TLV タグを検出した場合。
other
構成された GetNextBuffer() 関数によって返される、その他の Weave またはプラットフォームのエラーコード。GetNextBuffer が NULL でない場合にのみ可能です。

プロテクト関数

ClearElementState

void ClearElementState(
  void
)

TLVReader の状態をクリアします。

このメソッドは、最初の TLV の前、TLV の間、または最後の TLV の後に、リーダーを配置するために使用されます。

ElementType

TLVElementType ElementType(
  void
) const 

これは、mControlByte から TLVElementType を返すプライベート メソッドです。

EnsureData

WEAVE_ERROR EnsureData(
  WEAVE_ERROR noDataErr
)

GetElementHeadLength

WEAVE_ERROR GetElementHeadLength(
  uint8_t & elemHeadBytes
) const 

これは、TLV 要素ヘッドの長さを計算するために使用される非公開のメソッドです。

IsContainerOpen

bool IsContainerOpen(
  void
) const 

ReadData

WEAVE_ERROR ReadData(
  uint8_t *buf,
  uint32_t len
)

ReadElement

WEAVE_ERROR ReadElement(
  void
)

ReadTag

uint64_t ReadTag(
  TLVTagControl tagControl,
  const uint8_t *& p
)

SetContainerOpen

void SetContainerOpen(
  bool aContainerOpen
)

SkipData

WEAVE_ERROR SkipData(
  void
)

現在の TLV に含まれるデータを、宛先バッファなしで読み取ってスキップします。

詳細
戻り値
WEAVE_NO_ERROR
リーダーがデータの最後に正しく配置されたかどうか。
other
構成された GetNextBuffer() 関数によって返される、その他の Weave またはプラットフォームのエラーコード。GetNextBuffer が NULL でない場合にのみ可能です。

SkipToEndOfContainer

WEAVE_ERROR SkipToEndOfContainer(
  void
)

VerifyElement

WEAVE_ERROR VerifyElement(
  void
)

保護された静的関数

FailGetNextBuffer

WEAVE_ERROR FailGetNextBuffer(
  TLVReader & reader,
  uintptr_t & bufHandle,
  const uint8_t *& bufStart,
  uint32_t & bufLen
)

GetNextPacketBuffer

WEAVE_ERROR GetNextPacketBuffer(
  TLVReader & reader,
  uintptr_t & bufHandle,
  const uint8_t *& bufStart,
  uint32_t & bufLen
)