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)
Bir TLV kapsayıcı öğesinin okunmasını tamamlar ve TLV çıkışında TLV öğesinin bir 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 bir 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 girişinden 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ş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
[out] outerContainerType
Güncelleyicinin bağlamını alacak bir TLVType değerine referans.
Değerleri Döndür
WEAVE_NO_ERROR
Yöntem başarılı olursa.
WEAVE_ERROR_INCORRECT_STATE
TLVUpdater okuyucu, bir kapsayıcı öğesinde konumlandırılmadıysa.
other
TLVWriter::StartContainer() veya TLVReader::EnterContainer() tarafından döndürülen diğer tüm Weave veya platform hata kodları.

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
[in] outerContainerType
EnterContainer() yöntemi tarafından döndürülen TLVType değeri.
Değerleri Döndür
WEAVE_NO_ERROR
Yöntem başarılı olursa.
WEAVE_ERROR_TLV_UNDERRUN
Temel TLV kodlaması erken sona erdiyse.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Güncelleyicinin geçersiz veya desteklenmeyen bir TLV öğe türüyle karşılaştığı
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 tüm 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 

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

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
[in,out] aReader
Geri dönmeden önce imha edilecek bir TLVReader nesnesine başvuru.
[in] freeLen
Önceden kodlanmış veri arabelleğinde kullanılabilen boş alanın uzunluğu (bayt cinsinden).
Değerleri Döndür
WEAVE_NO_ERROR
Yöntem başarılı olursa.
WEAVE_ERROR_INVALID_ARGUMENT
Arabellek adresi geçersizse
WEAVE_ERROR_NOT_IMPLEMENTED
Okuyucu bir tampon zincirinde başlatıldıysa

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

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

StartContainer

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

VerifyEndOfContainer

WEAVE_ERROR VerifyEndOfContainer(
  void
)