nl:: Weave:: TLV:: TLVUpdater
#include <src/lib/core/WeaveTLV.h>
TLV kodlamasındaki öğeleri düzenlemek/eklemek/silmek için birleşik bir Okuyucu/Yazar arayüzü sunar.
Özet
TLVUpdater, TLVReader ve TLVWriter nesnelerinin birleşiminden oluşur ve bir kodlamadaki verileri düzenlemek/silmek ve TLV kodlamasına yeni öğeler eklemek için arayüz yöntemleri sağlar. TLVUpdater nesnesi temelde, biri mevcut kodlamayı okumak, diğeri yazmak için (mevcut verileri kopyalamak veya yeni veri yazmak için) olmak üzere iki imleç gibi çalışır.
Anlamsal olarak TLVUpdater nesnesi, TLVReader ve TLVWriter'ın birleşimi gibi çalışır. TLVUpdater yöntemleri, TLVReader/TLVWriter'daki benzer şekilde adlandırılmış eşdeğerleriyle aşağı yukarı benzer anlamlara sahiptir. Anlamsal açıdan farklılıklar olduğunda, farklar işlevin WeaveTLVUpdater.cpp dosyasındaki açıklama bölümünde açıkça belirtilir.
TLVUpdater'in PutBytes() ve PutString() yöntemleriyle ilgili özellikle önemli bir not, kodlamayı yalnızca taşma meydana geldiğinde yazılan öğe üstbilgisiyle bozuk bir durumda bırakabilmesidir. Uygulamalar kodlamayı yazmak için yaklaşık yeterli boş alan bulunduğundan emin olmak amacıyla GetRemainingFreeLength() yöntemini çağırabilir. GetRemainingFreeLength() yalnızca kullanılabilir ücretsiz bayt miktarını size bildirir ve uygulamanın yazılan kodlanmış verilerin uzunluğunu bilmenin hiçbir yolu yoktur. Taşma olması durumunda, hem PutBytes() hem de PutString(), çağrıyı yapana WEAVE_ERROR_BUFFER_TOO_ORIGINAL değerini döndürür.
Ayrıca, Next() yönteminin hem geçerli öğeyi atlamak hem de dahili okuyucuyu bir sonraki öğeye ilerletmek için aşırı yüklendiğini unutmayın. Önceden kodlanmış olan öğeleri atlamak için dahili yazarın boş alan durumu değişkenlerinin, yeni boş alan (atlama ile kullanılabilir) hesaba katılması gerektiği için uygulamanın, değerini geri yazmak istemediği bir Get() yönteminden sonra (geçerli öğeyi atlamaya eş değerdir) güncelleyicide Next() işlevini çağırması beklenir.
Kamu işlevleri |
|
---|---|
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)
|
Kapsayıcının öğelerini okumak için bir TLVUpdater nesnesi hazırlar.
|
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)
|
Tek bir giriş arabelleğini düzenlemek için bir TLVUpdater nesnesi başlatın.
|
Init(TLVReader & aReader, uint32_t freeLen)
|
TLVReader kullanarak bir TLVUpdater nesnesini başlatın.
|
Move(void)
|
|
MoveUntilEnd(void)
|
void
TLVUpdater'in geçerli okuma noktasından giriş TLV arabelleğinin sonuna kadar her şeyi çıkışa taşıyın.
|
Next(void)
|
Geçerli öğeyi atlayın ve TLVUpdater nesnesini TLV girişinde sonraki öğeye ilerletin.
|
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 nesnesi için Dolaylı Profil Kimliği'ni ayarlayın.
|
StartContainer(uint64_t tag, TLVType containerType, TLVType & outerContainerType)
|
|
VerifyEndOfContainer(void)
|
Kamu işlevleri
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 )
Kapsayıcının öğelerini okumak için bir TLVUpdater nesnesi hazırlar.
Ayrıca, TLV çıkışındaki container nesnesinin bir başlangıcını da kodlar.
EnterContainer() yöntemi, geçerli TLVUpdater nesnesini bir TLV kapsayıcısının (yapı, dizi veya yol) üye öğelerini okumaya başlayacak şekilde hazırlar. Uygulamaların her EnterContainer() çağrısı için ExitContainer() işlevine karşılık gelen bir çağrı yapması gerekir.
EnterContainer() çağrıldığında, TLVUpdater'ın okuyucusu kapsayıcı öğesine yerleştirilmelidir. Yöntem, kapsayıcıyı okurken güncelleyicinin bağlamını kaydetmek için kullanılacak bir TLVType değerine başvuruyu bağımsız değişken olarak alır.
EnterContainer() yöntemi döndürüldüğünde, güncelleyici kapsayıcının ilk üyesinden hemen önce konumlandırılır. Next() işlevinin sürekli olarak çağrılması, güncelleyiciyi sona ulaşılana kadar koleksiyonun üyeleri arasında ilerletir. Bu noktada güncelleyici, WEAVE_END_OF_TLV değerini döndürür.
Uygulama bir kapsayıcıyı okumayı bitirdikten sonra, ExitContainer() yöntemini çağırarak öğeleri kapsayıcıdan sonra okumaya devam edebilir.
Ayrıntılar | |||||||
---|---|---|---|---|---|---|---|
Parametreler |
|
||||||
Döndürülen Değerler |
|
ExitContainer
WEAVE_ERROR ExitContainer( TLVType outerContainerType )
Bir TLV kapsayıcı öğesinin okunmasını tamamlar ve TLV çıktısındaki TLV öğesinin bir ucunu kodlar.
ExitContainer() yöntemi, bir EnterContainer() çağrısından sonra TLVUpdater nesnesinin durumunu geri yükler. Uygulamaların her EnterContainer() çağrısına karşılık gelen bir çağrı yapması ve EnterContainer() yöntemi tarafından döndürülen bağlam değerini iletmesi gerekir.ExitContainer()
ExitContainer() döndürüldüğünde, TLVUpdater okuyucusu TLV girişindeki kapsayıcıyı izleyen ilk öğeden hemen önce konumlandırılır. Bu noktadan itibaren uygulamalar, kalan öğelerde ilerlemek için Next() işlevini çağırabilir.
EnterContainer() çağrıldıktan sonra, uygulamalar temel kapsayıcıdaki tüm öğelerin okunup okunmadığına bakılmaksızın herhangi bir zamanda güncelleyicide ExitContainer() işlevini çağırabilir. Ayrıca, kapsayıcıdaki tüm öğeleri okumadan önce ExitContainer() çağrısının, güncellenen kapsayıcının TLV çıktısında kısaltılmasına neden olacağını unutmayın.
Ayrıntılar | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parametreler |
|
||||||||||
Döndürülen Değerler |
|
Sonlandır
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
Başlat
WEAVE_ERROR Init( uint8_t *buf, uint32_t dataLen, uint32_t maxLen )
Tek bir giriş arabelleğini düzenlemek için bir TLVUpdater nesnesi başlatın.
Bu yöntemin çağrılmasında, arabellekteki TLV verileri arabelleğin sonuna taşınır ve bu taşınan arabellek üzerinde özel bir TLVReader nesnesi başlatılır. Şu anda başlangıçta kullanılabilir olan boş alanda özel bir TLVWriter nesnesi de başlatılır. Uygulamalar, TLVUpdater verilerini ayrıştırmak ve mevcut öğeleri değiştirmek/silmek veya kodlamaya yeni öğeler eklemek için TLVUpdater nesnesini kullanabilir.
Ayrıntılar | |||||||
---|---|---|---|---|---|---|---|
Parametreler |
|
||||||
Döndürülen Değerler |
|
Başlat
WEAVE_ERROR Init( TLVReader & aReader, uint32_t freeLen )
TLVReader kullanarak bir TLVUpdater nesnesini başlatın.
Bu yöntemin çağrılmasında, TLVReader tarafından işaret edilen arabellekteki TLV verileri geçerli okuma noktasından arabelleğin sonuna taşınır. Bu yeni konumdan okuma için yeni bir özel TLVReader nesnesi başlatılırken açılan arabellek alanına yazmak için yeni bir özel TLVWriter nesnesi başlatılır.
TLVReader bir öğe "on"da konumlandırılmışsa öncelikle bu öğenin başına geri çekilir. Ayrıca, bu yedeklemenin kapsayıcı öğeleriyle iyi çalıştığını unutmayın. Yani, TLVReader EnterContainer() işlevi için zaten kullanıldıysa, geri alınacak hiçbir şey yoktur. Ancak, TLVReader kapsayıcı öğesine yerleştirilmişse ve EnterContainer() henüz çağrılmamışsa TLVReader nesnesi kapsayıcı başlığının başına kadar yedeklenir.
Giriş TLVReader nesnesi geri dönmeden önce imha edilir ve uygulama, dönüşte bunu kullanmamalıdır.
Ayrıntılar | |||||||
---|---|---|---|---|---|---|---|
Parametreler |
|
||||||
Döndürülen Değerler |
|
Taşı
WEAVE_ERROR Move( void )
Geçerli öğeyi TLV girişinden TLV çıkışına kopyalar.
Migrate() yöntemi, TLVUpdater okuyucusunun konumlandırıldığı geçerli öğeyi TLVUpdater'in yazarına kopyalar. Uygulama, bu yöntemi çağırmadan önce Next() işlevini çağırmalı ve TLVUpdater'ın okuyucusunu bir öğeye yerleştirmelidir. Okuyucu, çağrı sırasında bir kapsayıcı öğesine yerleştirilmişse TLVReader::Next() yönteminde olduğu gibi kapsayıcının tüm üyeleri kopyalanır. Okuyucu herhangi bir öğeye yerleştirilmemişse bu yöntemin çağrılmasında hiçbir şey değişmez.
Ayrıntılar | |||||||||
---|---|---|---|---|---|---|---|---|---|
Döndürülen Değerler |
|
MoveUntilEnd
void MoveUntilEnd( void )
TLVUpdater'in geçerli okuma noktasından giriş TLV arabelleğinin sonuna kadar her şeyi çıkışa taşıyın.
Bu yöntem, TLVUpdater'ın geçerli okuma noktasından okuyucu arabelleğinin sonuna kadar her şeyin TLVUpdater'in yazarına taşınmasını destekler.
Sonraki
WEAVE_ERROR Next( void )
Geçerli öğeyi atlayın ve TLVUpdater nesnesini TLV girişinde sonraki öğeye ilerletin.
Next() yöntemi, TLV girişindeki geçerli öğeyi atlar ve TLVUpdater'in okuyucusunu aynı kapsama bağlamında bulunan bir sonraki öğeye ilerletir. Özellikle, okuyucu bir TLV kodlamasının en dış düzeyinde konumlandırılmışsa Next() fonksiyonunun çağrılması, okuyucuyu bir sonraki en üstteki öğeye ilerletir. Okuyucu bir TLV kapsayıcı öğesinin (yapı, dizi veya yol) içine yerleştirilmişse Next() işlevi çağrılırsa okuyucu, kapsayıcının bir sonraki üye öğesine ilerler.
Next(), okuyucu hareketini geçerli kapsayıcı bağlamıyla sınırladığından, okuyucu bir kapsayıcı öğesine yerleştirildiğinde Next() çağrısı, kapsayıcıdan üzerine geçerek üye öğeleri (ve iç içe yerleştirilmiş herhangi bir kapsayıcının üyeleri) kapsayıcıdan sonraki ilk öğeye ulaşana kadar atlanır.
Belirli bir kapsama bağlamında başka öğe yoksa Next() yöntemi WEAVE_END_OF_TLV hatası döndürür ve okuyucunun konumu değişmez.
Ayrıntılar | |||||
---|---|---|---|---|---|
Döndürülen Değerler |
|
Veri destekli
WEAVE_ERROR Put( uint64_t tag, int8_t v )
Veri destekli
WEAVE_ERROR Put( uint64_t tag, int16_t v )
Veri destekli
WEAVE_ERROR Put( uint64_t tag, int32_t v )
Veri destekli
WEAVE_ERROR Put( uint64_t tag, int64_t v )
Veri destekli
WEAVE_ERROR Put( uint64_t tag, uint8_t v )
Veri destekli
WEAVE_ERROR Put( uint64_t tag, uint16_t v )
Veri destekli
WEAVE_ERROR Put( uint64_t tag, uint32_t v )
Veri destekli
WEAVE_ERROR Put( uint64_t tag, uint64_t v )
Veri destekli
WEAVE_ERROR Put( uint64_t tag, int8_t v, bool preserveSize )
Veri destekli
WEAVE_ERROR Put( uint64_t tag, int16_t v, bool preserveSize )
Veri destekli
WEAVE_ERROR Put( uint64_t tag, int32_t v, bool preserveSize )
Veri destekli
WEAVE_ERROR Put( uint64_t tag, int64_t v, bool preserveSize )
Veri destekli
WEAVE_ERROR Put( uint64_t tag, uint8_t v, bool preserveSize )
Veri destekli
WEAVE_ERROR Put( uint64_t tag, uint16_t v, bool preserveSize )
Veri destekli
WEAVE_ERROR Put( uint64_t tag, uint32_t v, bool preserveSize )
Veri destekli
WEAVE_ERROR Put( uint64_t tag, uint64_t v, bool preserveSize )
Veri destekli
WEAVE_ERROR Put( uint64_t tag, float v )
Veri destekli
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 nesnesi için Dolaylı Profil Kimliği'ni ayarlayın.
Bu yöntem, TLVUpdater nesnesi için örtülü profil kimliğini ayarlar. Güncelleyiciden yeni bir öğeyi kodlaması istendiğinde, yeni öğeyle ilişkilendirilmiş etiketin profil kimliği profileId
değeriyle eşleşiyorsa güncelleyici etiketi örtülü biçimde kodlar. Böylece, işlemde profil kimliğini atlar.
Ayrıntılar | |||
---|---|---|---|
Parametreler |
|
StartContainer
WEAVE_ERROR StartContainer( uint64_t tag, TLVType containerType, TLVType & outerContainerType )