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)
|
|
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)
|
|
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().
التفاصيل | |||||||
---|---|---|---|---|---|---|---|
المعلمات |
|
||||||
قيم الإرجاع |
|
ExitContainer
WEAVE_ERROR ExitContainer( TLVType outerContainerType )
لإكمال قراءة عنصر الحاوية TLV وترميز نهاية عنصر TLV في الناتج TLV
تستعيد طريقة ExitContainer() حالة كائن TLVUpdater بعد استدعاء EnterContainer(). بالنسبة إلى كل استدعاء لتطبيقات EnterContainer()، يجب إجراء استدعاء مطابق إلى ExitContainer()، مع تمرير قيمة السياق التي تعرضها طريقة EnterContainer().
عند رجوع ExitContainer()، يتم وضع قارئ TLVUpdater مباشرةً قبل العنصر الأول الذي يلي الحاوية في الإدخال TLV. من هذه النقطة، يمكن للتطبيقات استدعاء Next() للتقدم خلال أي عناصر متبقية.
بعد استدعاء EnterContainer()، يمكن للتطبيقات استدعاء ExitContainer() في أداة التحديث في أي وقت، بغض النظر عمّا إذا تمت قراءة جميع العناصر في الحاوية الأساسية أم لا. تجدر الإشارة أيضًا إلى أنّ استدعاء ExitContainer() قبل قراءة جميع العناصر في الحاوية، سيؤدي إلى اقتطاع الحاوية المعدَّلة في الناتج TLV.
التفاصيل | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
المعلمات |
|
||||||||||
قيم الإرجاع |
|
إكمال الإعداد
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 وتعديل العناصر الحالية أو حذفها أو إضافة عناصر جديدة إلى الترميز.
التفاصيل | |||||||
---|---|---|---|---|---|---|---|
المعلمات |
|
||||||
قيم الإرجاع |
|
Init
WEAVE_ERROR Init( TLVReader & aReader, uint32_t freeLen )
إعداد كائن TLVUpdater باستخدام TLVReader.
عند استدعاء هذه الطريقة، يتم نقل بيانات TLV في المخزن المؤقت المشار إليه من خلال TLVReader من نقطة القراءة الحالية إلى نهاية المخزن المؤقت. يتم إعداد كائن TLVReader خاص جديد للقراءة من هذا الموقع الجديد، بينما يتم إعداد كائن TLVWriter خاص جديد للكتابة في مساحة المخزن المؤقت التي تم تفريغها.
يُرجى ملاحظة أنّه عند ضبط TLVReader على وضع "تفعيل". عنصر ما، يتم نسخه احتياطيًا إلى بداية هذا العنصر. تجدر الإشارة أيضًا إلى أنّ عملية التراجع هذه تعمل بشكل جيد مع عناصر الحاوية، بمعنى أنّه إذا تم استخدام TLVReader من قبل لاستدعاء EnterContainer()، لن يكون هناك ما يمكن التراجع عنه. إذا تم وضع TLVReader على عنصر الحاوية ولم يتم استدعاء EnterContainer() بعد، سيتم الاحتفاظ بنسخة احتياطية من الكائن TLVReader في بداية عنوان الحاوية.
سيتم إتلاف الكائن TLVReader الذي تم إدخاله قبل رجوعه، ويجب ألا يستخدم التطبيق الأمر نفسه عند إرجاعه.
التفاصيل | |||||||
---|---|---|---|---|---|---|---|
المعلمات |
|
||||||
قيم الإرجاع |
|
نقل
WEAVE_ERROR Move( void )
نسخ العنصر الحالي من إدخال TLV إلى إخراج TLV
تنسخ الطريقة Move() العنصر الحالي الذي يوجد فيه قارئ TLVUpdater إلى كاتب TLVUpdater. يجب أن يستدعي التطبيق Next() وأن يضع قارئ TLVUpdater على أحد العناصر قبل استدعاء هذه الطريقة. تمامًا مثل طريقة TLVReader::Next()، إذا تم وضع القارئ على عنصر حاوية في وقت الاتصال، سيتم نسخ جميع أعضاء الحاوية. إذا لم يتم وضع القارئ على أي عنصر، فلن يتغير شيء عند استدعاء هذه الطريقة.
التفاصيل | |||||||||
---|---|---|---|---|---|---|---|---|---|
قيم الإرجاع |
|
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_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
، ستشفّر أداة التحديث ترميز العلامة بشكل ضمني، وبالتالي يتم حذف معرّف الملف الشخصي في هذه العملية.
التفاصيل | |||
---|---|---|---|
المعلمات |
|
StartContainer
WEAVE_ERROR StartContainer( uint64_t tag, TLVType containerType, TLVType & outerContainerType )