nl:: Weave:: TLV:: TLVUpdater
#include <src/lib/core/WeaveTLV.h>
ويوفّر واجهة موحّدة للقارئ/الكاتب لتعديل/إضافة/حذف العناصر في ترميز TLV.
ملخّص
TLVUpdater هو اتحاد بين عنصرَي TLVReader وTLVwriter، ويوفّر طرقًا لواجهة تعديل/حذف البيانات في ترميز، بالإضافة إلى إضافة عناصر جديدة إلى ترميز TLV. يعمل الكائن TLVUpdater بشكل أساسي كمؤشرين، أحدهما لقراءة الترميز الحالي والآخر للكتابة (إما لنسخ البيانات الحالية أو كتابة بيانات جديدة).
دلاليًا، يعمل الكائن TLVUpdater مثل اتحاد TLVReader وTLVwriter. تستخدم أساليب TLVUpdater معنًى مشابهًا أو أقل مقارنةً بنظريات مشابهة في TLVReader/TLVكتابة. في حال وجود اختلافات في الدلالة، يتم توثيق الاختلافات بوضوح في قسم التعليقات الخاص بالدالة في WeaveTLVUpdater.cpp.
من الملاحظات المهمة على وجه الخصوص حول الأمرين TLVUpdater's ButBytes() وPoString() أنه يمكن ترك الترميز في حالة تالفة مع كتابة عنوان العنصر فقط عند حدوث تجاوز. يمكن للتطبيقات استدعاء GetReprimaryingFreeLength() للتأكّد من وجود مساحة خالية تقريبية كافية لكتابة الترميز. يُرجى العِلم أنّ الخيار GetReleadingFreeLength() يُطلِعك وحدات البايت المجانية المتاحة فقط، متضمّنًا لا طريقة للتطبيق لمعرفة طول البيانات المشفّرة التي تتم كتابتها. في حال تجاوز الطلب، سيعرِض كل من ByBytes() وBoString() 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)
|
الوظائف العامة
نسخ العنصر
WEAVE_ERROR CopyElement( TLVReader & reader )
نسخ العنصر
WEAVE_ERROR CopyElement( uint64_t tag, TLVReader & reader )
دوبيت
WEAVE_ERROR DupBytes( uint8_t *& buf, uint32_t & dataLen )
سلسلة DupString
WEAVE_ERROR DupString( char *& buf )
الحاوية النهائية
WEAVE_ERROR EndContainer( TLVType outerContainerType )
إدخال الحاوية
WEAVE_ERROR EnterContainer( TLVType & outerContainerType )
لإعداد كائن TLVUpdater لقراءة عناصر حاوية.
كما أنها تشفِّر بداية كائن الحاوية في الناتج TLV.
تُعدّ طريقة EnterContainer() الكائن TLVUpdater الحالي لبدء قراءة عناصر الأعضاء لحاوية TLV (بنية أو مصفوفة أو مسار). بالنسبة إلى كل استدعاء للتطبيقات EnterContainer()، يجب إجراء استدعاء مقابلة لـ ExitContainer().
عندما يتم استدعاء EnterContainer() قارئ TLVUpdater' ، يجب وضعه على عنصر الحاوية. تعتمد الطريقة كوسيطة لقيمة TLVType والتي سيتم استخدامها لحفظ سياق أداة التحديث أثناء قراءة الحاوية.
عند إرجاع الطريقة EnterContainer()، يتم وضع أداة التعديل مباشرةً قبل العضو الأول في الحاوية. سيؤدي استدعاء Next() بشكل متكرر إلى تقديم التحديث بواسطة أعضاء المجموعة حتى يتم الوصول إلى النهاية، وعندها ستعود أداة التحديث WEAVE_END_OF_TLV.
وبعد أن ينتهي التطبيق من قراءة حاوية، يمكنه مواصلة قراءة العناصر بعد الحاوية عن طريق استدعاء الطريقة 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
الحصول على بيانات
WEAVE_ERROR GetDataPtr( const uint8_t *& data )
الحصول على ImimpitProfileId
uint32_t GetImplicitProfileId( void )
المدة
uint32_t GetLength( void ) const
GetLengthRead
uint32_t GetLengthRead( void ) const
GetLength خطي
uint32_t GetLengthWritten( void )
GetReader
void GetReader( TLVReader & containerReader )
المدة المتبقية مجانًا
uint32_t GetRemainingFreeLength( void )
المدة المتبقية
uint32_t GetRemainingLength( void ) const
الحصول على سلسلة
WEAVE_ERROR GetString( char *buf, uint32_t bufSize )
الحصول على علامة
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 لعنصر، "on"، يتم التراجع عنه أولاً في بداية هذا العنصر. وتجدر الإشارة إلى أن عملية الاحتفاظ بنسخة احتياطية هذه تعمل بشكل جيد مع عناصر الحاوية، أي إذا تم استخدام TLVReader من قبل لاستدعاء EnterContainer()، يعني ذلك أنه ليس هناك أي شيء يجب التراجع عنه. ولكن إذا تم وضع TLVReader على عنصر الحاوية ولم يتم استدعاء EnterContainer() بعد، سيتم إيقاف العنصر TLVReader في بداية عنوان الحاوية.
سيتم إتلاف عنصر TLVReader للإدخال قبل الرجوع ويجب ألا يستخدم التطبيق نفسه عند الرجوع.
التفاصيل | |||||||
---|---|---|---|---|---|---|---|
المَعلمات |
|
||||||
قيم الإرجاع |
|
نقل
WEAVE_ERROR Move( void )
نسخ العنصر الحالي من الإدخال TLV إلى إخراج TLV
تنسخ طريقة move() العنصر الحالي الذي يتم وضع القارئ فيه على TLVUpdater' ، على الكاتب TLVUpdater' . يجب أن يستدعي التطبيق Next() وأن يضع قارئ TLVUpdater's على عنصر قبل استدعاء هذه الطريقة. تمامًا مثل طريقة TLVReader::Next()، إذا تم وضع القارئ على عنصر حاوية عند إجراء الاستدعاء، سيتم نسخ جميع أعضاء الحاوية. إذا لم يتم وضع القارئ في أي عنصر، لن يحدث أي تغيير في استدعاء هذه الطريقة.
التفاصيل | |||||||||
---|---|---|---|---|---|---|---|---|---|
قيم الإرجاع |
|
نقل حتى النهاية
void MoveUntilEnd( void )
انقل كل عنصر من نقطة القراءة الحالية في TLVUpdater' حتى نهاية مدخل الإدخال TLV المؤقت إلى الإخراج.
تتيح هذه الطريقة نقل كل شيء من نقطة القراءة الحالية في TLVUpdater' حتى نهاية المخزن المؤقت للقارئ وصولاً إلى كاتب TLVUpdater' .
التالي
WEAVE_ERROR Next( void )
تخطي العنصر الحالي وتقديم العنصر TLVUpdater إلى العنصر التالي في إدخال TLV.
تتجاوز الطريقة Next() العنصر الحالي في الإدخال TLV وتتقدّم قارئ TLVUpdater's إلى العنصر التالي الذي يتوفّر في سياق الاحتواء نفسه. وعلى وجه الخصوص، إذا تم وضع القارئ في المستوى العلوي لترميز TLV، سيؤدي طلب Next() إلى نقله إلى العنصر العلوي التالي. إذا تم وضع القارئ ضمن عنصر حاوية TLV (بنية أو مصفوفة أو مسار)، سيؤدي طلب Next() إلى نقله إلى العنصر التالي من الحاوية.
بما أنّ المعلّمة Next() تقيّد حركة القارئ في سياق الاحتواء الحالي، يؤدي استدعاء Next() عند وضع القارئ على عنصر الحاوية إلى تقديم أكثر من الحاوية، مع تخطي عناصرها (وأعضاء أي حاويات متداخلة) حتى يصل إلى العنصر الأول بعد الحاوية.
وعندما لا تكون هناك عناصر أخرى في سياق احتواء معيّن، ستعرض طريقة Next() خطأ WEAVE_END_OF_TLV وسيظل موضع القارئ بدون تغيير.
التفاصيل | |||||
---|---|---|---|---|---|
قيم الإرجاع |
|
Put
WEAVE_ERROR Put( uint64_t tag, int8_t v )
Put
WEAVE_ERROR Put( uint64_t tag, int16_t v )
Put
WEAVE_ERROR Put( uint64_t tag, int32_t v )
Put
WEAVE_ERROR Put( uint64_t tag, int64_t v )
Put
WEAVE_ERROR Put( uint64_t tag, uint8_t v )
Put
WEAVE_ERROR Put( uint64_t tag, uint16_t v )
Put
WEAVE_ERROR Put( uint64_t tag, uint32_t v )
Put
WEAVE_ERROR Put( uint64_t tag, uint64_t v )
Put
WEAVE_ERROR Put( uint64_t tag, int8_t v, bool preserveSize )
Put
WEAVE_ERROR Put( uint64_t tag, int16_t v, bool preserveSize )
Put
WEAVE_ERROR Put( uint64_t tag, int32_t v, bool preserveSize )
Put
WEAVE_ERROR Put( uint64_t tag, int64_t v, bool preserveSize )
Put
WEAVE_ERROR Put( uint64_t tag, uint8_t v, bool preserveSize )
Put
WEAVE_ERROR Put( uint64_t tag, uint16_t v, bool preserveSize )
Put
WEAVE_ERROR Put( uint64_t tag, uint32_t v, bool preserveSize )
Put
WEAVE_ERROR Put( uint64_t tag, uint64_t v, bool preserveSize )
Put
WEAVE_ERROR Put( uint64_t tag, float v )
Put
WEAVE_ERROR Put( uint64_t tag, double v )
وضع منطقية
WEAVE_ERROR PutBoolean( uint64_t tag, bool v )
بايت
WEAVE_ERROR PutBytes( uint64_t tag, const uint8_t *buf, uint32_t len )
بوتنول
WEAVE_ERROR PutNull( uint64_t tag )
سلسلة السلاسل
WEAVE_ERROR PutString( uint64_t tag, const char *buf )
سلسلة السلاسل
WEAVE_ERROR PutString( uint64_t tag, const char *buf, uint32_t len )
ضبط معرّف ضمني للملف الشخصي
void SetImplicitProfileId( uint32_t profileId )
اضبط معرّف الملف الشخصي الضمني للكائن TLVUpdater.
تحدّد هذه الطريقة رقم تعريف الملف الشخصي الضمني لكائن TLVUpdater. عند طلب أداة التحديث ترميز عنصر جديد، إذا كان رقم تعريف الملف الشخصي للعلامة المرتبطة بالعنصر الجديد يتطابق مع قيمة profileId
، ستُشفّر أداة التعديل العلامة ضمنيًا، ما يؤدي إلى حذف رقم تعريف الملف الشخصي في هذه العملية.
التفاصيل | |||
---|---|---|---|
المَعلمات |
|
حاوية الحاوية
WEAVE_ERROR StartContainer( uint64_t tag, TLVType containerType, TLVType & outerContainerType )