nl:: Weave:: TLV:: TLVUpdater
#include <src/lib/core/WeaveTLV.h>
Menyediakan antarmuka Pembaca/Penulis terpadu untuk mengedit/menambahkan/menghapus elemen dalam encoding TLV.
Ringkasan
TLVUpdater adalah gabungan 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 berfungsi 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 dari TLVReader dan TLVWriter. Metode TLVUpdater memiliki arti yang kurang lebih sama dengan metode yang memiliki nama serupa di TLVReader/TLVWriter. Jika ada perbedaan dalam semantik, perbedaan tersebut didokumentasikan dengan jelas di bagian komentar fungsi di WeaveTLVUpdater.cpp.
Salah satu catatan penting tentang metode PutBytes() dan PutString() TLVUpdater adalah bahwa metode ini dapat membiarkan encoding dalam status rusak dengan hanya header elemen yang ditulis saat terjadi overflow. Aplikasi dapat memanggil GetRemainingFreeLength() untuk memastikan ada sekitar ruang kosong yang cukup untuk menulis encoding. Perhatikan bahwa GetRemainingFreeLength() hanya memberi tahu Anda byte gratis yang tersedia dan tidak ada cara bagi aplikasi untuk mengetahui panjang data yang dienkode yang akan ditulis. Jika terjadi overflow, PutBytes() dan PutString() akan mengembalikan WEAVE_ERROR_BUFFER_TOO_SMALL ke pemanggil.
Selain itu, perhatikan bahwa metode Next() kelebihan beban sehingga melewati elemen saat ini dan juga memajukan pembaca internal ke elemen berikutnya. Karena melewatkan elemen yang sudah dienkode memerlukan perubahan variabel status ruang kosong penulis internal untuk memperhitungkan ruang kosong baru (disediakan dengan melewati), aplikasi diharapkan memanggil Next() pada 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 container.
|
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)
|
Lakukan inisialisasi objek TLVUpdater untuk mengedit buffer input tunggal.
|
Init(TLVReader & aReader, uint32_t freeLen)
|
Lakukan inisialisasi objek TLVUpdater menggunakan TLVReader.
|
Move(void)
|
|
MoveUntilEnd(void)
|
void
Pindahkan semuanya dari titik baca TLVUpdater saat ini hingga akhir buffer TLV input ke output.
|
Next(void)
|
Lewati elemen saat ini dan lanjutkan objek TLVUpdater ke elemen berikutnya dalam TLV input.
|
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
Tetapkan ID Profil Implisit untuk objek TLVUpdater.
|
StartContainer(uint64_t tag, TLVType containerType, TLVType & outerContainerType)
|
|
VerifyEndOfContainer(void)
|
Fungsi publik
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 )
Menyiapkan objek TLVUpdater untuk membaca elemen container.
Kode ini juga mengenkode awal objek container dalam TLV output.
Metode EnterContainer() menyiapkan objek TLVUpdater saat ini untuk mulai membaca elemen anggota penampung TLV (struktur, array, atau jalur). Untuk setiap panggilan ke aplikasi EnterContainer(), Anda harus melakukan panggilan yang sesuai ke ExitContainer().
Saat EnterContainer() dipanggil, pembaca TLVUpdater harus diposisikan pada elemen penampung. Metode ini mengambil referensi ke nilai TLVType sebagai argumen yang akan digunakan untuk menyimpan konteks updater saat membaca container.
Saat metode EnterContainer() ditampilkan, updater diposisikan tepat sebelum anggota pertama penampung. Memanggil Next() berulang kali akan melanjutkan updater melalui anggota koleksi hingga akhir tercapai, lalu updater akan menampilkan WEAVE_END_OF_TLV.
Setelah selesai membaca penampung, aplikasi dapat terus membaca elemen setelah penampung dengan memanggil metode ExitContainer().
Detail | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Nilai yang Ditampilkan |
|
ExitContainer
WEAVE_ERROR ExitContainer( TLVType outerContainerType )
Menyelesaikan pembacaan elemen container TLV dan mengenkode akhir elemen TLV dalam TLV output.
Metode ExitContainer() memulihkan status objek TLVUpdater setelah panggilan ke EnterContainer(). Untuk setiap panggilan ke EnterContainer(), aplikasi harus melakukan panggilan yang sesuai ke ExitContainer(), dengan meneruskan nilai konteks yang ditampilkan oleh metode EnterContainer().
Saat ExitContainer() ditampilkan, pembaca TLVUpdater diposisikan tepat sebelum elemen pertama yang mengikuti penampung dalam TLV input. Dari sini aplikasi dapat memanggil Next() untuk maju melalui elemen yang tersisa.
Setelah EnterContainer() dipanggil, aplikasi dapat memanggil ExitContainer() pada updater kapan saja, terlepas dari apakah semua elemen dalam penampung pokok telah dibaca atau belum. Selain itu, perhatikan bahwa memanggil ExitContainer() sebelum membaca semua elemen dalam container, akan mengakibatkan container 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 )
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 )
Lakukan 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 di 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 )
Lakukan inisialisasi objek TLVUpdater menggunakan TLVReader.
Saat memanggil metode ini, data TLV dalam buffer yang ditunjuk oleh TLVReader akan dipindahkan dari titik baca saat ini ke akhir buffer. Objek TLVReader pribadi baru diinisialisasi untuk membaca dari lokasi baru ini, sedangkan objek TLVWriter pribadi baru diinisialisasi untuk menulis ke ruang buffer yang dikosongkan.
Perhatikan bahwa jika TLVReader sudah diposisikan "aktif" sebuah elemen, maka hal itu pertama-tama dimundurkan ke awal elemen itu. Perhatikan juga bahwa pencadangan ini berfungsi baik dengan elemen container, yaitu, jika TLVReader sudah digunakan untuk memanggil EnterContainer(), tidak ada yang perlu dicadangkan. Namun, jika TLVReader diposisikan pada elemen container dan EnterContainer() belum dipanggil, objek TLVReader akan dicadangkan ke awal head container.
Objek TLVReader input akan dihancurkan sebelum ditampilkan dan aplikasi tidak boleh menggunakan objek yang sama saat ditampilkan.
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 berada di posisi 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 saat panggilan, semua anggota container akan disalin. Jika pembaca tidak diposisikan pada elemen apa pun, tidak ada yang berubah saat memanggil metode ini.
Detail | |||||||||
---|---|---|---|---|---|---|---|---|---|
Nilai yang Ditampilkan |
|
MoveUntilEnd
void MoveUntilEnd( void )
Pindahkan semuanya dari titik baca TLVUpdater saat ini hingga akhir buffer TLV input ke output.
Metode ini mendukung pemindahan apa saja dari titik baca TLVUpdater saat ini hingga akhir buffer pembaca ke penulis TLVUpdater.
Berikutnya
WEAVE_ERROR Next( void )
Lewati elemen saat ini dan lanjutkan objek TLVUpdater ke elemen berikutnya dalam TLV input.
Metode Next() melewati elemen saat ini dalam TLV input dan memajukan pembaca TLVUpdater ke elemen berikutnya yang berada dalam konteks pembatasan yang sama. Khususnya, jika pembaca diposisikan di level paling luar dari encoding TLV, memanggil Next() akan melanjutkannya ke elemen berikutnya yang paling atas. Jika pembaca diposisikan dalam elemen penampung TLV (struktur, array, atau jalur), memanggil Next() akan memajukannya ke elemen anggota container berikutnya.
Karena Next() membatasi gerakan pembaca ke konteks pembatasan saat ini, memanggil Next() saat pembaca diposisikan pada elemen penampung akan memajukan ke atas penampung, melewati elemen anggotanya (dan anggota penampung bertingkat) hingga mencapai elemen pertama setelah penampung.
Jika tidak ada elemen lebih lanjut dalam konteks pembatasan tertentu, metode Next() akan menampilkan error WEAVE_END_OF_TLV dan posisi pembaca tidak akan berubah.
Detail | |||||
---|---|---|---|---|---|
Nilai yang Ditampilkan |
|
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 )
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 )
Tetapkan 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 prosesnya.
Detail | |||
---|---|---|---|
Parameter |
|
StartContainer
WEAVE_ERROR StartContainer( uint64_t tag, TLVType containerType, TLVType & outerContainerType )