Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.

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)
Bir TLV kapsayıcı öğesinin okumasını tamamlar ve TLV çıkışındaki bir TLV öğesinin sonunu 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 TLVUpdater nesnesini başlatın.
Init(TLVReader & aReader, uint32_t freeLen)
TLVReader kullanarak bir TLVUpdater nesnesini başlatın.
Move(void)
Geçerli öğeyi TLV değerinden TLV çıkışına kopyalar.
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
[out] outerContainerType
Güncelleyicinin bağlamını alacak bir TLVType değeri referansı.
İade Değerleri
WEAVE_NO_ERROR
Yöntem başarılı olduysa.
WEAVE_ERROR_INCORRECT_STATE
TLVUpdater okuyucu bir kapsayıcı öğesinin üzerine yerleştirilmezse.
other
TLVWriter::StartContainer() veya TLVReader::EnterContainer() tarafından döndürülen diğer Weave veya platform hata kodu.

Çı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
[in] outerContainerType
EnterContainer() yöntemi tarafından döndürülen TLVType değeri.
İade Değerleri
WEAVE_NO_ERROR
Yöntem başarılı olduysa.
WEAVE_ERROR_TLV_UNDERRUN
Temel TLV kodlaması erken sona ererse.
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 bir bağlamda TLV etiketiyle karşılaştıysa.
other
TLVWriter::EndContainer() veya TLVReader::ExitContainer() tarafından döndürülen diğer Weave veya platform hata kodu.

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
[in] buf
Düzenlenecek TLV verilerini içeren bir bumper'ın işaretçisi.
[in] dataLen
Arabellekteki TLV verilerinin uzunluğu.
[in] maxLen
Tamponun toplam uzunluğu.
İade Değerleri
WEAVE_NO_ERROR
Yöntem başarılı olduysa.
WEAVE_ERROR_INVALID_ARGUMENT
Arabelleğe alınan adres geçersizse.
WEAVE_ERROR_BUFFER_TOO_SMALL
Arabellek çok küçükse.

İ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
[in,out] aReader
Geri dönmeden önce yok edilecek TLVReader nesnesine başvuru.
[in] freeLen
Önceden kodlanmış veri arabelleğinde bulunan boş alanın uzunluğu (bayt cinsinden).
İade Değerleri
WEAVE_NO_ERROR
Yöntem başarılı olduysa.
WEAVE_ERROR_INVALID_ARGUMENT
Arabelleğe alınan adres 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 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
WEAVE_NO_ERROR
TLVUpdater okuyucusunun yeni bir öğeye başarılı bir şekilde yerleştirilip yerleştirilmediği.
WEAVE_END_OF_TLV
TLVUpdater' okuyucusu kapsayıcının sonuna işaret ediyorsa.
WEAVE_ERROR_INVALID_TLV_ELEMENT
TLVIpdater'okuma öğesi geçerli bir TLV öğesi içine yerleştirilmemişse.
other
TLVReader::Skip() yöntemi tarafından döndürülen diğer hata kodlarını döndürür.

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
WEAVE_NO_ERROR
TLVUpdater okuyucusunun yeni bir öğeye başarılı bir şekilde yerleştirilip yerleştirilmediği.
other
TLVReader::Skip() ve TLVReader::Next() yöntemi tarafından döndürülen Weave veya platform hata kodlarını döndürür.

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
[in] profileId
Dolaylı biçimde kodlanması gereken etiketlerin profil kimliği.

BaşlangıçKapsayıcı

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

Kapsayıcı Sonucunu Doğrulama

WEAVE_ERROR VerifyEndOfContainer(
  void
)