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)
|
|
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)
|
|
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 |
|
||||||
Nilai yang Ditampilkan |
|
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 |
|
||||||||||
Nilai yang Ditampilkan |
|
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 |
|
||||||
Nilai yang Ditampilkan |
|
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 |
|
||||||
Nilai yang Ditampilkan |
|
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 |
|
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 |
|
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 |
|
StartContainer
WEAVE_ERROR StartContainer( uint64_t tag, TLVType containerType, TLVType & outerContainerType )