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

nl::Weave::TLV::TLVUpdater

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

TLV エンコードの要素を編集、追加、削除するための、統合された読み取り / 書き込みインターフェースを提供します。

まとめ

TLVUpdater は、TLVReader オブジェクトと TLVWriter オブジェクトの結合体であり、エンコード中のデータの編集と削除、および TLV エンコードへの新しい要素の追加のインターフェース メソッドを提供します。TLVUpdater オブジェクトは基本的に 2 つのカーソルのように機能します。1 つは既存のエンコードを読み取るためで、もう 1 つは書き込み(既存のデータをコピーする、または新しいデータを書き込むため)です。

意味的には、TLVUpdater オブジェクトは TLVReaderTLVWriter の結合体のように機能します。TLVUpdater メソッドの意味は、TLVReader / TLVWriter の類似の名前と似ています。セマンティクスの違いがある場合は、WeaveTLVUpdater.cpp の関数のコメント セクションにその違いが明確に記載されています。

TLVUpdater' の PutBytes() メソッドと PutString() メソッドに関する特に重要な注意事項は、オーバーフローが発生したときに書き込まれた要素ヘッダーのみが含まれるエンコードを破損状態にしておくことです。アプリは 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)
TLV コンテナ要素の読み取りを完了し、TLV 要素の末尾を出力 TLV にエンコードします。
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)
現在の要素を入力 TLV から出力 TLV にコピーします。
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)

パブリック関数

コピー要素

WEAVE_ERROR CopyElement(
  TLVReader & reader
)

コピー要素

WEAVE_ERROR CopyElement(
  uint64_t tag,
  TLVReader & reader
)

DupBytes

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

文字列

WEAVE_ERROR DupString(
  char *& buf
)

エンドコンテナ

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() メソッドを呼び出すことができます。

詳細
パラメータ
[out] outerContainerType
アップデータのコンテキストを受け取る TLVType 値への参照。
戻り値
WEAVE_NO_ERROR
メソッドが成功した場合。
WEAVE_ERROR_INCORRECT_STATE
TLVUpdater リーダーがコンテナ要素に配置されていない場合。
other
TLVWriter::StartContainer() または TLVReader::EnterContainer() で返されるその他の Weave またはプラットフォームのエラーコード。

ExitContainer

WEAVE_ERROR ExitContainer(
  TLVType outerContainerType
)

TLV コンテナ要素の読み取りを完了し、TLV 要素の末尾を出力 TLV にエンコードします。

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

ExitContainer() が返されると、TLVUpdater リーダーは入力 TLV 内のコンテナに続く最初の要素の直前に配置されます。この時点から、アプリケーションは Next() を呼び出して、残りの要素を進めることができます。

EnterContainer() が呼び出されたら、基となるコンテナ内のすべての要素が読み取られたかどうかにかかわらず、いつでもアップデータで ExitContainer() を呼び出すことができます。また、コンテナ内のすべての要素を読み取る前に ExitContainer() を呼び出すと、更新されたコンテナは出力の TLV で切り捨てられることに注意してください。

詳細
パラメータ
[in] outerContainerType
EnterContainer() メソッドで返された TLVType の値です。
戻り値
WEAVE_NO_ERROR
メソッドが成功した場合。
WEAVE_ERROR_TLV_UNDERRUN
基盤となる TLV エンコードが途中で終了した場合。
WEAVE_ERROR_INVALID_TLV_ELEMENT
アップデータで TLV 要素タイプが無効であるかサポートされていません。
WEAVE_ERROR_INVALID_TLV_TAG
アップデータで無効なコンテキストで TLV タグが見つかった場合。
other
TLVWriter::EndContainer() または TLVReader::ExitContainer() で返されるその他の Weave またはプラットフォームのエラーコード。

ファイナライズ

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 データを解析し、既存の要素の変更/削除や、エンコードへの新しい要素の追加を行うことができます。

詳細
パラメータ
[in] buf
編集する TLV データを含むバッファへのポインタ。
[in] dataLen
バッファ内の TLV データの長さ。
[in] maxLen
バッファの合計長。
戻り値
WEAVE_NO_ERROR
メソッドが成功した場合。
WEAVE_ERROR_INVALID_ARGUMENT
バッファアドレスが無効な場合。
WEAVE_ERROR_BUFFER_TOO_SMALL
バッファが小さすぎる場合。

init

WEAVE_ERROR Init(
  TLVReader & aReader,
  uint32_t freeLen
)

TLVReader を使用して TLVUpdater オブジェクトを初期化します。

このメソッドを呼び出すと、TLVReader が指すバッファ内の TLV データが現在の読み取りポイントからバッファの末尾に移動します。新しいロケーションから読み取るために新しいプライベート TLVReader オブジェクトが初期化され、解放されたバッファ領域に書き込まれるように新しいプライベート TLVWriter オブジェクトが初期化されます。

TLVReader がすでに要素上に配置されている場合は、最初にその要素の先頭までバックオフされます。また、このバックオフはコンテナ要素で適切に動作します。つまり、TLVReader がすでに EnterContainer() の呼び出しに使用された場合、バックオフの対象はありません。ただし、TLVReader がコンテナ要素に配置され、EnterContainer() がまだ呼び出されていない場合は、TLVReader オブジェクトがコンテナヘッドの開始時にバックオフされます。

入力 TLVReader オブジェクトは返却前に破棄されるため、戻り時に同じものを使用しないようにする必要があります。

詳細
パラメータ
[in,out] aReader
戻り値の前に破棄される TLVReader オブジェクトへの参照。
[in] freeLen
事前にエンコードされたデータ バッファで使用可能な空き容量(バイト単位)です。
戻り値
WEAVE_NO_ERROR
メソッドが成功した場合。
WEAVE_ERROR_INVALID_ARGUMENT
バッファアドレスが無効な場合。
WEAVE_ERROR_NOT_IMPLEMENTED
リーダーがバッファ チェーンで初期化された場合。

移動

WEAVE_ERROR Move(
  void
)

現在の要素を入力 TLV から出力 TLV にコピーします。

Move() メソッドは、TLVUpdater のリーダーが配置されている現在の要素を TLVUpdater の writer にコピーします。このメソッドを呼び出す前に、アプリケーションは Next() を呼び出して、要素に TLVUpdater' のリーダーを配置する必要があります。TLVReader::Next() メソッドと同様に、呼び出し時にコンテナ要素にリーダーを配置すると、コンテナのすべてのメンバーがコピーされます。リーダーがどの要素にも配置されていない場合は、このメソッドを呼び出しても何も変わりません。

詳細
戻り値
WEAVE_NO_ERROR
TLVUpdater リーダーが新しい要素に正常に配置された場合。
WEAVE_END_OF_TLV
TLVUpdater のリーダーがコンテナの終点を指している場合。
WEAVE_ERROR_INVALID_TLV_ELEMENT
TLVIpdater のリーダーが有効な TLV 要素で配置されていない場合。
other
TLVReader::Skip() メソッドで返される他のエラーコードを返します。

Move まで終了

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_NO_ERROR
TLVUpdater リーダーが新しい要素に正常に配置された場合。
other
TLVReader::Skip() メソッドと TLVReader::Next() メソッドによって返される Weave またはプラットフォームのエラーコードを返します。

put

WEAVE_ERROR Put(
  uint64_t tag,
  int8_t v
)

put

WEAVE_ERROR Put(
  uint64_t tag,
  int16_t v
)

put

WEAVE_ERROR Put(
  uint64_t tag,
  int32_t v
)

put

WEAVE_ERROR Put(
  uint64_t tag,
  int64_t v
)

put

WEAVE_ERROR Put(
  uint64_t tag,
  uint8_t v
)

put

WEAVE_ERROR Put(
  uint64_t tag,
  uint16_t v
)

put

WEAVE_ERROR Put(
  uint64_t tag,
  uint32_t v
)

put

WEAVE_ERROR Put(
  uint64_t tag,
  uint64_t v
)

put

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

put

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

put

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

put

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

put

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

put

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

put

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

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
)

Put ブール値

WEAVE_ERROR PutBoolean(
  uint64_t tag,
  bool v
)

Put バイト

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 が省略されます。

詳細
パラメータ
[in] profileId
暗黙的にエンコードする必要があるタグのプロファイル ID。

開始コンテナ

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

コンテナの確認を確認する

WEAVE_ERROR VerifyEndOfContainer(
  void
)