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)
Bir TLV kapsayıcı öğesinin okunmasını tamamlar ve TLV çıktısındaki TLV öğesinin bir ucunu kodlar.
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)
Geçerli öğeyi TLV girişinden TLV çıkışına kopyalar.
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
[out] outerContainerType
Güncelleyicinin bağlamını alacak bir TLVType değerine başvuru.
Döndürülen Değerler
WEAVE_NO_ERROR
Yöntem başarılı olup olmadığı.
WEAVE_ERROR_INCORRECT_STATE
TLVUpdater okuyucusu bir kapsayıcı öğesine yerleştirilmediyse.
other
TLVWriter::StartContainer() veya TLVReader::EnterContainer() tarafından döndürülen diğer herhangi bir Weave veya platform hata kodu.

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
[in] outerContainerType
EnterContainer() yöntemi tarafından döndürülen TLVType değeri.
Döndürülen Değerler
WEAVE_NO_ERROR
Yöntem başarılı olup olmadığı.
WEAVE_ERROR_TLV_UNDERRUN
Temel TLV kodlaması erken sona erip ermediyse.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Güncelleyici, geçersiz veya desteklenmeyen bir TLV öğe türüyle karşılaştıysa.
WEAVE_ERROR_INVALID_TLV_TAG
Güncelleyici, geçersiz bağlamda bir TLV etiketiyle karşılaştıysa.
other
TLVWriter::EndContainer() veya TLVReader::ExitContainer() tarafından döndürülen diğer Weave veya platform hata kodları.

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
[in] buf
Düzenlenecek TLV verilerini içeren bir arabelleğin işaretçisi.
[in] dataLen
Arabellekteki TLV verilerinin uzunluğu.
[in] maxLen
Tamponun toplam uzunluğu.
Döndürülen Değerler
WEAVE_NO_ERROR
Yöntem başarılı olup olmadığı.
WEAVE_ERROR_INVALID_ARGUMENT
Tampon adresi geçersizse.
WEAVE_ERROR_BUFFER_TOO_SMALL
Tampon çok küçükse.

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
[in,out] aReader
Döndürmeden önce imha edilecek bir TLVReader nesnesine referans.
[in] freeLen
Önceden kodlanmış veri arabelleğindeki boş alanın uzunluğu (bayt cinsinden).
Döndürülen Değerler
WEAVE_NO_ERROR
Yöntem başarılı olup olmadığı.
WEAVE_ERROR_INVALID_ARGUMENT
Tampon adresi geçersizse.
WEAVE_ERROR_NOT_IMPLEMENTED
Okuyucunun bir tampon zincirinde başlatılıp başlatılmadığı

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
WEAVE_NO_ERROR
TLVUpdater okuyucusu yeni bir öğeye başarıyla konumlandırıldıysa.
WEAVE_END_OF_TLV
TLVUpdater'ın okuyucusu, kapsayıcının sonunu işaret ediyorsa.
WEAVE_ERROR_INVALID_TLV_ELEMENT
TLVIpdater'ın okuyucusu geçerli bir TLV öğesine yerleştirilmemişse.
other
TLVReader::Jump() yöntemi tarafından döndürülen diğer hata kodlarını döndürür.

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
WEAVE_NO_ERROR
TLVUpdater okuyucusu yeni bir öğeye başarıyla konumlandırıldıysa.
other
TLVReader::Jump() ve TLVReader::Next() yöntemi tarafından döndürülen Weave veya platform hata kodlarını döndürü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 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
[in] profileId
Örtülü biçimde kodlanması gereken etiketlerin profil kimliğidir.

StartContainer

WEAVE_ERROR StartContainer(
  uint64_t tag,
  TLVType containerType,
  TLVType & outerContainerType
)

VerifyEndOfContainer

WEAVE_ERROR VerifyEndOfContainer(
  void
)