nl:: Weave:: 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 birleşimidir ve bir kodlamadaki verileri düzenleme/silmenin yanı sıra TLV kodlamasına yeni öğeler eklemek için arayüz yöntemleri sağlar. TLVUpdater nesnesi, biri mevcut kodlamayı, diğeri de yazmaya yönelik (mevcut verilerin üzerine kopyalamak veya yeni veriler yazmak için) iki imleç görevi görür.
Semantik olarak TLVUpdater nesnesi, TLVReader ve TLVWriter'ın birleşimi gibi çalışır. TLVUpdater yöntemleri, TLVReader/TLVWriter'da benzer şekilde adlandırılmış eşdeğerleriyle daha fazla veya daha az benzer anlamlara sahiptir. Anlamsal açıdan farklılıklar olduğunda, bu farklar WeaveTLVUpdater.cpp dosyasındaki işlevin açıklama bölümünde açıkça belirtilmiştir.
TLVUpdater'ın PutBytes() ve PutString() yöntemleriyle ilgili özellikle önemli bir nokta, kodlamayı bozuk bir durumda, bir taşma oluştuğunda yalnızca öğe üstbilgisinin yazıldığı şekilde bırakabilmesidir. Uygulamalar, kodlamayı yazmak için yaklaşık yeterli boş alan bulunduğundan emin olmak için GetRemainingFreeLength()'u çağırabilir. GetRemainingFreeLength() yalnızca kullanılabilir boş bayt miktarını bildirdiğini ve uygulamanın yazılan kodlanmış verilerin uzunluğunu bilemeyeceğini unutmayın. Taşma durumunda hem PutBytes() hem de PutString(), çağrı yapana WEAVE_ERROR_BUFFER_TOO_SMALL değerini döndürür.
Ayrıca, Next() yönteminin hem geçerli öğeyi atlamak hem de dahili okuyucunun sonraki öğeye ilerlemesi için aşırı yüklendiğini unutmayın. Zaten kodlanmış öğelerin atlanması, dahili yazarın boş alan durumu değişkenlerinin yeni boş alanı hesaba katacak şekilde değiştirilmesini (atlayarak kullanılabilir hale gelir) gerektirdiğinden, uygulamanın, değeri geri yazmak istemediği bir Get() yönteminden (bu, geçerli öğeyi atlamaya eşdeğer olan) bir Get() yönteminden sonra güncelleyicide Next() çağrısı yapması beklenir.
ziyaret edin.
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)
|
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 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şindeki sonraki öğeye geçirin.
|
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 nesnesinin Dolaylı Profil Kimliğini ayarlayın.
|
StartContainer(uint64_t tag, TLVType containerType, TLVType & outerContainerType)
|
|
VerifyEndOfContainer(void)
|
Herkese açık işlevler
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ışında container nesnesinin başlangıcını kodlar.
EnterContainer() yöntemi, bir TLV kapsayıcısının (yapı, dizi veya yol) üye öğelerini okumaya başlamak için geçerli TLVUpdater nesnesini hazırlar. EnterContainer() uygulamalarına yapılan her çağrının, ExitContainer() işlevine karşılık gelen bir çağrı yapması gerekir.
EnterContainer() çağrıldığında, TLVUpdater'ın okuyucusu kapsayıcı öğeye yerleştirilmelidir. Yöntem, güncelleyicinin kapsayıcıyı okurken bağlamını kaydetmek için kullanılacak olan TLVType değerine referansı bağımsız değişken olarak alır.
EnterContainer() yöntemi döndüğünde güncelleyici, kapsayıcının ilk üyesinden hemen önce konumlandırılır. Next() tekrarlı bir şekilde çağrıldığında, güncelleyici sona ulaşılıncaya kadar koleksiyonun üyeleri arasında ilerler. 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 kapsayıcıdan sonra öğeleri okumaya devam edebilir.
Ayrıntılar | |||||||
---|---|---|---|---|---|---|---|
Parametreler |
|
||||||
Değerleri Döndür |
|
ExitContainer
WEAVE_ERROR ExitContainer( TLVType outerContainerType )
Bir TLV kapsayıcı öğesinin okunmasını tamamlar ve TLV çıkışında TLV öğesinin bir sonunu kodlar.
ExitContainer() yöntemi, EnterContainer() çağrısından sonra bir TLVUpdater nesnesinin durumunu geri yükler. EnterContainer() uygulamalarına yapılan her çağrının, EnterContainer() yöntemi tarafından döndürülen bağlam değerini ileterek ExitContainer() uygulamasına karşılık gelen bir çağrı yapması gerekir.
ExitContainer() döndürüldüğünde TLVUpdater okuyucusu, TLV girişindeki kapsayıcıyı takip eden ilk öğenin hemen önüne yerleştirilir. Bu noktadan sonra uygulamalar, kalan öğelerde ilerlemek için Next() yöntemini çağırabilir.
EnterContainer() çağrıldıktan sonra, uygulamalar temel kapsayıcıdaki tüm öğelerin okunmuş olup olmadığı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 çıkışında kesilmesine neden olacağını unutmayın.
Ayrıntılar | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parametreler |
|
||||||||||
Değerleri Döndür |
|
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
Init
WEAVE_ERROR Init( uint8_t *buf, uint32_t dataLen, uint32_t maxLen )
Tek bir giriş arabelleğini düzenlemek için bir TLVUpdater nesnesini başlatın.
Bu yöntem çağrıldığında, arabellekteki TLV verileri arabelleğin sonuna taşınır ve bu taşınan arabellekte özel bir TLVReader nesnesi başlatılır. Şu anda başlangıçta kullanılabilen boş alanda da özel bir TLVWriter nesnesi başlatılır. Uygulamalar, TLVUpdater verilerini ayrıştırmak ve mevcut öğeleri değiştirmek/silmek veya kodlamaya yeni öğeler eklemek için TLV nesnesini kullanabilir.
Ayrıntılar | |||||||
---|---|---|---|---|---|---|---|
Parametreler |
|
||||||
Değerleri Döndür |
|
Init
WEAVE_ERROR Init( TLVReader & aReader, uint32_t freeLen )
TLVReader kullanarak bir TLVUpdater nesnesini başlatın.
Bu yöntem çağrıldığında, TLV'ın işaret ettiği arabellekteki TLVReader verileri geçerli okuma noktasından arabelleğin sonuna taşınır. Bu yeni konumdan okuması 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, zaten "on" olarak konumlandırıldıysa daha önce söz konusu öğenin başına yedeklenir. Bu yedeklemenin kapsayıcı öğeleriyle iyi çalıştığını unutmayın. Örneğin, TLVReader daha önce EnterContainer() çağrısı yapmak için kullanıldıysa geri alınacak 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 yedeklenir.
Giriş TLVReader nesnesi geri dönmeden önce imha edilir ve uygulama, iade sırasında aynısını kullanmamalıdır.
Ayrıntılar | |||||||
---|---|---|---|---|---|---|---|
Parametreler |
|
||||||
Değerleri Döndür |
|
Taşı
WEAVE_ERROR Move( void )
Geçerli öğeyi TLV girişinden TLV çıkışına kopyalar.
Move() yöntemi, TLVUpdater okuyucusunun üzerinde bulunduğu geçerli öğeyi TLVUpdater'ın yazarına kopyalar. Uygulama, bu yöntemi çağırmadan önce Next() yöntemini çağırmalı ve TLVUpdater'ın okuyucusunu bir öğeye konumlandırmalıdır. TLVReader::Next() yönteminde olduğu gibi okuyucu, çağrı sırasında bir kapsayıcı öğesinde konumlandırıldıysa kapsayıcının tüm üyeleri kopyalanır. Okuyucu herhangi bir öğe üzerine konumlandırılmadıysa bu yöntemin çağrılmasında hiçbir değişiklik olmaz.
Ayrıntılar | |||||||||
---|---|---|---|---|---|---|---|---|---|
Değerleri Döndür |
|
MoveUntilEnd
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'ın geçerli okuma noktasından okuyucu arabelleğinin sonuna kadar TLVUpdater'ın yazarına kadar her şeyin taşınmasını destekler.
Sonraki
WEAVE_ERROR Next( void )
Geçerli öğeyi atlayın ve TLVUpdater nesnesini TLV girişindeki sonraki öğeye geçirin.
Next() yöntemi, TLV girişindeki geçerli öğeyi atlar ve TLVUpdater'ın okuyucusunu aynı kapsayıcı bağlamında yer alan sonraki öğeye iletir. Okuyucu özellikle bir TLV kodlamasının en dış seviyesinde konumlandırılıyorsa Next() çağrısının yapılması, onu bir sonraki, en üstteki öğeye ilerler. Okuyucu bir TLV kapsayıcı öğesinin (yapı, dizi veya yol) içinde konumlandırıldıysa Next() çağrısının yapılması, okuyucuyu kapsayıcının sonraki üye öğesine yönlendirir.
Next(), okuyucu hareketini geçerli kapsama bağlamıyla kısıtladığından, okuyucu bir kapsayıcı öğesi üzerine konumlandırıldığında Next() çağrısı yapıldığında kapsayıcının üzerine ilerler ve üye öğeleri (ve iç içe yerleştirilmiş kapsayıcıların üyeleri) kapsayıcıdan sonraki ilk öğeye ulaşana kadar atlanır.
Belirli bir kapsama bağlamında 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 | |||||
---|---|---|---|---|---|
Değerleri Döndür |
|
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 nesnesinin Dolaylı Profil Kimliğini ayarlayın.
Bu yöntem, TLVUpdater nesnesinin örtülü profil kimliğini ayarlar. 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 dolaylı biçimde kodlar. Böylece, işlemdeki profil kimliğini atlar.
Ayrıntılar | |||
---|---|---|---|
Parametreler |
|
StartContainer
WEAVE_ERROR StartContainer( uint64_t tag, TLVType containerType, TLVType & outerContainerType )