nl:: örgü:: TLV:: TLVGüncelleyici

#include <src/lib/core/WeaveTLV.h>

/ Düzenleme ekleme / elemanları silinmesi için bir birleştirilmiş okuyucu / yazıcı arayüzü sağlar TLV kodlama.

Özet

TLVUpdater bir birlikTLVReader veTLVWriter nesneler ve / düzenleme silme verileri bir kodlama hem de yeni elemanları eklemek için arayüz yöntemler sağlar TLV kodlama. TLVUpdater amacı esas olarak iki imleçler, (mevcut veri fazla kopyalama ya da yeni bir veri yazma için ya da) yazmak için mevcut kodlama okumak için bir başka görevi görür.

Semantik, TLVUpdater nesne fonksiyonları arasında bir birlik gibiTLVReader veTLVWriter . TLVUpdater yöntemler TLVReader / TLVWriter benzer şekilde adlandırılmış muadilleri olarak az ya da çok benzer anlamlara sahiptir. Semantik farklılıklar vardır durumlarda, farklılıklar açıkça işlevin yorum bölümünde belgelenmiştir WeaveTLVUpdater.cpp .

Yaklaşık bir özellikle önemli bir not TLVUpdater sitesindeki PutBytes () ve PutString () yöntemleri bir taşma oluştuğunda yazılan tek eleman bir başlık ile bozuk bir halde kodlama bırakmak olabilir. Uygulamalar emin kodlamayı yazmak için yaklaşık Yeterli boş alan olduğundan emin olmak için GetRemainingFreeLength () çağırabilir. GetRemainingFreeLength () size sadece boş bayt söyler ve uygulama yazılı alır kodlanmış verinin uzunluğunu bilmemiz için bir yol olduğunu unutmayın. Bir taşma durumunda, hem PutBytes() hem de PutString(), arayana WEAVE_ERROR_BUFFER_TOO_SMALL döndürür.

Ayrıca, not olduğunu Sonraki () metodu sonraki öğeye iç okuyucuyu ilerlemek aynı zamanda mevcut eleman atlayıp hem aşırı yüklü. Zaten kodlanmış elemanları atlayarak (atlayarak hazır) yeni serbest alan için hesaba iç yazarın boş alan devlet değişkenlerini değiştirerek gerektirdiğinden, uygulama çağrısında bulunması bekleniyor İleri () , değeri o değil bir Get () yöntemine sonra güncelleyici üzerinde ' geri yazmak istiyorum (bu, geçerli öğeyi atlamaya eşdeğerdir).

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)
Bir hazırlar TLVUpdater bir kabın elemanlarını okumak için bir nesne.
ExitContainer ( TLVType outerContainerType)
Bir okuma tamamlar TLV kap elemanı ve bir ucunu kodlayan TLV çıkış elemanı TLV .
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)
Bir başlatma TLVUpdater düzenlemek için nesnenin tek bir giriş tamponu.
Init (TLVReader & aReader, uint32_t freeLen)
Bir başlatma TLVUpdater bir kullanarak nesneyiTLVReader .
Move (void)
Kopya giriş akım elemanı TLV çıkışı TLV .
MoveUntilEnd (void)
void
Her şeyi hareket TLVUpdater girişinin sonuna kadar o anki okuma alanına TLV çıkışına fazla tampon.
Next (void)
Geçerli elemanı atla ve ilerletmek TLVUpdater girişi sonraki elemana nesneyi 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
İçin Örtülü Profili kimliğini ayarla TLVUpdater nesne.
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
)

DupByte

WEAVE_ERROR DupBytes(
  uint8_t *& buf,
  uint32_t & dataLen
)

DupString

WEAVE_ERROR DupString(
  char *& buf
)

EndContainer

WEAVE_ERROR EndContainer(
  TLVType outerContainerType
)

Konteyner Girin

WEAVE_ERROR EnterContainer(
  TLVType & outerContainerType
)

Bir hazırlar TLVUpdater bir kabın elemanlarını okumak için bir nesne.

Aynı zamanda, çıkış konteyner nesnesinin bir başlangıç kodlayan TLV .

EnterContainer () metodu mevcut hazırlar TLVUpdater bir üyesi elemanları okumaya başlamak için nesne TLV konteyner (bir yapı, dizi ya da yol). Her çağrı için EnterContainer () uygulamaları için gelen arama yapmak zorundadır ExitContainer () .

Tüm EnterContainer () olarak adlandırılır TLVUpdater bireyin okuyucu muhafaza elemanı üzerinde konumlandırılmalıdır. Yöntem, kapsayıcıyı okurken güncelleyicinin bağlamını kaydetmek için kullanılacak bir TLVType değerine bir başvuruyu argüman olarak alır.

Tüm EnterContainer () metodu döner, güncelleyici, kabın birinci elemanın hemen önce konumlandırılmıştır. Defalarca arayarak İleri () uç güncelleyici WEAVE_END_OF_TLV dönecektir noktada söz konusu, ulaşılıncaya kadar koleksiyonun üyeleri aracılığıyla güncelleyiciyi ilerletir.

Uygulama bir kap okuma bittikten sonra bu çağrı ile kabın sonra elemanlarını okumak devam ExitContainer () metodu.

Ayrıntılar
parametreler
[out] outerContainerType
Güncelleyicinin bağlamını alacak bir TLVType değerine başvuru.
Dönüş Değerleri
WEAVE_NO_ERROR
Yöntem başarılı olursa.
WEAVE_ERROR_INCORRECT_STATE
Eğer TLVUpdater okuyucu muhafaza elemanı üzerinde konumlandırılmış değildir.
other
Tarafından döndürülen herhangi bir başka örgü ya da platform hata kodu TLVWriter :: StartContainer () veya TLVReader :: EnterContainer () .

ÇıkışKonteyner

WEAVE_ERROR ExitContainer(
  TLVType outerContainerType
)

Bir okuma tamamlar TLV kap elemanı ve bir ucunu kodlayan TLV çıkış elemanı TLV .

ExitContainer () yöntemi, bir durumunu geri TLVUpdater bir çağrısının ardından nesnenin EnterContainer () . Her çağrı için EnterContainer () uygulamalar için karşılık gelen bir çağrı yapmak gerekir ExitContainer () tarafından döndürülen içerik değeri geçen EnterContainer () yöntemi.

Tüm ExitContainer () döner, TLVUpdater okuyucu giriş kabı aşağıda birinci elemanın hemen önce konumlandırılmış TLV . Bu noktadan sonra uygulamalar çağırabilirsiniz İleri () kalan elemanları aracılığıyla önceden etmek.

Bir kez EnterContainer () adı olmuştur, uygulamalar çağırabilirsiniz ExitContainer () bakılmaksızın temel kapta tüm unsurları okuma olmuştur olsun, zaman içinde herhangi bir noktada güncelleyici üzerinde. Ayrıca sesleniyor not ExitContainer () kapta tüm unsurları okumadan önce, güncellenmiş kapta sonuçlanacaktır çıktısında kesildi alma TLV .

Ayrıntılar
parametreler
[in] outerContainerType
Döndürüldü TLVType değeri EnterContainer () yöntemi.
Dönüş Değerleri
WEAVE_NO_ERROR
Yöntem başarılı olursa.
WEAVE_ERROR_TLV_UNDERRUN
Altta yatan Eğer TLV zamanından önce sona kodlayan.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Güncelleyici geçersiz veya desteklenmeyen karşılaştıysanız TLV eleman tipini.
WEAVE_ERROR_INVALID_TLV_TAG
Güncelleyici bir karşılaştıysanız TLV geçersiz bağlamda etiketi.
other
Tarafından döndürülen herhangi bir başka örgü ya da platform hata kodu TLVWriter :: EndContainer () veya TLVReader :: ExitContainer () .

Sonuçlandırmak

WEAVE_ERROR Finalize(
  void
)

Almak

WEAVE_ERROR Get(
  bool & v
)

Almak

WEAVE_ERROR Get(
  int8_t & v
)

Almak

WEAVE_ERROR Get(
  int16_t & v
)

Almak

WEAVE_ERROR Get(
  int32_t & v
)

Almak

WEAVE_ERROR Get(
  int64_t & v
)

Almak

WEAVE_ERROR Get(
  uint8_t & v
)

Almak

WEAVE_ERROR Get(
  uint16_t & v
)

Almak

WEAVE_ERROR Get(
  uint32_t & v
)

Almak

WEAVE_ERROR Get(
  uint64_t & v
)

Almak

WEAVE_ERROR Get(
  float & v
)

Almak

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
)

GetOkuyucu

void GetReader(
  TLVReader & containerReader
)

GetRemainingFreeUzunluk

uint32_t GetRemainingFreeLength(
  void
)

GetRemainingLength

uint32_t GetRemainingLength(
  void
) const 

GetString

WEAVE_ERROR GetString(
  char *buf,
  uint32_t bufSize
)

GetEtiket

uint64_t GetTag(
  void
) const 

GetType

TLVType GetType(
  void
) const 

İçinde

WEAVE_ERROR Init(
  uint8_t *buf,
  uint32_t dataLen,
  uint32_t maxLen
)

Bir başlatma TLVUpdater düzenlemek için nesnenin tek bir giriş tamponu.

Bu yöntem arayan üzerinde, TLV tamponu içinde veri tampon ucuna taşınır ve özelTLVReader amacı, bu yeniden konumlandırılan tamponu ile başlatılır. Özel birTLVWriter nesne de başında artık kullanılabilir boş alan üzerine başlatılır. Uygulamalar kullanabilirsiniz TLVUpdater ayrıştırmak nesneyi TLV veri ve değiştirmek / varolan unsurları silmek veya kodlama yeni öğeler ekleyin.

Ayrıntılar
parametreler
[in] buf
İhtiva eden bir tampon maddesi için bir işaretçi TLV veri düzenlenebilir için.
[in] dataLen
Uzunluğu TLV tamponu verileri.
[in] maxLen
Tamponun toplam uzunluğu.
Dönüş Değerleri
WEAVE_NO_ERROR
Yöntem başarılı olursa.
WEAVE_ERROR_INVALID_ARGUMENT
Tampon adresi geçersizse.
WEAVE_ERROR_BUFFER_TOO_SMALL
Tampon çok küçükse.

İçinde

WEAVE_ERROR Init(
  TLVReader & aReader,
  uint32_t freeLen
)

Bir başlatma TLVUpdater bir kullanarak nesneyiTLVReader .

Bu yöntem arayan üzerinde, TLV tamponu veriler ile gösterilenTLVReader arabelleğinin sonuna mevcut okuma alanına taşınır. Yeni bir özelTLVReader yeni bir özel sırasında nesnenin, bu yeni bir konumdan okunması için başlatılırTLVWriter nesne kadar serbest tampon alanı için yazma için başlatılır.

Eğer NotTLVReader zaten bir unsuru "açık" konumlandırılmış, ilk yedeklenen kapalı olduğunu elemanın başlangıç. Ayrıca eğer örneğin Yapım de sahip konteyner elemanları, kapalı bu destek, dikkatTLVReader zaten çağırmak için kullanılan EnterContainer () , ardından arka-off bir şey yok. AncakTLVReader muhafaza elemanı ve üzerine yerleştirildi EnterContainer () henüz sonra, çağrılmamışsaTLVReader nesne destek kapalı olan kap kafasının başlangıcına.

GirişTLVReader nesne dönmeden önce imha edilecek ve uygulama dönüş aynı faydalanmak gerekir.

Ayrıntılar
parametreler
[in,out] aReader
Bir referansTLVReader dönmeden önce imha edilecek nesne.
[in] freeLen
Önceden kodlanmış veri arabelleğinde bulunan boş alanın uzunluğu (bayt cinsinden).
Dönüş Değerleri
WEAVE_NO_ERROR
Yöntem başarılı olursa.
WEAVE_ERROR_INVALID_ARGUMENT
Tampon adresi geçersizse.
WEAVE_ERROR_NOT_IMPLEMENTED
Okuyucu bir arabellek zincirinde başlatıldıysa.

Hareket

WEAVE_ERROR Move(
  void
)

Kopya giriş akım elemanı TLV çıkışı TLV .

Taşı () metodu kopyalar üzerinde mevcut elemanı TLVUpdater sitesindeki okuyucu üzerinde konumlandırılmış TLVUpdater s yazar. ' Uygulama çağırmalıdır ileri () ve pozisyon TLVUpdater bu yöntemi çağırmadan önce bir öğe sitesindeki okuyucu. Tıpkı TLVReader :: sonraki () okuyucu çağrı sırasında bir muhafaza elemanı üzerinde konumlandırılmış ise yöntem, kabın tüm üyeleri kopyalanacaktır. Okuyucu herhangi bir öğe üzerinde konumlanmadıysa, bu yöntemin çağrılmasında hiçbir şey değişmez.

Ayrıntılar
Dönüş Değerleri
WEAVE_NO_ERROR
Eğer TLVUpdater okuyucu başarılı yeni eleman üzerine yerleştirilmiştir.
WEAVE_END_OF_TLV
Eğer TLVUpdater sitesindeki okuyucu kabın sonuna işaret etmektedir.
WEAVE_ERROR_INVALID_TLV_ELEMENT
TLVIpdater en okuyucu geçerli konumlandırılmış değilse TLV elemanı.
other
Tarafından döndürülen diğer hata kodları döndürür TLVReader :: Skip () yöntemiyle.

Sonuna Kadar Taşı

void MoveUntilEnd(
  void
)

Her şeyi hareket TLVUpdater girişinin sonuna kadar o anki okuma alanına TLV çıkışına fazla tampon.

Her şeyi hareket Bu yöntem, destekler TLVUpdater 'okuyucu sonuna kadar o anki okuma noktasına fazla tampon TLVUpdater s yazar.'

Sonraki

WEAVE_ERROR Next(
  void
)

Geçerli elemanı atla ve ilerletmek TLVUpdater girişi sonraki elemana nesneyi TLV .

Sonraki () yöntemi giriş mevcut elemanı atlar TLV ve gelişmeler TLVUpdater sonraki elemana sitesindeki okuyucu aynı muhafaza bağlamında göstermiş bulunuyoruz. Özel olarak, okuyucu en dış seviyede konumlanmış olduğu takdirde TLV çağrı, kodlama ileri () aşağıdaki, en üst eleman için ilerler. Okuyucu içine yerleştirilmiş ise, TLV çağrı, muhafaza elemanının (bir yapı, dizi ya da yol) ileri () kabın sonraki üyesi elemanı için ilerler.

Yana sonraki () çağrı halen mevcut bağlamda okuyucu hareketi, kısıtlar ileri () okuyucu ilk ulaşıncaya kadar üye elemanları (ve herhangi bir iç içe kapların üyeleri) atlayarak, kabın üzerinde ileri bir muhafaza elemanı üzerinde konumlandırıldığında kapsayıcıdan sonra eleman.

Belirli bir tutucu kapsamında başka elemanlar olduğunda sonraki () bir döner metot WEAVE_END_OF_TLV hata ve okuyucunun pozisyonu değişmeden kalır.

Ayrıntılar
Dönüş Değerleri
WEAVE_NO_ERROR
Eğer TLVUpdater okuyucu başarılı yeni eleman üzerine yerleştirilmiştir.
other
Tarafından döndürülen döner Dokuma veya platform hata kodları TLVReader :: geçiş () ve TLVReader :: sonraki () yöntemi.

Koymak

WEAVE_ERROR Put(
  uint64_t tag,
  int8_t v
)

Koymak

WEAVE_ERROR Put(
  uint64_t tag,
  int16_t v
)

Koymak

WEAVE_ERROR Put(
  uint64_t tag,
  int32_t v
)

Koymak

WEAVE_ERROR Put(
  uint64_t tag,
  int64_t v
)

Koymak

WEAVE_ERROR Put(
  uint64_t tag,
  uint8_t v
)

Koymak

WEAVE_ERROR Put(
  uint64_t tag,
  uint16_t v
)

Koymak

WEAVE_ERROR Put(
  uint64_t tag,
  uint32_t v
)

Koymak

WEAVE_ERROR Put(
  uint64_t tag,
  uint64_t v
)

Koymak

WEAVE_ERROR Put(
  uint64_t tag,
  int8_t v,
  bool preserveSize
)

Koymak

WEAVE_ERROR Put(
  uint64_t tag,
  int16_t v,
  bool preserveSize
)

Koymak

WEAVE_ERROR Put(
  uint64_t tag,
  int32_t v,
  bool preserveSize
)

Koymak

WEAVE_ERROR Put(
  uint64_t tag,
  int64_t v,
  bool preserveSize
)

Koymak

WEAVE_ERROR Put(
  uint64_t tag,
  uint8_t v,
  bool preserveSize
)

Koymak

WEAVE_ERROR Put(
  uint64_t tag,
  uint16_t v,
  bool preserveSize
)

Koymak

WEAVE_ERROR Put(
  uint64_t tag,
  uint32_t v,
  bool preserveSize
)

Koymak

WEAVE_ERROR Put(
  uint64_t tag,
  uint64_t v,
  bool preserveSize
)

Koymak

WEAVE_ERROR Put(
  uint64_t tag,
  float v
)

Koymak

WEAVE_ERROR Put(
  uint64_t tag,
  double v
)

PutBoole

l10n-yer tutucu=56

PutByte'ları

l10n-yer tutucu=57

PutNull

l10n-yer tutucu=58

PutString

l10n-yer tutucu=59

PutString

l10n-yer tutucu=60

SetImplicitProfileId

l10n-yer tutucu=61

TLVUpdater nesne için Örtülü Profil Kimliğini ayarlayın.

Bu yöntem, TLVUpdater nesne için kapalı profil kimliğini belirler. Güncelleyici yeni eleman ile ilişkili etiketin profil kimliği profileId değerini eşleşirse, yeni bir unsur kodlamak için sorulduğunda, güncelleyici böylece işlemdeki profil kimliğini atlayarak, örtük biçimde etiketi kodlar.

Ayrıntılar
parametreler
[içinde] profileId
Örtülü biçimde kodlanması gereken etiketlerin profil kimliği.

StartContainer

l10n-yer tutucu=62

DoğrulaEndOfContainer

l10n-yer tutucu=63