Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.
Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

nl::Terpusat::TLV::Pembaruan TLV

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

Menyediakan antarmuka Reader/Writer terpadu untuk mengedit/menambahkan/menghapus elemen dalam encoding TLV.

Ringkasan

TLVUpdater adalah gabungan dari objek TLVReader dan TLVWriter serta menyediakan metode antarmuka untuk mengedit/menghapus data dalam encoding serta menambahkan elemen baru ke encoding TLV. Objek TLVUpdater pada dasarnya bertindak seperti dua kursor, satu untuk membaca encoding yang ada dan satu lagi untuk menulis (baik untuk menyalin data yang ada atau menulis data baru).

Secara semantik, objek TLVUpdater berfungsi seperti gabungan antara TLVReader dan TLVWriter. Metode TLVUpdater memiliki arti yang kurang lebih sama seperti rekan yang serupa dalam TLVReader/TLVWriter. Jika ada perbedaan dalam semantik, perbedaan tersebut secara jelas didokumentasikan dalam bagian komentar fungsi di WeaveTLVUpdater.cpp.

Satu catatan yang sangat penting tentang metode TLVUpdater's PutBytes() dan PutString() adalah bahwa metode tersebut dapat membiarkan encoding dalam keadaan rusak hanya dengan header elemen yang ditulis saat overflow terjadi. Aplikasi dapat memanggil GetRemainingFreeLength() untuk memastikan ada sekitar ruang kosong yang cukup untuk menulis encoding. Perhatikan bahwa GetRemainingFreeLength() hanya memberi tahu Anda tentang byte gratis yang tersedia dan tidak ada cara bagi aplikasi untuk mengetahui panjang data yang dienkode yang ditulis. Jika terjadi overflow, PutBytes() dan PutString() akan menampilkan WEAVE_ERROR_BUFFER_TOO_SMALL ke pemanggil.

Perhatikan juga bahwa metode Next() kelebihan beban untuk melewati elemen saat ini dan juga memajukan pembaca internal ke elemen berikutnya. Karena melewati elemen yang sudah dienkode membutuhkan perubahan variabel status ruang kosong penulis internal untuk memperhitungkan ruang kosong baru (yang disediakan dengan melewati), aplikasi diharapkan memanggil Next() di updater setelah metode Get() yang nilainya tidak ingin ditulis kembali (yang setara dengan melewati elemen saat ini).

Fungsi publik

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)
Menyiapkan objek TLVUpdater untuk membaca elemen penampung.
ExitContainer(TLVType outerContainerType)
Menyelesaikan pembacaan elemen penampung TLV dan mengenkode akhir elemen TLV di output 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)
Inisialisasi objek TLVUpdater untuk mengedit buffer input tunggal.
Init(TLVReader & aReader, uint32_t freeLen)
Inisialisasi objek TLVUpdater menggunakan TLVReader.
Move(void)
Menyalin elemen saat ini dari input TLV ke output TLV.
MoveUntilEnd(void)
void
Pindahkan semuanya dari titik baca TLVUpdater saat ini hingga akhir input TLV input ke output.
Next(void)
Lewati elemen saat ini dan lanjutkan objek TLVUpdater ke elemen berikutnya di input 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
Setel ID Profil Implisit untuk objek TLVUpdater.
StartContainer(uint64_t tag, TLVType containerType, TLVType & outerContainerType)
VerifyEndOfContainer(void)

Fungsi publik

SalinElemen

WEAVE_ERROR CopyElement(
  TLVReader & reader
)

SalinElemen

WEAVE_ERROR CopyElement(
  uint64_t tag,
  TLVReader & reader
)

DpByte

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

Musik DupString

WEAVE_ERROR DupString(
  char *& buf
)

Ujung Penampung

WEAVE_ERROR EndContainer(
  TLVType outerContainerType
)

EnterContainer

WEAVE_ERROR EnterContainer(
  TLVType & outerContainerType
)

Menyiapkan objek TLVUpdater untuk membaca elemen penampung.

Kode ini juga mengenkode awal objek container dalam TLV output.

Metode EnterContainer() mempersiapkan objek TLVUpdater saat ini untuk mulai membaca elemen anggota penampung TLV (struktur, array, atau jalur). Untuk setiap panggilan ke aplikasi EnterContainer() harus melakukan panggilan yang sesuai ke ExitContainer().

Saat EnterContainer() dipanggil, pembaca TLVUpdater harus ditempatkan pada elemen container. Metode ini mengambil argumen sebagai referensi ke nilai TLVType yang akan digunakan untuk menyimpan konteks updater saat membaca penampung.

Saat metode EnterContainer() kembali, alat pembaruan akan langsung diposisikan sebelum anggota pertama penampung. Memanggil Next() secara berulang akan memajukan updater melalui anggota koleksi hingga akhir tercapai, di mana updater akan menampilkan WEAVE_END_OF_TLV.

Setelah aplikasi selesai membaca penampung, aplikasi dapat terus membaca elemen setelah penampung dengan memanggil metode ExitContainer().

Detail
Parameter
[out] outerContainerType
Referensi ke nilai TLVType yang akan menerima konteks updater.
Nilai yang Ditampilkan
WEAVE_NO_ERROR
Jika metode berhasil.
WEAVE_ERROR_INCORRECT_STATE
Jika pembaca TLVUpdater tidak diposisikan pada elemen penampung.
other
Kode error platform atau Weave lainnya yang ditampilkan oleh TLVWriter::StartContainer() atau TLVReader::EnterContainer().

Keluar dari Container

WEAVE_ERROR ExitContainer(
  TLVType outerContainerType
)

Menyelesaikan pembacaan elemen penampung TLV dan mengenkode akhir elemen TLV di output TLV.

Metode ExitContainer() memulihkan status objek TLVUpdater setelah panggilan ke EnterContainer(). Untuk setiap panggilan ke aplikasi EnterContainer() harus melakukan panggilan yang sesuai ke ExitContainer(), dengan meneruskan nilai konteks yang dikembalikan oleh metode EnterContainer().

Saat ExitContainer() kembali, pembaca TLVUpdater diposisikan tepat sebelum elemen pertama yang mengikuti penampung dalam input TLV. Pada tahap ini, aplikasi dapat memanggil Next() untuk melanjutkan ke elemen lainnya.

Setelah EnterContainer() dipanggil, aplikasi dapat memanggil ExitContainer() di alat pembaruan pada waktu tertentu, terlepas dari apakah semua elemen dalam penampung dasar telah dibaca atau tidak. Selain itu, perhatikan bahwa memanggil ExitContainer() sebelum membaca semua elemen dalam penampung akan mengakibatkan penampung yang diupdate terpotong dalam output TLV.

Detail
Parameter
[in] outerContainerType
Nilai TLVType yang ditampilkan oleh metode EnterContainer().
Nilai yang Ditampilkan
WEAVE_NO_ERROR
Jika metode berhasil.
WEAVE_ERROR_TLV_UNDERRUN
Jika encoding TLV yang mendasarinya berakhir sebelum waktunya.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Jika updater menemukan jenis elemen TLV yang tidak valid atau tidak didukung.
WEAVE_ERROR_INVALID_TLV_TAG
Jika updater menemukan tag TLV dalam konteks yang tidak valid.
other
Kode error platform atau Weave lainnya yang ditampilkan oleh TLVWriter::EndContainer() atau TLVReader::ExitContainer().

Finalisasi

WEAVE_ERROR Finalize(
  void
)

Dapatkan

WEAVE_ERROR Get(
  bool & v
)

Dapatkan

WEAVE_ERROR Get(
  int8_t & v
)

Dapatkan

WEAVE_ERROR Get(
  int16_t & v
)

Dapatkan

WEAVE_ERROR Get(
  int32_t & v
)

Dapatkan

WEAVE_ERROR Get(
  int64_t & v
)

Dapatkan

WEAVE_ERROR Get(
  uint8_t & v
)

Dapatkan

WEAVE_ERROR Get(
  uint16_t & v
)

Dapatkan

WEAVE_ERROR Get(
  uint32_t & v
)

Dapatkan

WEAVE_ERROR Get(
  uint64_t & v
)

Dapatkan

WEAVE_ERROR Get(
  float & v
)

Dapatkan

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
)

IDProfil Implisit

uint32_t GetImplicitProfileId(
  void
)

GetLength

uint32_t GetLength(
  void
) const 

GetLengthRead

uint32_t GetLengthRead(
  void
) const 

GetLengthDitulis

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
)

Mendapatkan Tag

uint64_t GetTag(
  void
) const 

GetType

TLVType GetType(
  void
) const 

Init

WEAVE_ERROR Init(
  uint8_t *buf,
  uint32_t dataLen,
  uint32_t maxLen
)

Inisialisasi objek TLVUpdater untuk mengedit buffer input tunggal.

Saat memanggil metode ini, data TLV dalam buffer dipindahkan ke akhir buffer dan objek TLVReader pribadi diinisialisasi pada buffer yang direlokasi ini. Objek TLVWriter pribadi juga diinisialisasi pada ruang kosong yang sekarang tersedia di awal. Aplikasi dapat menggunakan objek TLVUpdater untuk mengurai data TLV dan mengubah/menghapus elemen yang ada atau menambahkan elemen baru ke encoding.

Detail
Parameter
[in] buf
Pointer ke buffer yang berisi data TLV yang akan diedit.
[in] dataLen
Panjang data TLV dalam buffer.
[in] maxLen
Panjang total buffer.
Nilai yang Ditampilkan
WEAVE_NO_ERROR
Jika metode berhasil.
WEAVE_ERROR_INVALID_ARGUMENT
Jika alamat buffer tidak valid.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jika buffer terlalu kecil.

Init

WEAVE_ERROR Init(
  TLVReader & aReader,
  uint32_t freeLen
)

Inisialisasi objek TLVUpdater menggunakan TLVReader.

Saat memanggil metode ini, data TLV dalam buffer yang ditunjuk oleh TLVReader dipindahkan dari titik baca saat ini ke akhir buffer. Objek TLVReader pribadi yang baru diinisialisasi untuk membaca dari lokasi baru ini, sementara objek TLVWriter pribadi baru diinisialisasi untuk menulis ke ruang buffer yang tersedia.

Perhatikan bahwa jika TLVReader sudah diposisikan "on" elemen, elemen ini akan dicadangkan terlebih dahulu ke awal elemen tersebut. Perhatikan juga bahwa pendukung ini berfungsi dengan baik dengan elemen penampung, yaitu, jika TLVReader sudah digunakan untuk memanggil EnterContainer(), maka tidak ada yang perlu dilakukan. Namun, jika TLVReader diposisikan pada elemen penampung dan EnterContainer() belum dipanggil, maka objek TLVReader dicadangkan ke awal head container.

Objek input TLVReader akan dihancurkan sebelum ditampilkan dan aplikasi tidak boleh menggunakan hal yang sama saat kembali.

Detail
Parameter
[in,out] aReader
Referensi ke objek TLVReader yang akan dihancurkan sebelum kembali.
[in] freeLen
Panjang ruang kosong (dalam byte) yang tersedia di buffering data yang telah dienkode sebelumnya.
Nilai yang Ditampilkan
WEAVE_NO_ERROR
Jika metode berhasil.
WEAVE_ERROR_INVALID_ARGUMENT
Jika alamat buffer tidak valid.
WEAVE_ERROR_NOT_IMPLEMENTED
Apakah pembaca diinisialisasi pada rantai buffer.

Pindahkan

WEAVE_ERROR Move(
  void
)

Menyalin elemen saat ini dari input TLV ke output TLV.

Metode Move() menyalin elemen saat ini tempat pembaca TLVUpdater'diposisikan, ke penulis TLVUpdater'. Aplikasi harus memanggil Next() dan memosisikan pembaca TLVUpdater'pada elemen sebelum memanggil metode ini. Sama seperti metode TLVReader::Next(), jika pembaca diposisikan pada elemen container pada saat panggilan, semua anggota container akan disalin. Jika pembaca tidak diposisikan pada elemen apa pun, tidak akan ada perubahan pada pemanggilan metode ini.

Detail
Nilai yang Ditampilkan
WEAVE_NO_ERROR
Jika pembaca TLVUpdater berhasil diposisikan pada elemen baru.
WEAVE_END_OF_TLV
Jika pembaca TLVUpdater menunjuk ke akhir penampung.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Jika pembaca TLVIPIIter tidak diposisikan pada elemen TLV yang valid.
other
Menampilkan kode error lain yang ditampilkan oleh metode TLVReader::Skip().

BergerakKeAkhir

void MoveUntilEnd(
  void
)

Pindahkan semuanya dari titik baca TLVUpdater saat ini hingga akhir input TLV input ke output.

Metode ini mendukung pemindahan semua hal dari titik baca TLVUpdater saat ini hingga akhir buffer pembaca hingga ke penulis TLVUpdater.

Berikutnya

WEAVE_ERROR Next(
  void
)

Lewati elemen saat ini dan lanjutkan objek TLVUpdater ke elemen berikutnya di input TLV.

Metode Next() akan melewati elemen saat ini dalam input TLV dan memajukan pembaca TLVUpdater&&39;ke elemen berikutnya yang berada dalam konteks penahanan yang sama. Khususnya, jika pembaca diposisikan pada tingkat paling luar dari encoding TLV, memanggil Next() akan melanjutkannya ke elemen paling atas berikutnya. Jika pembaca diposisikan dalam elemen penampung TLV (struktur, array, atau jalur), memanggil Next() akan meneruskannya ke elemen anggota penampung berikutnya.

Karena Next() membatasi gerakan pembaca ke konteks penampung saat ini, memanggil Next() saat pembaca diposisikan pada elemen penampung akan maju melalui penampung, melewati elemen anggotanya (dan anggota penampung bertingkat) hingga mencapai elemen pertama setelah penampung.

Jika tidak ada elemen lebih lanjut dalam konteks penahanan tertentu, metode Next() akan menampilkan error WEAVE_END_OF_TLV dan posisi pembaca tidak akan berubah.

Detail
Nilai yang Ditampilkan
WEAVE_NO_ERROR
Jika pembaca TLVUpdater berhasil diposisikan pada elemen baru.
other
Menampilkan kode error Weave atau platform yang ditampilkan oleh metode TLVReader::Skip() dan TLVReader::Next().

Tempatkan

WEAVE_ERROR Put(
  uint64_t tag,
  int8_t v
)

Tempatkan

WEAVE_ERROR Put(
  uint64_t tag,
  int16_t v
)

Tempatkan

WEAVE_ERROR Put(
  uint64_t tag,
  int32_t v
)

Tempatkan

WEAVE_ERROR Put(
  uint64_t tag,
  int64_t v
)

Tempatkan

WEAVE_ERROR Put(
  uint64_t tag,
  uint8_t v
)

Tempatkan

WEAVE_ERROR Put(
  uint64_t tag,
  uint16_t v
)

Tempatkan

WEAVE_ERROR Put(
  uint64_t tag,
  uint32_t v
)

Tempatkan

WEAVE_ERROR Put(
  uint64_t tag,
  uint64_t v
)

Tempatkan

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

Tempatkan

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

Tempatkan

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

Tempatkan

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

Tempatkan

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

Tempatkan

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

Tempatkan

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

Tempatkan

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

Tempatkan

WEAVE_ERROR Put(
  uint64_t tag,
  float v
)

Tempatkan

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
)

String

WEAVE_ERROR PutString(
  uint64_t tag,
  const char *buf
)

String

WEAVE_ERROR PutString(
  uint64_t tag,
  const char *buf,
  uint32_t len
)

IdImplisitProfilId

void SetImplicitProfileId(
  uint32_t profileId
)

Setel ID Profil Implisit untuk objek TLVUpdater.

Metode ini menetapkan ID profil implisit untuk objek TLVUpdater. Saat updater diminta untuk mengenkode elemen baru, jika ID profil tag yang terkait dengan elemen baru cocok dengan nilai profileId, updater akan mengenkode tag dalam bentuk implisit, sehingga menghilangkan ID profil dalam proses.

Detail
Parameter
[in] profileId
ID profil dari tag yang harus dienkode dalam bentuk implisit.

StartContainer

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

VerifikasiEndOfContainer

WEAVE_ERROR VerifyEndOfContainer(
  void
)