nl:: Weave:: TLV:: TLVUpdater
#include <src/lib/core/WeaveTLV.h>
TLV エンコードの要素を編集、追加、削除するための統合されたリーダー / ライター インターフェースを提供します。
概要
TLVUpdater は TLVReader オブジェクトと TLVWriter オブジェクトを組み合わせたもので、エンコード内のデータを編集、削除したり、TLV エンコードに新しい要素を追加するためのインターフェース メソッドを提供します。TLVUpdater オブジェクトは基本的に 2 つのカーソルのように動作します。1 つは既存のエンコードの読み取り用、もう 1 つは書き込み用(既存のデータのコピーまたは新しいデータの書き込み用)です。
意味的には、TLVUpdater オブジェクトは TLVReader と TLVWriter を組み合わせたもののように機能します。TLVUpdater メソッドは、TLVReader/TLVWriter 内の類似した名前のメソッドと、ほぼ同様の意味を持ちます。セマンティクスに違いがある場合は、WeaveTLVUpdater.cpp の関数のコメント セクションにその違いが明確に記載されています。
TLVUpdater の PutBytes() メソッドと PutString() メソッドに関する特に重要な注意事項の 1 つは、オーバーフローが発生したときに要素ヘッダーのみが書き込まれ、エンコードが破損した状態になる可能性があることです。アプリケーションで GetRemainingFreeLength() を呼び出すと、エンコードを書き込めるのに十分な空き容量があることを確認できます。GetRemainingFreeLength() は利用可能な空きバイトを示すだけであり、書き込まれたエンコード データの長さをアプリケーションが知る方法はないことに注意してください。オーバーフローが発生した場合、PutBytes() と PutString() の両方が呼び出し元に WEAVE_ERROR_BUFFER_TOO_SMALL を返します。
また、Next() メソッドは、現在の要素をスキップし、内部リーダーを次の要素に進めるためにオーバーロードされています。すでにエンコードされた要素をスキップするには、内部ライターの空き状態変数を変更して新しい解放されたスペース(スキップすることによって可能になる)に対応する必要があるため、アプリケーションは書き戻したくない値の Get() メソッドの後に、アップデータで Next() を呼び出すことが想定されます(これは現在の要素のスキップと同じです)。
で確認できます。
パブリック関数 |
|
---|---|
CopyElement(TLVReader & reader)
|
|
CopyElement(uint64_t tag, TLVReader & reader)
|
|
DupBytes(uint8_t *& buf, uint32_t & dataLen)
|
|
DupString(char *& buf)
|
|
EndContainer(TLVType outerContainerType)
|
|
EnterContainer(TLVType & outerContainerType)
|
コンテナの要素を読み取るための TLVUpdater オブジェクトを準備します。
|
ExitContainer(TLVType outerContainerType)
|
|
Finalize(void)
|
|
Get(bool & v)
|
|
Get(int8_t & v)
|
|
Get(int16_t & v)
|
|
Get(int32_t & v)
|
|
Get(int64_t & v)
|
|
Get(uint8_t & v)
|
|
Get(uint16_t & v)
|
|
Get(uint32_t & v)
|
|
Get(uint64_t & v)
|
|
Get(float & v)
|
|
Get(double & v)
|
|
GetBytes(uint8_t *buf, uint32_t bufSize)
|
|
GetContainerType(void) const
|
|
GetDataPtr(const uint8_t *& data)
|
|
GetImplicitProfileId(void)
|
uint32_t
|
GetLength(void) const
|
uint32_t
|
GetLengthRead(void) const
|
uint32_t
|
GetLengthWritten(void)
|
uint32_t
|
GetReader(TLVReader & containerReader)
|
void
|
GetRemainingFreeLength(void)
|
uint32_t
|
GetRemainingLength(void) const
|
uint32_t
|
GetString(char *buf, uint32_t bufSize)
|
|
GetTag(void) const
|
uint64_t
|
GetType(void) const
|
|
Init(uint8_t *buf, uint32_t dataLen, uint32_t maxLen)
|
単一の入力バッファを編集するには、TLVUpdater オブジェクトを初期化します。
|
Init(TLVReader & aReader, uint32_t freeLen)
|
TLVReader を使用して TLVUpdater オブジェクトを初期化します。
|
Move(void)
|
|
MoveUntilEnd(void)
|
void
TLVUpdater の現在の読み取りポイントから入力 TLV バッファの終わりまでのすべてを出力に移動します。
|
Next(void)
|
現在の要素をスキップして、TLVUpdater オブジェクトを入力 TLV の次の要素まで進めます。
|
Put(uint64_t tag, int8_t v)
|
|
Put(uint64_t tag, int16_t v)
|
|
Put(uint64_t tag, int32_t v)
|
|
Put(uint64_t tag, int64_t v)
|
|
Put(uint64_t tag, uint8_t v)
|
|
Put(uint64_t tag, uint16_t v)
|
|
Put(uint64_t tag, uint32_t v)
|
|
Put(uint64_t tag, uint64_t v)
|
|
Put(uint64_t tag, int8_t v, bool preserveSize)
|
|
Put(uint64_t tag, int16_t v, bool preserveSize)
|
|
Put(uint64_t tag, int32_t v, bool preserveSize)
|
|
Put(uint64_t tag, int64_t v, bool preserveSize)
|
|
Put(uint64_t tag, uint8_t v, bool preserveSize)
|
|
Put(uint64_t tag, uint16_t v, bool preserveSize)
|
|
Put(uint64_t tag, uint32_t v, bool preserveSize)
|
|
Put(uint64_t tag, uint64_t v, bool preserveSize)
|
|
Put(uint64_t tag, float v)
|
|
Put(uint64_t tag, double v)
|
|
PutBoolean(uint64_t tag, bool v)
|
|
PutBytes(uint64_t tag, const uint8_t *buf, uint32_t len)
|
|
PutNull(uint64_t tag)
|
|
PutString(uint64_t tag, const char *buf)
|
|
PutString(uint64_t tag, const char *buf, uint32_t len)
|
|
SetImplicitProfileId(uint32_t profileId)
|
void
TLVUpdater オブジェクトに暗黙的なプロファイル ID を設定します。
|
StartContainer(uint64_t tag, TLVType containerType, TLVType & outerContainerType)
|
|
VerifyEndOfContainer(void)
|
パブリック関数
CopyElement
WEAVE_ERROR CopyElement( TLVReader & reader )
CopyElement
WEAVE_ERROR CopyElement( uint64_t tag, TLVReader & reader )
DupBytes
WEAVE_ERROR DupBytes( uint8_t *& buf, uint32_t & dataLen )
DupString
WEAVE_ERROR DupString( char *& buf )
EndContainer
WEAVE_ERROR EndContainer( TLVType outerContainerType )
EnterContainer
WEAVE_ERROR EnterContainer( TLVType & outerContainerType )
コンテナの要素を読み取るための TLVUpdater オブジェクトを準備します。
また、出力 TLV 内のコンテナ オブジェクトの開始をエンコードします。
EnterContainer() メソッドは、現在の TLVUpdater オブジェクトを準備し、TLV コンテナのメンバー要素(構造、配列、パス)の読み取りを開始します。アプリケーションは、EnterContainer() を呼び出すたびに ExitContainer() を呼び出す必要があります。
EnterContainer() が呼び出されたら、TLVUpdater のリーダーをコンテナ要素上に配置する必要があります。このメソッドは、TLVType 値への参照を引数として受け取ります。TLVType 値は、コンテナの読み込み中にアップデータに関するコンテキストを保存するために使用されます。
EnterContainer() メソッドが戻ると、アップデータはコンテナの最初のメンバーの直前に配置されます。Next() を繰り返し呼び出すと、コレクションのメンバーが最後まで進み、最後に WEAVE_END_OF_TLV が返されます。
アプリケーションがコンテナの読み取りを完了したら、ExitContainer() メソッドを呼び出して、コンテナの後で要素の読み取りを続行できます。
詳細 | |||||||
---|---|---|---|---|---|---|---|
パラメータ |
|
||||||
戻り値 |
|
ExitContainer
WEAVE_ERROR ExitContainer( TLVType outerContainerType )
TLV コンテナ要素の読み取りを完了し、出力 TLV で TLV 要素の末尾をエンコードします。
ExitContainer() メソッドは、EnterContainer() の呼び出し後に TLVUpdater オブジェクトの状態を復元します。EnterContainer() を呼び出すたびに、アプリケーションは ExitContainer() に対応する呼び出しを行い、EnterContainer() メソッドから返されたコンテキスト値を渡す必要があります。
ExitContainer() が返されると、TLVUpdater リーダーは入力 TLV 内のコンテナに続く最初の要素の直前に配置されます。この時点から、アプリケーションは Next() を呼び出して、残りの要素を進めることができます。
EnterContainer() が呼び出されると、基盤となるコンテナ内のすべての要素が読み取られたかどうかに関係なく、アプリケーションは任意の時点でアップデータで ExitContainer() を呼び出すことができます。また、コンテナ内のすべての要素を読み取る前に ExitContainer() を呼び出すと、更新されたコンテナが出力 TLV で切り捨てられることに注意してください。
詳細 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
パラメータ |
|
||||||||||
戻り値 |
|
完了
WEAVE_ERROR Finalize( void )
Get
WEAVE_ERROR Get( bool & v )
Get
WEAVE_ERROR Get( int8_t & v )
Get
WEAVE_ERROR Get( int16_t & v )
Get
WEAVE_ERROR Get( int32_t & v )
Get
WEAVE_ERROR Get( int64_t & v )
Get
WEAVE_ERROR Get( uint8_t & v )
Get
WEAVE_ERROR Get( uint16_t & v )
Get
WEAVE_ERROR Get( uint32_t & v )
Get
WEAVE_ERROR Get( uint64_t & v )
Get
WEAVE_ERROR Get( float & v )
Get
WEAVE_ERROR Get( double & v )
GetBytes
WEAVE_ERROR GetBytes( uint8_t *buf, uint32_t bufSize )
GetContainerType
TLVType GetContainerType( void ) const
GetDataPtr
WEAVE_ERROR GetDataPtr( const uint8_t *& data )
GetImplicitProfileId
uint32_t GetImplicitProfileId( void )
GetLength
uint32_t GetLength( void ) const
GetLengthRead
uint32_t GetLengthRead( void ) const
GetLengthWritten
uint32_t GetLengthWritten( void )
GetReader
void GetReader( TLVReader & containerReader )
GetRemainingFreeLength
uint32_t GetRemainingFreeLength( void )
GetRemainingLength
uint32_t GetRemainingLength( void ) const
GetString
WEAVE_ERROR GetString( char *buf, uint32_t bufSize )
GetTag
uint64_t GetTag( void ) const
GetType
TLVType GetType( void ) const
init
WEAVE_ERROR Init( uint8_t *buf, uint32_t dataLen, uint32_t maxLen )
単一の入力バッファを編集するには、TLVUpdater オブジェクトを初期化します。
このメソッドを呼び出すと、バッファ内の TLV データがバッファの最後に移動され、この再配置されたバッファでプライベート TLVReader オブジェクトが初期化されます。プライベートの TLVWriter オブジェクトも、最初に使用可能な空き領域で初期化されます。アプリケーションは、TLVUpdater オブジェクトを使用して TLV データを解析し、既存の要素を変更/削除したり、エンコードに新しい要素を追加したりできます。
詳細 | |||||||
---|---|---|---|---|---|---|---|
パラメータ |
|
||||||
戻り値 |
|
init
WEAVE_ERROR Init( TLVReader & aReader, uint32_t freeLen )
TLVReader を使用して TLVUpdater オブジェクトを初期化します。
このメソッドを呼び出すと、TLVReader が指すバッファ内の TLV データが現在の読み取りポイントからバッファの終わりに移動します。新しいプライベート TLVReader オブジェクトがこの新しい場所から読み取るように初期化され、新しいプライベート TLVWriter オブジェクトが初期化され、解放されたバッファ領域に書き込まれます。
TLVReader がすでに「on」になっている場合は、その要素がある場合、まずその要素の先頭までバックオフされます。また、このバックオフはコンテナ要素ではうまく機能します。つまり、TLVReader がすでに EnterContainer() の呼び出しに使用されていた場合、バックオフの対象はありません。ただし、TLVReader がコンテナ要素上に配置されていて、EnterContainer() がまだ呼び出されていない場合、TLVReader オブジェクトはコンテナヘッドの先頭にバックオフされます。
入力 TLVReader オブジェクトは、返される前に破棄されます。戻り時に、アプリケーションはこのオブジェクトを使用してはなりません。
詳細 | |||||||
---|---|---|---|---|---|---|---|
パラメータ |
|
||||||
戻り値 |
|
移動
WEAVE_ERROR Move( void )
現在の要素を入力 TLV から出力 TLV にコピーします。
Move() メソッドは、TLVUpdater のリーダーが配置されている現在の要素を TLVUpdater のライターにコピーします。このメソッドを呼び出す前に、アプリは Next() を呼び出して TLVUpdater のリーダーを要素に配置する必要があります。TLVReader::Next() メソッドと同様に、呼び出し時にリーダーがコンテナ要素にある場合、コンテナのすべてのメンバーがコピーされます。リーダーがどの要素にも配置されていない場合は、このメソッドを呼び出しても何も変わりません。
詳細 | |||||||||
---|---|---|---|---|---|---|---|---|---|
戻り値 |
|
MoveUntilEnd
void MoveUntilEnd( void )
TLVUpdater の現在の読み取りポイントから入力 TLV バッファの終わりまでのすべてを出力に移動します。
このメソッドでは、TLVUpdater の現在の読み取りポイントからリーダー バッファの最後までまでのすべてを、TLVUpdater のライターに移動できます。
次へ
WEAVE_ERROR Next( void )
現在の要素をスキップして、TLVUpdater オブジェクトを入力 TLV の次の要素まで進めます。
Next() メソッドは、入力 TLV の現在の要素をスキップし、TLVUpdater のリーダーを同じ包含コンテキスト内にある次の要素へと進めます。特に、リーダーが TLV エンコードの最も外側のレベルにある場合は、Next() を呼び出すと、その次に最上位の要素に進みます。リーダーが TLV コンテナ要素(構造、配列、パス)内にある場合は、Next() を呼び出すと、コンテナの次のメンバー要素に進みます。
Next() はリーダーの動きを現在の包含コンテキストに制限します。リーダーがコンテナ要素上に置かれているときに Next() を呼び出すと、そのメンバー要素(およびネストされたコンテナのメンバー)がコンテナに続く最初の要素に到達するまでコンテナがスキップされます。
特定の包含コンテキスト内にそれ以上の要素がない場合、Next() メソッドは WEAVE_END_OF_TLV エラーを返し、リーダーの位置は変化しません。
詳細 | |||||
---|---|---|---|---|---|
戻り値 |
|
データに
WEAVE_ERROR Put( uint64_t tag, int8_t v )
データに
WEAVE_ERROR Put( uint64_t tag, int16_t v )
データに
WEAVE_ERROR Put( uint64_t tag, int32_t v )
データに
WEAVE_ERROR Put( uint64_t tag, int64_t v )
データに
WEAVE_ERROR Put( uint64_t tag, uint8_t v )
データに
WEAVE_ERROR Put( uint64_t tag, uint16_t v )
データに
WEAVE_ERROR Put( uint64_t tag, uint32_t v )
データに
WEAVE_ERROR Put( uint64_t tag, uint64_t v )
データに
WEAVE_ERROR Put( uint64_t tag, int8_t v, bool preserveSize )
データに
WEAVE_ERROR Put( uint64_t tag, int16_t v, bool preserveSize )
データに
WEAVE_ERROR Put( uint64_t tag, int32_t v, bool preserveSize )
データに
WEAVE_ERROR Put( uint64_t tag, int64_t v, bool preserveSize )
データに
WEAVE_ERROR Put( uint64_t tag, uint8_t v, bool preserveSize )
データに
WEAVE_ERROR Put( uint64_t tag, uint16_t v, bool preserveSize )
データに
WEAVE_ERROR Put( uint64_t tag, uint32_t v, bool preserveSize )
データに
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 )
PutBoolean
WEAVE_ERROR PutBoolean( uint64_t tag, bool v )
PutBytes
WEAVE_ERROR PutBytes( uint64_t tag, const uint8_t *buf, uint32_t len )
PutNull
WEAVE_ERROR PutNull( uint64_t tag )
PutString
WEAVE_ERROR PutString( uint64_t tag, const char *buf )
PutString
WEAVE_ERROR PutString( uint64_t tag, const char *buf, uint32_t len )
SetImplicitProfileId
void SetImplicitProfileId( uint32_t profileId )
TLVUpdater オブジェクトに暗黙的なプロファイル ID を設定します。
このメソッドは、TLVUpdater オブジェクトに暗黙的なプロファイル ID を設定します。新しい要素のエンコードを求められたときに、新しい要素に関連付けられたタグのプロファイル ID が profileId
の値と一致すると、アップデータによってタグが暗黙的形式でエンコードされ、プロセス内でプロファイル ID が省略されます。
詳細 | |||
---|---|---|---|
パラメータ |
|
StartContainer
WEAVE_ERROR StartContainer( uint64_t tag, TLVType containerType, TLVType & outerContainerType )