nl::Weave::TLV::TLVUpdater

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

توفّر واجهة موحّدة للقارئ/الكاتب لتعديل العناصر أو إضافتها أو حذفها بترميز TLV.

ملخّص

يمثّل TLVUpdater اتحاد كائنَي TLVReader وTLVWriter، كما يوفّر طرقًا واجهة لتعديل البيانات أو حذفها في أحد الترميزات بالإضافة إلى إضافة عناصر جديدة إلى ترميز TLV. يعمل الكائن TLVUpdater في الأساس كمؤشرين، أحدهما لقراءة الترميز الحالي والآخر للكتابة (إما لنسخ بيانات حالية أو كتابة بيانات جديدة).

ودلاليًا، يعمل الكائن TLVUpdater كاتحاد بين TLVReader وTLVWriter. تحمل الطُرق TLVUpdater معانٍ مشابهة إلى حد ما للعبارات المماثلة في TLVReader/TLVWriter. في حال ظهور اختلافات في دلالات الدلالة، يتم توثيق الاختلافات بوضوح في قسم التعليقات الخاص بالدالة في WeaveTLVUpdater.cpp.

من الملاحظات المهمة على وجه التحديد في طريقة عمليّتَي "putBytes() " و"putString()" في TLVUpdater أنّ الترميز يمكن أن يترك الترميز في حالة تالفة مع كتابة رأس العنصر فقط عند حدوث تجاوز. يمكن للتطبيقات استدعاء GetRemainingFreeLength() للتأكّد من توفُّر مساحة خالية تقريبية لكتابة الترميز يُرجى ملاحظة أنّ GetRemainingFreeLength() يخبرك بوحدات البايت المجانية المتاحة وليس هناك أي طريقة للتطبيق لمعرفة طول البيانات المرمّزة التي تتم كتابتها. في حالة تجاوز السعة، سيعرض كل من "putBytes() " و"putString() " WEAVE_ERROR_BUFFER_TOO_SMALL إلى المتصل.

يُرجى العِلم أيضًا أنّه يتم تحميل الطريقة Next() بشكل زائد لتخطّي العنصر الحالي ونقل القارئ الداخلي إلى العنصر التالي. نظرًا لأنّ تخطي العناصر التي سبق ترميزها يتطلب تغيير متغيّرات حالة المساحة الخالية للكاتب الداخلي لاحتساب المساحة الخالية الجديدة (التي تكون متاحة عن طريق التخطّي)، من المتوقّع أن يستدعي التطبيق Next() في أداة التحديث بعد إجراء Get() الذي لا يريد إعادة كتابة قيمته (وهو ما يعادل تخطّي العنصر الحالي).

وظائف عامة

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)
تحضير كائن TLVUpdater لقراءة عناصر الحاوية.
ExitContainer(TLVType outerContainerType)
لإكمال قراءة عنصر الحاوية TLV وترميز نهاية عنصر TLV في الناتج 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)
عليك إعداد كائن TLVUpdater لتعديل مخزن مؤقت واحد للإدخال.
Init(TLVReader & aReader, uint32_t freeLen)
إعداد كائن TLVUpdater باستخدام TLVReader.
Move(void)
نسخ العنصر الحالي من إدخال TLV إلى إخراج TLV
MoveUntilEnd(void)
void
انقِل كل العناصر من نقطة القراءة الحالية في TLVUpdater إلى نهاية المخزن المؤقت TLV للإدخال إلى الإخراج.
Next(void)
يمكنك تخطّي العنصر الحالي وتقديم الكائن TLVUpdater إلى العنصر التالي في الإدخال 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
اضبط معرّف الملف الشخصي الضمني للكائن TLVUpdater.
StartContainer(uint64_t tag, TLVType containerType, TLVType & outerContainerType)
VerifyEndOfContainer(void)

وظائف عامة

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
)

تحضير كائن TLVUpdater لقراءة عناصر الحاوية.

كما أنه يعمل على ترميز بداية كائن الحاوية في الناتج TLV.

تعمل طريقة EnterContainer() على إعداد الكائن TLVUpdater الحالي لبدء قراءة العناصر الفرعية في حاوية TLV (بنية أو مصفوفة أو مسار). بالنسبة إلى كل استدعاء لتطبيقات EnterContainer()، يجب إجراء استدعاء مطابق إلى ExitContainer().

عندما يُطلق على EnterContainer() اسم القارئ TLVUpdater، يجب وضع هذا القارئ في عنصر الحاوية. تستخدم الطريقة كوسيطة كمرجع لقيمة TLVType التي سيتم استخدامها لحفظ سياق أداة التحديث أثناء قراءة الحاوية.

عند إرجاع الطريقة EnterContainer()، يتم وضع أداة التحديث قبل العضو الأول في الحاوية مباشرةً. يؤدي استدعاء Next() بشكل متكرر إلى تقديم أداة التحديث عبر أعضاء المجموعة حتى الوصول إلى النهاية، وعندها سيعرض المحدّث WEAVE_END_OF_TLV.

بعد أن ينتهي التطبيق من قراءة الحاوية، يمكنه مواصلة قراءة العناصر بعد الحاوية عن طريق استدعاء طريقة ExitContainer().

التفاصيل
المعلمات
[out] outerContainerType
مرجع إلى قيمة TLVType التي ستتلقّى سياق أداة التعديل.
قيم الإرجاع
WEAVE_NO_ERROR
إذا نجحت الطريقة.
WEAVE_ERROR_INCORRECT_STATE
إذا لم يتم وضع قارئ TLVUpdater في عنصر حاوية.
other
أي رمز خطأ Weave أو نظام أساسي يتم عرضه بواسطة TLVWriter::StartContainer() أو TLVReader::EnterContainer().

ExitContainer

WEAVE_ERROR ExitContainer(
  TLVType outerContainerType
)

لإكمال قراءة عنصر الحاوية TLV وترميز نهاية عنصر TLV في الناتج TLV

تستعيد طريقة ExitContainer() حالة كائن TLVUpdater بعد استدعاء EnterContainer(). بالنسبة إلى كل استدعاء لتطبيقات EnterContainer()، يجب إجراء استدعاء مطابق إلى ExitContainer()، مع تمرير قيمة السياق التي تعرضها طريقة EnterContainer().

عند رجوع ExitContainer()، يتم وضع قارئ TLVUpdater مباشرةً قبل العنصر الأول الذي يلي الحاوية في الإدخال TLV. من هذه النقطة، يمكن للتطبيقات استدعاء Next() للتقدم خلال أي عناصر متبقية.

بعد استدعاء EnterContainer()، يمكن للتطبيقات استدعاء ExitContainer() في أداة التحديث في أي وقت، بغض النظر عمّا إذا تمت قراءة جميع العناصر في الحاوية الأساسية أم لا. تجدر الإشارة أيضًا إلى أنّ استدعاء ExitContainer() قبل قراءة جميع العناصر في الحاوية، سيؤدي إلى اقتطاع الحاوية المعدَّلة في الناتج TLV.

التفاصيل
المعلمات
[in] outerContainerType
قيمة TLVType التي تم عرضها باستخدام طريقة EnterContainer().
قيم الإرجاع
WEAVE_NO_ERROR
إذا نجحت الطريقة.
WEAVE_ERROR_TLV_UNDERRUN
إذا انتهى ترميز TLV الأساسي قبل أوانه
WEAVE_ERROR_INVALID_TLV_ELEMENT
إذا واجهت أداة التعديل نوع عنصر TLV غير صالح أو غير متوافق.
WEAVE_ERROR_INVALID_TLV_TAG
إذا صادفت أداة التعديل علامة TLV في سياق غير صالح.
other
أي رمز خطأ Weave أو نظام أساسي يتم عرضه بواسطة TLVWriter::EndContainer() أو TLVReader::ExitContainer().

إكمال الإعداد

WEAVE_ERROR Finalize(
  void
)

جلب

WEAVE_ERROR Get(
  bool & v
)

جلب

WEAVE_ERROR Get(
  int8_t & v
)

جلب

WEAVE_ERROR Get(
  int16_t & v
)

جلب

WEAVE_ERROR Get(
  int32_t & v
)

جلب

WEAVE_ERROR Get(
  int64_t & v
)

جلب

WEAVE_ERROR Get(
  uint8_t & v
)

جلب

WEAVE_ERROR Get(
  uint16_t & v
)

جلب

WEAVE_ERROR Get(
  uint32_t & v
)

جلب

WEAVE_ERROR Get(
  uint64_t & v
)

جلب

WEAVE_ERROR Get(
  float & v
)

جلب

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
)

عليك إعداد كائن TLVUpdater لتعديل مخزن مؤقت واحد للإدخال.

عند استدعاء هذه الطريقة، يتم نقل بيانات TLV في المخزن المؤقت إلى نهاية المخزن المؤقت ويتم إعداد كائن TLVReader خاص على هذا المخزن المؤقت الذي تم نقله. يتم أيضًا إعداد كائن TLVWriter خاص في المساحة الخالية المتوفّرة الآن في البداية. يمكن للتطبيقات استخدام الكائن TLVUpdater لتحليل بيانات TLV وتعديل العناصر الحالية أو حذفها أو إضافة عناصر جديدة إلى الترميز.

التفاصيل
المعلمات
[in] buf
يشير ذلك إلى مؤشر للمخزن المؤقت الذي يحتوي على بيانات TLV التي سيتم تعديلها.
[in] dataLen
طول بيانات TLV في المخزن المؤقت.
[in] maxLen
إجمالي طول المورد الاحتياطي.
قيم الإرجاع
WEAVE_NO_ERROR
إذا نجحت الطريقة.
WEAVE_ERROR_INVALID_ARGUMENT
إذا كان عنوان المخزن المؤقت غير صالح.
WEAVE_ERROR_BUFFER_TOO_SMALL
إذا كان المخزن المؤقت صغيرًا جدًا.

Init

WEAVE_ERROR Init(
  TLVReader & aReader,
  uint32_t freeLen
)

إعداد كائن TLVUpdater باستخدام TLVReader.

عند استدعاء هذه الطريقة، يتم نقل بيانات TLV في المخزن المؤقت المشار إليه من خلال TLVReader من نقطة القراءة الحالية إلى نهاية المخزن المؤقت. يتم إعداد كائن TLVReader خاص جديد للقراءة من هذا الموقع الجديد، بينما يتم إعداد كائن TLVWriter خاص جديد للكتابة في مساحة المخزن المؤقت التي تم تفريغها.

يُرجى ملاحظة أنّه عند ضبط TLVReader على وضع "تفعيل". عنصر ما، يتم نسخه احتياطيًا إلى بداية هذا العنصر. تجدر الإشارة أيضًا إلى أنّ عملية التراجع هذه تعمل بشكل جيد مع عناصر الحاوية، بمعنى أنّه إذا تم استخدام TLVReader من قبل لاستدعاء EnterContainer()، لن يكون هناك ما يمكن التراجع عنه. إذا تم وضع TLVReader على عنصر الحاوية ولم يتم استدعاء EnterContainer() بعد، سيتم الاحتفاظ بنسخة احتياطية من الكائن TLVReader في بداية عنوان الحاوية.

سيتم إتلاف الكائن TLVReader الذي تم إدخاله قبل رجوعه، ويجب ألا يستخدم التطبيق الأمر نفسه عند إرجاعه.

التفاصيل
المعلمات
[in,out] aReader
الإشارة إلى عنصر TLVReader سيتم إتلافه قبل إعادته
[in] freeLen
طول المساحة الخالية (بالبايت) المتاحة في المخزن المؤقت للبيانات المرمّز مسبقًا
قيم الإرجاع
WEAVE_NO_ERROR
إذا نجحت الطريقة.
WEAVE_ERROR_INVALID_ARGUMENT
إذا كان عنوان المخزن المؤقت غير صالح.
WEAVE_ERROR_NOT_IMPLEMENTED
ما إذا تم إعداد القارئ على سلسلة من المخازن المؤقتة.

نقل

WEAVE_ERROR Move(
  void
)

نسخ العنصر الحالي من إدخال TLV إلى إخراج TLV

تنسخ الطريقة Move() العنصر الحالي الذي يوجد فيه قارئ TLVUpdater إلى كاتب TLVUpdater. يجب أن يستدعي التطبيق Next() وأن يضع قارئ TLVUpdater على أحد العناصر قبل استدعاء هذه الطريقة. تمامًا مثل طريقة TLVReader::Next()، إذا تم وضع القارئ على عنصر حاوية في وقت الاتصال، سيتم نسخ جميع أعضاء الحاوية. إذا لم يتم وضع القارئ على أي عنصر، فلن يتغير شيء عند استدعاء هذه الطريقة.

التفاصيل
قيم الإرجاع
WEAVE_NO_ERROR
إذا تم وضع قارئ TLVUpdater بنجاح على عنصر جديد.
WEAVE_END_OF_TLV
إذا كان قارئ TLVUpdater يشير إلى نهاية الحاوية.
WEAVE_ERROR_INVALID_TLV_ELEMENT
إذا لم يتم وضع قارئ TLVIpdater في عنصر TLV صالح.
other
تعرض رموز الخطأ الأخرى التي تعرضها الطريقة TLVReader::Skip().

MoveUntilEnd

void MoveUntilEnd(
  void
)

انقِل كل العناصر من نقطة القراءة الحالية في TLVUpdater إلى نهاية المخزن المؤقت TLV للإدخال إلى الإخراج.

تتيح هذه الطريقة نقل كل العناصر من نقطة القراءة الحالية للقارئ TLVUpdater إلى نهاية المخزن المؤقت للقارئ إلى كاتب TLVUpdater.

التالي

WEAVE_ERROR Next(
  void
)

يمكنك تخطّي العنصر الحالي وتقديم الكائن TLVUpdater إلى العنصر التالي في الإدخال TLV.

تتخطّى الطريقة Next() العنصر الحالي في الإدخال TLV وتنقل قارئ TLVUpdater إلى العنصر التالي المتوفّر في سياق الاحتواء نفسه. وعلى وجه التحديد، إذا تم وضع القارئ في أقصى مستوى خارجي لترميز TLV، سيؤدي استدعاء Next() إلى نقله إلى العنصر التالي في الجزء العلوي. إذا تم وضع القارئ داخل عنصر حاوية TLV (بنية أو مصفوفة أو مسار)، سيؤدي استدعاء Next() إلى نقله إلى العنصر العضو التالي في الحاوية.

بما أنّ Next() يقيّد حركة القارئ على سياق الاحتواء الحالي، سيؤدي استدعاء Next() عند وضع القارئ في عنصر الحاوية فوق الحاوية، مع تخطي العناصر الفرعية (وأعضاء أي حاويات مضمّنة) حتى يصل إلى العنصر الأول بعد الحاوية.

في حال عدم وجود عناصر أخرى ضمن سياق احتواء معيّن، ستعرض طريقة Next() خطأ WEAVE_END_OF_TLV وسيظلّ موضع القارئ بدون تغيير.

التفاصيل
قيم الإرجاع
WEAVE_NO_ERROR
إذا تم وضع قارئ TLVUpdater بنجاح على عنصر جديد.
other
تعرض رموز الخطأ Weave أو النظام الأساسي التي يعرضها الأسلوب TLVReader::Skip() وTLVReader::Next().

وطبِّق

WEAVE_ERROR Put(
  uint64_t tag,
  int8_t v
)

وطبِّق

WEAVE_ERROR Put(
  uint64_t tag,
  int16_t v
)

وطبِّق

WEAVE_ERROR Put(
  uint64_t tag,
  int32_t v
)

وطبِّق

WEAVE_ERROR Put(
  uint64_t tag,
  int64_t v
)

وطبِّق

WEAVE_ERROR Put(
  uint64_t tag,
  uint8_t v
)

وطبِّق

WEAVE_ERROR Put(
  uint64_t tag,
  uint16_t v
)

وطبِّق

WEAVE_ERROR Put(
  uint64_t tag,
  uint32_t v
)

وطبِّق

WEAVE_ERROR Put(
  uint64_t tag,
  uint64_t v
)

وطبِّق

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

وطبِّق

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

وطبِّق

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

وطبِّق

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

وطبِّق

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

وطبِّق

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

وطبِّق

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

وطبِّق

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

وطبِّق

WEAVE_ERROR Put(
  uint64_t tag,
  float v
)

وطبِّق

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.

تضبط هذه الطريقة معرّف الملف الشخصي الضمني للعنصر TLVUpdater. عندما يُطلَب من أداة التحديث ترميز عنصر جديد، إذا تطابق رقم تعريف الملف الشخصي للعلامة المرتبط بالعنصر الجديد مع قيمة profileId، ستشفّر أداة التحديث ترميز العلامة بشكل ضمني، وبالتالي يتم حذف معرّف الملف الشخصي في هذه العملية.

التفاصيل
المعلمات
[in] profileId
معرِّف الملف الشخصي للعلامات التي يجب ترميزها بشكل ضمني.

StartContainer

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

VerifyEndOfContainer

WEAVE_ERROR VerifyEndOfContainer(
  void
)