nl :: نسج:: TLV :: TLVUpdater

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

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

ملخص

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

لغويا، و TLVUpdater وظائف الجسم مثل اتحادTLVReader وTLVWriter . و TLVUpdater طرق لها معان أكثر أو أقل مماثلة لنظرائهم الذي يحمل الاسم نفسه في TLVReader / TLVWriter. حيث هناك اختلافات في دلالات، ويتم توثيق الخلافات بشكل واضح في قسم التعليق وظيفة في WeaveTLVUpdater.cpp .

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

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

الوظائف العامة

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
)

دوبسترينج

WEAVE_ERROR DupString(
  char *& buf
)

EndContainer

WEAVE_ERROR EndContainer(
  TLVType outerContainerType
)

أدخل الحاوية

WEAVE_ERROR EnterContainer(
  TLVType & outerContainerType
)

بإعداد TLVUpdater كائن لقراءة عناصر الحاوية.

فإنه بترميز أيضا بداية من كائن حاوية في إخراج TLV .

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

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

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

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

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

ExitContainer

WEAVE_ERROR ExitContainer(
  TLVType outerContainerType
)

يكمل القراءة من TLV عنصر حاوية ويشفر حدا من TLV عنصر في إخراج TLV .

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

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

مرة واحدة 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
أي دولة أخرى متاحة نسج أو منصة الخطأ الذي تم إرجاعه من قبل 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 

فيه

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

تهيئة TLVUpdater الكائن لتحرير منطقة عازلة مدخل واحد.

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

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

فيه

WEAVE_ERROR Init(
  TLVReader & aReader,
  uint32_t freeLen
)

تهيئة TLVUpdater الكائن باستخدامTLVReader .

على استدعاء هذا الأسلوب، TLV أشارت البيانات في المخزن المؤقت لمن قبلTLVReader يتم نقل من وجهة القراءة الحالية إلى نهاية المخزن المؤقت. A خاص جديد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 .

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

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

MoveUntilEnd

void MoveUntilEnd(
  void
)

نقل كل شيء من TLVUpdater نقطة القراءة الحالية الصورة حتى نهاية المدخلات TLV العازلة لأكثر من الانتاج.

هذا الدعم طريقة تحريك كل شيء من TLVUpdater "نقطة القراءة الحالية الصورة حتى نهاية القارئ العازلة لأكثر من TLVUpdater " الكاتب الصورة.

التالي

WEAVE_ERROR Next(
  void
)

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

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

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

عندما لا يكون هناك عناصر أخرى في سياق احتواء معين في التالي () طريقة سيعود WEAVE_END_OF_TLV خطأ وموقف القارئ لن تتغير.

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

وضع

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

العنصر النائب l10n = 56

PutBytes

l10n- العنصر النائب = 57

بوتنول

l10n-placeholder = 58

PutString

l10n-placeholder = 59

PutString

العنصر النائب l10n = 60

SetImplicitProfileId

العنصر النائب l10n = 61

تعيين معرف الملف الضمني للكائن TLVUpdater.

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

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

StartContainer

l10n-placeholder = 62

VerifyEndOfContainer

العنصر النائب l10n = 63