nl:: Kumaş:: TLV:: TLVUpdater
#include <src/lib/core/WeaveTLV.h>
TLV kodlamasında öğeleri düzenlemek/eklemek/silmek için birleştirilmiş bir Okuyucu/Yazar arayüzü sağlar.
Özet
TLVUpdater, TLVReader ve TLVWriter nesnelerinin bir birleşimidir ve kodlamadaki verileri düzenlemek/silmek ve TLV kodlamasına yeni öğeler eklemek için arayüz yöntemleri sunar. TLVUpdater nesnesi temel olarak iki imleç gibi çalışır: biri mevcut kodlamayı okumak için, diğeri de yazmak için (mevcut verileri kopyalamak veya yeni veri yazmak için).
Anlamsal olarak, TLVUpdater nesnesi, TLVReader ve TLVWriter birleşiminden oluşur. TLVUpdater yöntemleri, TLVReader/TLVWriter uygulamasında benzer şekilde adlandırılan eşdeğerleriyle benzer anlamlara sahiptir veya daha az anlama sahiptir. Anlamlarda farklılıklar olduğunda, farklılıklar WeaveTLVUpdater.cpp işlevinin işlev yorum bölümünde açıkça belirtilir.
TLVUpdater's PutBytes() ve PutString() yöntemleriyle ilgili önemli notlardan biri, işaretlemenin yalnızca bir taşma gerçekleştiğinde öğe başlığı yazılı olarak bozuk bir durumda bırakılabilmesidir. Uygulamalar, kodlamayı yazmaya yetecek kadar boş alan olduğundan yaklaşık emin olmak için GetRemainingFreeLength() işlevini çağırabilir. GetRemainingFreeLength() işlevinin size yalnızca kullanılabilir ücretsiz baytları söylediğini ve uygulamanın yazılan kodlanmış verilerin uzunluğunu bilmesinin bir yolu olmadığını unutmayın. Bir taşma olması durumunda, hem PutBytes() hem de PutString(), arayana WEAVE_ERROR_BUFFER_TOO_SMALL döndürür.
Ayrıca, Next() yönteminin hem mevcut öğeyi atlamak hem de dahili okuyucuyu bir sonraki öğeye taşımak için aşırı yüklendiğini unutmayın. Daha önce kodlanan öğeleri atlamak, dahili yazarın boş alan durumu değişkenlerinin yeni serbest bırakılan alanı da dikkate alacak şekilde değiştirilmesini gerektirdiğinden (atlanarak atlanabilir), uygulamanın güncel değeri geri yazmak istemediği bir Get() yönteminden sonra güncelleyicide Next() yöntemini çağırması beklenir (bu işlem mevcut öğeyi atlamaya eşdeğerdir).
Herkese açık işlevler |
|
---|---|
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)
|
Bir 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 TLVUpdater nesnesini başlatın.
|
Init(TLVReader & aReader, uint32_t freeLen)
|
TLVReader kullanarak bir TLVUpdater nesnesini başlatın.
|
Move(void)
|
|
MoveUntilEnd(void)
|
void
TLVUpdater'ın geçerli okuma noktasından 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 bir sonraki öğeye taşıyın.
|
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)
|
Herkese açık işlevler
Kopyalama Öğesi
WEAVE_ERROR CopyElement( TLVReader & reader )
Kopyalama Öğesi
WEAVE_ERROR CopyElement( uint64_t tag, TLVReader & reader )
Çift Baytlar
WEAVE_ERROR DupBytes( uint8_t *& buf, uint32_t & dataLen )
Kopya Dizesi
WEAVE_ERROR DupString( char *& buf )
SonKapsayıcı
WEAVE_ERROR EndContainer( TLVType outerContainerType )
EnterKapsayıcısı
WEAVE_ERROR EnterContainer( TLVType & outerContainerType )
Bir kapsayıcının öğelerini okumak için bir TLVUpdater nesnesi hazırlar.
Ayrıca, TLV çıkışındaki kapsayıcı nesnenin başlangıcını da kodlar.
EnterContainer() yöntemi, mevcut TLVUpdater nesnesini, bir TLV kapsayıcısının (yapı, dizi veya yol) üye öğelerini okumaya başlayacak şekilde hazırlar. EnterContainer() çağrılarına yapılan her çağrı için ExitContainer() işlevine karşılık gelen bir çağrı yapılması gerekir.
EnterContainer() adı verilen TLVUpdater' okuyucusu, kapsayıcı öğesinin üzerine yerleştirilmelidir. Yöntem bir bağımsız değişken olarak, kapsayıcı okunurken güncelleyicinin bağlamını kaydetmek için kullanılacak bir TLVType değerine başvuru alır.
EnterContainer() yöntemi döndüğünde, güncelleyici, kapsayıcının ilk üyesinden önce konumlandırılır. Tekrar eden Next() çağrısı, güncelleyiciyi sona erinceye kadar koleksiyonun üyeleri üzerinden ilerletir. Bu noktada güncelleyici WEAVE_END_OF_TLV döndürür.
Uygulama, kapsayıcı okumayı tamamladığında, ExitContainer() yöntemini çağırarak kapsayıcıdan sonra öğeleri okumaya devam edebilir.
Ayrıntılar | |||||||
---|---|---|---|---|---|---|---|
Parametreler |
|
||||||
İade Değerleri |
|
ÇıkışKapsayıcısı
WEAVE_ERROR ExitContainer( TLVType outerContainerType )
Bir TLV kapsayıcı öğesinin okumasını tamamlar ve TLV çıkışındaki bir TLV öğesinin sonunu kodlar.
ExitContainer() yöntemi, bir TLVUpdater nesnesinin durumunu EnterContainer() çağrısından sonra geri yükler. EnterContainer() uygulamalarına yapılan her çağrı için EnterContainer() yöntemi tarafından döndürülen bağlam değerini ileterek ExitContainer() işlevine karşılık gelen bir çağrı yapması gerekir.
ExitContainer() döndüğünde, TLVUpdater okuyucusu, girişte TLV'yi izleyen ilk öğeden hemen önce konumlandırılır. Bu noktadan sonra, uygulamalar kalan öğeler arasında gezinmek için Next() işlevini çağırabilir.
EnterContainer() çağrıldıktan sonra, uygulamalar, kapsayıcıdaki tüm öğelerin okunup okunmadığına bakılmaksızın, herhangi bir zamanda güncelleyicide ExitContainer() çağrısı yapabilir. Ayrıca, kapsayıcıdaki tüm öğeleri okumadan önce ExitContainer() çağrısı yapıldığında, güncellenen kapsayıcının TLV çıkışında kesileceğini unutmayın.
Ayrıntılar | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parametreler |
|
||||||||||
İade Değerleri |
|
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 )
GetByte'lar
WEAVE_ERROR GetBytes( uint8_t *buf, uint32_t bufSize )
GetContainerType
TLVType GetContainerType( void ) const
VeriVerimi Alma
WEAVE_ERROR GetDataPtr( const uint8_t *& data )
Alma ImplicitProfil Kimliği
uint32_t GetImplicitProfileId( void )
GetLength
uint32_t GetLength( void ) const
ReadLengthRead
uint32_t GetLengthRead( void ) const
GetLengthWrite
uint32_t GetLengthWritten( void )
Okuyucu
void GetReader( TLVReader & containerReader )
Kalan Serbest
uint32_t GetRemainingFreeLength( void )
Kalan Uzunluk
uint32_t GetRemainingLength( void ) const
Dizeyi Al
WEAVE_ERROR GetString( char *buf, uint32_t bufSize )
GetTag
uint64_t GetTag( void ) const
AlmaTürü
TLVType GetType( void ) const
İnit
WEAVE_ERROR Init( uint8_t *buf, uint32_t dataLen, uint32_t maxLen )
Tek bir giriş arabelleğini düzenlemek için TLVUpdater nesnesini başlatın.
Bu yöntem çağrıldığında, arabellekteki TLV verileri arabelleğin sonuna taşınır ve yeri değiştirilen bu arabellekte özel bir TLVReader nesnesi başlatılır. Ayrıca, artık başlangıçta kullanılabilir olan boş alanda özel bir TLVWriter nesnesi de başlatılır. Uygulamalar, TLV verilerini ayrıştırmak, mevcut öğeleri değiştirmek/silmek veya kodlamaya yeni öğeler eklemek için TLVUpdater nesnesini kullanabilir.
Ayrıntılar | |||||||
---|---|---|---|---|---|---|---|
Parametreler |
|
||||||
İade Değerleri |
|
İnit
WEAVE_ERROR Init( TLVReader & aReader, uint32_t freeLen )
TLVReader kullanarak bir TLVUpdater nesnesini başlatın.
Bu yöntemi çağırırken, arabellekte TLVReader tarafından işaret edilen TLV verileri, geçerli okuma noktasından arabelleğin sonuna taşınır. Bu yeni konumdan okumak için yeni bir özel TLVReader nesnesi başlatılır. Buna, serbest bırakılan arabellek alanına yazmak için yeni bir özel TLVWriter nesnesi başlatılır.
TLVReader zaten bir öğe üzerinde konumlandırılıyorsa önce bu öğenin başına geri eklendiğini unutmayın. Bu yedeklemenin, kapsayıcı öğelerle iyi çalıştığını, yani EnterContainer() işlevini çağırmak için TLVReader'ı zaten kullanılmışsa, iptal edilecek bir şey olmadığını unutmayın. Ancak TLVReader, kapsayıcı öğesine yerleştirildiyse ve EnterContainer() henüz çağrılmadığı takdirde, TLVReader nesnesi kapsayıcı kapsayıcısının başına yedeklenir.
Geri verilen TLVReader nesnesi tekrar imha edilecek ve uygulamanın döndürdüğü verilerde aynısından yararlanmaması gerekir.
Ayrıntılar | |||||||
---|---|---|---|---|---|---|---|
Parametreler |
|
||||||
İade Değerleri |
|
Taşı
WEAVE_ERROR Move( void )
Geçerli öğeyi TLV değerinden TLV çıkışına kopyalar.
Move()Yöntemi, TLVUpdater's okuyucusunun bulunduğu mevcut öğeyi TLVUpdaterauthor'e kopyalar Uygulama, bu yöntemi çağırmadan önce Next() işlevini çağırmalı ve TLVUpdater'’ın okuyucusunu bir öğeye konumlandırmalıdır. TLVReader::Next() yönteminde olduğu gibi, çağrı sırasında okuyucu bir kapsayıcı öğesinin üzerine yerleştirilirse, kapsayıcının tüm üyeleri kopyalanır. Okuyucu herhangi bir öğeye yerleştirilmezse bu yöntemin çağrılmasıyla ilgili herhangi bir değişiklik olmaz.
Ayrıntılar | |||||||||
---|---|---|---|---|---|---|---|---|---|
İade Değerleri |
|
Sona Kadar Taşı
void MoveUntilEnd( void )
TLVUpdater'ın geçerli okuma noktasından TLV arabelleğinin sonuna kadar her şeyi çıkışa taşıyın.
Bu yöntem, TLVUpdater''s geçerli okuma noktasından okuyucu arabelleğinin sonuna kadar her şeyin TLVUpdater's author'e taşınmasını destekler.
Sonraki
WEAVE_ERROR Next( void )
Geçerli öğeyi atlayın ve TLVUpdater nesnesini TLV girişinde bir sonraki öğeye taşıyın.
Next() yöntemi, TLV girişinde geçerli öğeyi atlar ve TLVUpdater'ın okuyucusunu aynı kapsama bağlamında bulunan sonraki öğeye taşır. Özellikle, okuyucu TLV kodlamasının en üst düzeyinde konumlandırılırsa Next() çağrısı, okuyucuyu bir sonraki en üstteki öğeye taşır. Okuyucu bir TLV kapsayıcı öğesinin (konum, dizi veya yol) içine yerleştirilirse Next() çağrısı, kapsayıcının bir sonraki üye öğesine geçirilir.
Next() işlevi, okuyucu hareketini geçerli kapsayıcı bağlamıyla sınırlar. Okuyucu bir kapsayıcı öğesine yerleştirildiğinde Next() işlevini çağırmak kapsayıcı üzerinde yükseltilir ve kapsayıcıdan sonraki ilk öğeye ulaşana kadar, üye öğeleri (ve iç içe yerleştirilmiş kapsayıcıların üyeleri) atlanır.
Belirli bir kapsam bağlamı içinde başka öğe olmadığında Next() yöntemi bir WEAVE_END_OF_TLV hatası döndürür ve okuyucunun konumu değişmez.
Ayrıntılar | |||||
---|---|---|---|---|---|
İade Değerleri |
|
Koy
WEAVE_ERROR Put( uint64_t tag, int8_t v )
Koy
WEAVE_ERROR Put( uint64_t tag, int16_t v )
Koy
WEAVE_ERROR Put( uint64_t tag, int32_t v )
Koy
WEAVE_ERROR Put( uint64_t tag, int64_t v )
Koy
WEAVE_ERROR Put( uint64_t tag, uint8_t v )
Koy
WEAVE_ERROR Put( uint64_t tag, uint16_t v )
Koy
WEAVE_ERROR Put( uint64_t tag, uint32_t v )
Koy
WEAVE_ERROR Put( uint64_t tag, uint64_t v )
Koy
WEAVE_ERROR Put( uint64_t tag, int8_t v, bool preserveSize )
Koy
WEAVE_ERROR Put( uint64_t tag, int16_t v, bool preserveSize )
Koy
WEAVE_ERROR Put( uint64_t tag, int32_t v, bool preserveSize )
Koy
WEAVE_ERROR Put( uint64_t tag, int64_t v, bool preserveSize )
Koy
WEAVE_ERROR Put( uint64_t tag, uint8_t v, bool preserveSize )
Koy
WEAVE_ERROR Put( uint64_t tag, uint16_t v, bool preserveSize )
Koy
WEAVE_ERROR Put( uint64_t tag, uint32_t v, bool preserveSize )
Koy
WEAVE_ERROR Put( uint64_t tag, uint64_t v, bool preserveSize )
Koy
WEAVE_ERROR Put( uint64_t tag, float v )
Koy
WEAVE_ERROR Put( uint64_t tag, double v )
PutBoole Dili
WEAVE_ERROR PutBoolean( uint64_t tag, bool v )
Sürat Bayrakları
WEAVE_ERROR PutBytes( uint64_t tag, const uint8_t *buf, uint32_t len )
Null
WEAVE_ERROR PutNull( uint64_t tag )
Dize
WEAVE_ERROR PutString( uint64_t tag, const char *buf )
Dize
WEAVE_ERROR PutString( uint64_t tag, const char *buf, uint32_t len )
Ayarlanan Profil Kimliği
void SetImplicitProfileId( uint32_t profileId )
TLVUpdater nesnesi için Dolaylı Profil Kimliği'ni ayarlayın.
Bu yöntem, TLVUpdater nesnesinin örtülü profil kimliğini belirler. Güncelleyiciden yeni bir öğeyi kodlaması istendiğinde, yeni öğeyle ilişkilendirilen etiketin profil kimliği profileId
değeriyle eşleşirse, güncelleyici etiketi örtülü biçimde kodlar ve böylece işlemde profil kimliğini atlar.
Ayrıntılar | |||
---|---|---|---|
Parametreler |
|
BaşlangıçKapsayıcı
WEAVE_ERROR StartContainer( uint64_t tag, TLVType containerType, TLVType & outerContainerType )