nl:: Weave:: TLV:: TLVReader
#include <src/lib/core/WeaveTLV.h>
يوفر محلّلًا فعّالاً للذاكرة للبيانات المشفّرة بتنسيق Weave TLV.
ملخّص
تنفّذ أداة TLVReader محلّلًا "نمط السحب" لإعادة التوجيه فقط لبيانات Weave TLV. يعمل الكائن TLVReader كمؤشر يمكن استخدامه لتعديل سلسلة من عناصر TLV وتفسير محتواها. وعند وضع التطبيقات على أحد العناصر، يمكن أن تطلب التطبيقات طرق Get() للقارئ لطلب بحث عن نوع العنصر الحالي وعلامةه واستخراج أي قيمة مرتبطة. يتم استخدام طريقة Next() للقارئ للتقدّم من عنصر إلى آخر.
يتم دائمًا وضع عنصر TLVReader قبل عنصر TLV أو عليه أو بعده. عند الإعداد الأول، يتم وضع TLVReader مباشرةً قبل العنصر الأول للترميز. لبدء القراءة، يجب على أحد التطبيقات إجراء استدعاء مبدئي لطريقة Next() لوضع القارئ في العنصر الأول. عند مصادفة عنصر حاوية، يمكن استخدام مصفوفة أو مسار OpenContainer() أو EnterContainer() لإعادة التكرار من خلال محتوى الحاوية.
عندما يصل القارئ إلى نهاية ترميز TLV أو العنصر الأخير ضمن حاوية، يشير ذلك إلى التطبيق من خلال عرض خطأ WEAVE_END_OF_TLV من طريقة Next(). سيستمر القارئ في عرض WEAVE_END_OF_TLV حتى تتم إعادة إعداده، أو يتم الخروج من الحاوية الحالية (عبر CloseContainer() / ExitContainer()).
يمكن للكائن TLVReader تحليل البيانات مباشرةً من المخزن المؤقت للإدخال الثابت أو من سلسلة واحدة أو أكثر من PacketBuffers. بالإضافة إلى ذلك، يمكن للتطبيقات توفير دالة GetNextBuffer
لخلاصة البيانات إلى القارئ من مصدر عشوائي، مثل مقبس أو منفذ تسلسلي.
الوراثة
الفئات الفرعية المعروفة مباشرةً:nl::Weave::Profiles::DataManagement_Current::CircularEventReader
nl::Weave::TLV::CiricalTLVReader
الأنواع العامة |
|
---|---|
GetNextBufferFunct)(TLVReader &reader, uintptr_t &bufHandle, const uint8_t *&bufStart, uint32_t &bufLen)
|
WEAVE_ERROR(* دالة يمكن استخدامها لاسترداد بيانات TLV الإضافية المطلوب تحليلها. |
السمات العلنية |
|
---|---|
AppData
|
void *
حقل مؤشر يمكن استخدامه مع البيانات الخاصة بالتطبيق.
|
GetNextBuffer
|
مؤشر إلى دالة ستعرِض بيانات إدخال للعنصر TLVReader.
|
ImplicitProfileId
|
uint32_t
معرّف الملف الشخصي المطلوب استخدامه لعلامات الملف الشخصي التي تم ترميزها في شكل ضمني.
|
السمات المحمية |
|
---|---|
mBufEnd
|
const uint8_t *
|
mBufHandle
|
uintptr_t
|
mContainerType
|
|
mControlByte
|
uint16_t
|
mElemLenOrVal
|
uint64_t
|
mElemTag
|
uint64_t
|
mLenRead
|
uint32_t
|
mMaxLen
|
uint32_t
|
mReadPoint
|
const uint8_t *
|
الوظائف العامة |
|
---|---|
CloseContainer(TLVReader & containerReader)
|
إكمال قراءة حاوية TLV بعد استدعاء إلى OpenContainer().
|
DupBytes(uint8_t *& buf, uint32_t & dataLen)
|
تخصّص وتعرض المخزن المؤقت الذي يحتوي على قيمة السلسلة الحالية أو بايت 8.
|
DupString(char *& buf)
|
تخصّص وتعرض المخزن المؤقت الذي يتضمن القيمة التي تم إنهاؤها فارغة من السلسلة الحالية بالبايت أو UTF8.
|
EnterContainer(TLVType & outerContainerType)
|
|
ExitContainer(TLVType outerContainerType)
|
|
Get(bool & v)
|
تقدّم قيمة العنصر الحالي كنوع منطقية.
|
Get(int8_t & v)
|
يمكنك الحصول على قيمة العنصر الحالي كعدد صحيح موقَّع 8 بت.
|
Get(int16_t & v)
|
احصل على قيمة العنصر الحالي كعدد صحيح موقَّع 16 بت.
|
Get(int32_t & v)
|
يمكنك الحصول على قيمة العنصر الحالي كعدد صحيح موقَّع 32 بت.
|
Get(int64_t & v)
|
يمكنك الحصول على قيمة العنصر الحالي كعدد صحيح موقَّع 64 بت.
|
Get(uint8_t & v)
|
أدخِل قيمة العنصر الحالي كعدد صحيح 8 بت غير موقَّع.
|
Get(uint16_t & v)
|
احصل على قيمة العنصر الحالي كعدد صحيح غير موقَّع 16 بت.
|
Get(uint32_t & v)
|
يمكنك الحصول على قيمة العنصر الحالي كعدد صحيح غير موقَّع 32 بت.
|
Get(uint64_t & v)
|
يمكنك الحصول على قيمة العنصر الحالي كعدد صحيح غير موقَّع 64 بت.
|
Get(float & v)
|
|
Get(double & v)
|
احصل على قيمة العنصر الحالي كرقم عائم بدقة مزدوجة.
|
GetBufHandle(void) const
|
uintptr_t
|
GetBytes(uint8_t *buf, uint32_t bufSize)
|
أدخِل قيمة وحدة سلسلة البايت الحالية أو UTF8.
|
GetContainerType(void) const
|
لعرض نوع الحاوية التي تتم القراءة حاليًا عليها بواسطة TLVReader.
|
GetControlByte(void) const
|
uint16_t
لعرض بايت تحكم مرتبط بعنصر TLV الحالي.
|
GetDataPtr(const uint8_t *& data)
|
يمكنك الحصول على مؤشر بالبايت المشفّر الأولي بعنصر سلسلة TLV أو UTF8.
|
GetLength(void) const
|
uint32_t
عرض طول البيانات المرتبطة بعنصر TLV الحالي.
|
GetLengthRead(void) const
|
uint32_t
يعرض إجمالي عدد وحدات البايت التي تمت قراءتها منذ إعداد القارئ.
|
GetReadPoint(void) const
|
const uint8_t *
للحصول على نقطة في المخزن المؤقت للإدخال الذي يتوافق مع الموضع الحالي للقارئ.
|
GetRemainingLength(void) const
|
uint32_t
تعرض إجمالي عدد وحدات البايت التي يمكن قراءتها حتى يتم الوصول إلى الحد الأقصى لطول القراءة.
|
GetString(char *buf, uint32_t bufSize)
|
يمكنك الحصول على قيمة عنصر بايت أو سلسلة UTF8 الحالية كسلسلة منتهية فارغة.
|
GetTag(void) const
|
uint64_t
عرض العلامة المرتبطة بعنصر TLV الحالي.
|
GetType(void) const
|
لعرض نوع عنصر TLV الحالي.
|
Init(const TLVReader & aReader)
|
void
|
Init(const uint8_t *data, uint32_t dataLen)
|
void
لإعداد كائن TLVReader للقراءة من مخزن مؤقت واحد.
|
Init(PacketBuffer *buf, uint32_t maxLen)
|
void
لإعداد كائن TLVReader للقراءة من حزمة PacketBuffer واحدة.
|
Init(PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers)
|
void
لإعداد كائن TLVReader للقراءة من واحد أو أكثر من PacketBuffers.
|
Next(void)
|
|
Next(TLVType expectedType, uint64_t expectedTag)
|
|
OpenContainer(TLVReader & containerReader)
|
|
Skip(void)
|
|
VerifyEndOfContainer(void)
|
يتم التحقق من أن كائن TVLReader يقع في نهاية حاوية TLV.
|
الدوال المحمية |
|
---|---|
ClearElementState(void)
|
void
محو حالة TLVReader.
|
ElementType(void) const
|
TLVElementType
هذه طريقة خاصة لعرض TLVElementType من mControlByte.
|
EnsureData(WEAVE_ERROR noDataErr)
|
|
GetElementHeadLength(uint8_t & elemHeadBytes) const
|
هذه طريقة خاصة تُستخدم لحساب طول رأس عنصر TLV.
|
IsContainerOpen(void) const
|
bool
|
ReadData(uint8_t *buf, uint32_t len)
|
|
ReadElement(void)
|
|
ReadTag(TLVTagControl tagControl, const uint8_t *& p)
|
uint64_t
|
SetContainerOpen(bool aContainerOpen)
|
void
|
SkipData(void)
|
يمكنك تخطّي أي بيانات مضمَّنة في TLV الحالية من خلال قراءتها بدون التخزين المؤقت.
|
SkipToEndOfContainer(void)
|
|
VerifyElement(void)
|
الدوال الثابتة المحمية |
|
---|---|
FailGetNextBuffer(TLVReader & reader, uintptr_t & bufHandle, const uint8_t *& bufStart, uint32_t & bufLen)
|
|
GetNextPacketBuffer(TLVReader & reader, uintptr_t & bufHandle, const uint8_t *& bufStart, uint32_t & bufLen)
|
الأنواع العامة
GetNextBufferFunct
WEAVE_ERROR(* GetNextBufferFunct)(TLVReader &reader, uintptr_t &bufHandle, const uint8_t *&bufStart, uint32_t &bufLen)
دالة يمكن استخدامها لاسترداد بيانات TLV الإضافية المطلوب تحليلها.
تُستخدم الدوال من هذا النوع لتغذية بيانات الإدخال إلى TLVReader. وعند طلب ذلك، من المتوقّع أن تنتج الدالة بيانات إضافية للقارئ لتحليل أو الإشارة إلى أنّه ما مِن بيانات متوفّرة.
التفاصيل | |||||||||
---|---|---|---|---|---|---|---|---|---|
المَعلمات |
|
||||||||
قيم الإرجاع |
|
السمات العلنية
القائمة
void * AppData
حقل مؤشر يمكن استخدامه مع البيانات الخاصة بالتطبيق.
GetNextBuffer
GetNextBufferFunct GetNextBuffer
مؤشر إلى دالة ستعرِض بيانات إدخال للعنصر TLVReader.
وإذا تم ضبط القيمة على NULL (القيمة التلقائية)، سيفترض القارئ أنه لا تتوفّر أي بيانات إدخال أخرى.
يمكن ضبط GetNextBuffer من خلال تطبيق في أي وقت، ولكن يتم عادةً ضبطه عند بدء القراءة.
راجع تعريف نوع GetNextBufferFunct للحصول على معلومات إضافية حول تنفيذ دالة GetNextBuffer.
رقم تعريف ImplicitProfile
uint32_t ImplicitProfileId
معرّف الملف الشخصي المطلوب استخدامه لعلامات الملف الشخصي التي تم ترميزها في شكل ضمني.
عندما يعثر القارئ على علامة خاصة بملف شخصي تم ترميزها في شكل ضمني، يتم استخدام قيمة السمة ImplicitProfileId
على أنها رقم تعريف الملف الشخصي المُفترَض للعلامة.
يتم ضبط السمة ImplicitProfileId
تلقائيًا على kProfileIdNotDescriptionified. عند فك تشفير TLV التي تحتوي على علامات مشفّرة، يجب على التطبيقات ضبط ImplicitProfileId
قبل قراءة أي عناصر TLV التي تحتوي على هذه العلامات. وعادةً ما يعتمد معرِّف الملف الشخصي المناسب على سياق التطبيق أو البروتوكول المنطوق.
إذا ظهرت علامة مشفّرة بشكل ضمني أثناء ضبط ImplicitProfileId
على kProfileIdNotspecified، سيعرض القارئ الخطأ WEAVE_ERROR_UNKNOWN_IMPLICIT_TLV_TAG.
السمات المحمية
mBufEnd
const uint8_t * mBufEnd
mBufHandle
uintptr_t mBufHandle
mContainerType
TLVType mContainerType
mControlByte
uint16_t mControlByte
قناة mElemLenOrVal
uint64_t mElemLenOrVal
علامة mElemTag
uint64_t mElemTag
mLenReadات
uint32_t mLenRead
mMaxLen
uint32_t mMaxLen
mReadPoint
const uint8_t * mReadPoint
الوظائف العامة
إغلاق الحاوية
WEAVE_ERROR CloseContainer( TLVReader & containerReader )
إكمال قراءة حاوية TLV بعد استدعاء إلى OpenContainer().
تعمل طريقة CloseContainer() على استعادة حالة العنصر الرئيسي TLVReader بعد استدعاء إلى OpenContainer(). وعلى كل استدعاء لتطبيقات Opencontainer()، يجب إجراء طلب مقابل لـ CloseContainer()، وتمرير مرجع إلى قارئ الحاوية نفسه لكلتا الطريقتَين.
عند عرض CloseContainer()، يتم وضع القارئ الرئيسي مباشرةً قبل العنصر الأول الذي يتبع الحاوية. من الآن فصاعدًا، يمكن للتطبيق استخدام طريقة Next() للانتقال من خلال أي عناصر متبقية.
يمكن للتطبيقات استدعاء CloseContainer() على قارئ رئيسي في أي وقت، بغض النظر عما إذا تمت قراءة جميع العناصر في الحاوية الأساسية. بعد استدعاء CloseContainer() ، يجب أن يلبّي التطبيق قارئ الحاوية 'de-initialize' ويجب عدم استخدامه بعد ذلك بدون إعادة ضبطه.
التفاصيل | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
المَعلمات |
|
||||||||||||
قيم الإرجاع |
|
دوبيت
WEAVE_ERROR DupBytes( uint8_t *& buf, uint32_t & dataLen )
تخصّص وتعرض المخزن المؤقت الذي يحتوي على قيمة السلسلة الحالية أو بايت 8.
تنشئ هذه الطريقة مخزنًا مؤقتًا لعرض نسخة من البيانات المرتبطة بعنصر سلسلة بايت أو UTF-8 في الموضع الحالي. يتم الحصول على ذاكرة المخزن المؤقت باستخدام Caloc() ويجب أن يُزيلها المتصل من خلال مجانًا() عند عدم الحاجة إليها.
التفاصيل | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
المَعلمات |
|
||||||||||||
قيم الإرجاع |
|
سلسلة DupString
WEAVE_ERROR DupString( char *& buf )
تخصّص وتعرض المخزن المؤقت الذي يتضمن القيمة التي تم إنهاؤها فارغة من السلسلة الحالية بالبايت أو UTF8.
تنشئ هذه الطريقة مخزنًا مؤقتًا لإرجاع نسخة تم إنهاؤها فارغة من البيانات المرتبطة بعنصر السلسلة بايت أو UTF-8 في الموضع الحالي. يتم الحصول على ذاكرة المخزن المؤقت باستخدام Caloc() ويجب أن يُزيلها المتصل من خلال مجانًا() عند عدم الحاجة إليها.
التفاصيل | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
المَعلمات |
|
||||||||||||
قيم الإرجاع |
|
إدخال الحاوية
WEAVE_ERROR EnterContainer( TLVType & outerContainerType )
لإعداد كائن TLVReader لقراءة أعضاء عنصر حاوية TLV.
تُعدّ طريقة EnterContainer() الكائن TLVReader الحالي لبدء قراءة عناصر الأعضاء من حاوية TLV (بنية أو مصفوفة أو مسار). بالنسبة إلى كل استدعاء للتطبيقات EnterContainer()، يجب إجراء استدعاء مقابلة لـ ExitContainer().
عندما يتم استدعاء EnterContainer()، يجب وضع الكائن TLVReader في عنصر الحاوية لقراءته. تعتمد الطريقة كوسيطة لقيمة TLVType والتي سيتم استخدامها لحفظ سياق القارئ أثناء قراءة الحاوية.
عندما تظهر الطريقة EnterContainer()، يتم وضع القارئ مباشرةً قبل العضو الأول في الحاوية. سيؤدي استدعاء Next() بشكل متكرر إلى تقديم القارئ من خلال أعضاء المجموعة حتى يتم الوصول إلى النهاية، وعندها سيعرض القارئ WEAVE_END_OF_TLV.
وبعد أن ينتهي التطبيق من قراءة حاوية، يمكنه مواصلة قراءة العناصر بعد الحاوية عن طريق استدعاء الطريقة ExitContainer().
التفاصيل | |||||
---|---|---|---|---|---|
المَعلمات |
|
||||
قيم الإرجاع |
|
خروج حاوية
WEAVE_ERROR ExitContainer( TLVType outerContainerType )
إكمال قراءة حاوية TLV وإعداد كائن TLVReader لقراءة العناصر بعد الحاوية.
تعمل طريقة ExitContainer() على استعادة حالة كائن TLVReader بعد استدعاء إلى EnterContainer(). وعلى كل طلب إلى تطبيقات EnterContainer()، يتم إجراء طلب مقابل لـ ExitContainer()، ويتم تمرير قيمة السياق التي تعرض طريقة EnterContainer().
عند خروج ExitContainer()، يتم وضع القارئ مباشرةً قبل العنصر الأول الذي يتبع الحاوية. من الآن فصاعدًا، يمكن للتطبيق استخدام طريقة Next() للانتقال من خلال أي عناصر متبقية.
بعد استدعاء EnterContainer()، يمكن للتطبيقات استدعاء ExitContainer() على قارئ في أي مرحلة من الوقت، بغض النظر عما إذا تمت قراءة جميع العناصر في الحاوية الأساسية.
التفاصيل | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
المَعلمات |
|
||||||||||||
قيم الإرجاع |
|
جلب
WEAVE_ERROR Get( bool & v )
جلب
WEAVE_ERROR Get( int8_t & v )
يمكنك الحصول على قيمة العنصر الحالي كعدد صحيح موقَّع 8 بت.
إذا كانت قيمة العدد الصحيح المشفّرة أكبر من نوع بيانات الإخراج، سيتم اقتطاع القيمة الناتجة.
التفاصيل | |||||
---|---|---|---|---|---|
المَعلمات |
|
||||
قيم الإرجاع |
|
جلب
WEAVE_ERROR Get( int16_t & v )
احصل على قيمة العنصر الحالي كعدد صحيح موقَّع 16 بت.
إذا كانت قيمة العدد الصحيح المشفّرة أكبر من نوع بيانات الإخراج، سيتم اقتطاع القيمة الناتجة.
التفاصيل | |||||
---|---|---|---|---|---|
المَعلمات |
|
||||
قيم الإرجاع |
|
جلب
WEAVE_ERROR Get( int32_t & v )
يمكنك الحصول على قيمة العنصر الحالي كعدد صحيح موقَّع 32 بت.
إذا كانت قيمة العدد الصحيح المشفّرة أكبر من نوع بيانات الإخراج، سيتم اقتطاع القيمة الناتجة.
التفاصيل | |||||
---|---|---|---|---|---|
المَعلمات |
|
||||
قيم الإرجاع |
|
جلب
WEAVE_ERROR Get( int64_t & v )
يمكنك الحصول على قيمة العنصر الحالي كعدد صحيح موقَّع 64 بت.
إذا كانت قيمة العدد الصحيح المشفّرة أكبر من نوع بيانات الإخراج، سيتم اقتطاع القيمة الناتجة.
التفاصيل | |||||
---|---|---|---|---|---|
المَعلمات |
|
||||
قيم الإرجاع |
|
جلب
WEAVE_ERROR Get( uint8_t & v )
أدخِل قيمة العنصر الحالي كعدد صحيح 8 بت غير موقَّع.
إذا كانت قيمة العدد الصحيح المشفّرة أكبر من نوع بيانات الإخراج، سيتم اقتطاع القيمة الناتجة. وبالمثل، إذا كانت قيمة العدد الصحيح المشفّرة سالبة، سيتم تحويل القيمة إلى قيمة غير موقّعة.
التفاصيل | |||||
---|---|---|---|---|---|
المَعلمات |
|
||||
قيم الإرجاع |
|
جلب
WEAVE_ERROR Get( uint16_t & v )
احصل على قيمة العنصر الحالي كعدد صحيح غير موقَّع 16 بت.
إذا كانت قيمة العدد الصحيح المشفّرة أكبر من نوع بيانات الإخراج، سيتم اقتطاع القيمة الناتجة. وبالمثل، إذا كانت قيمة العدد الصحيح المشفّرة سالبة، سيتم تحويل القيمة إلى قيمة غير موقّعة.
التفاصيل | |||||
---|---|---|---|---|---|
المَعلمات |
|
||||
قيم الإرجاع |
|
جلب
WEAVE_ERROR Get( uint32_t & v )
يمكنك الحصول على قيمة العنصر الحالي كعدد صحيح غير موقَّع 32 بت.
إذا كانت قيمة العدد الصحيح المشفّرة أكبر من نوع بيانات الإخراج، سيتم اقتطاع القيمة الناتجة. وبالمثل، إذا كانت قيمة العدد الصحيح المشفّرة سالبة، سيتم تحويل القيمة إلى قيمة غير موقّعة.
التفاصيل | |||||
---|---|---|---|---|---|
المَعلمات |
|
||||
قيم الإرجاع |
|
جلب
WEAVE_ERROR Get( uint64_t & v )
يمكنك الحصول على قيمة العنصر الحالي كعدد صحيح غير موقَّع 64 بت.
إذا كانت قيمة العدد الصحيح المشفّرة سالبة، سيتم تحويل القيمة إلى قيمة غير موقّعة.
التفاصيل | |||||
---|---|---|---|---|---|
المَعلمات |
|
||||
قيم الإرجاع |
|
جلب
WEAVE_ERROR Get( float & v )
جلب
WEAVE_ERROR Get( double & v )
قناة GetBufHandle
uintptr_t GetBufHandle( void ) const
GetBytes
WEAVE_ERROR GetBytes( uint8_t *buf, uint32_t bufSize )
أدخِل قيمة وحدة سلسلة البايت الحالية أو UTF8.
لتحديد حجم المخزن المؤقت المطلوب للإدخال، عليك استدعاء الطريقة GetLength() قبل استدعاء GetBytes().
التفاصيل | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
المَعلمات |
|
||||||||||
قيم الإرجاع |
|
GetContainerType
TLVType GetContainerType( void ) const
لعرض نوع الحاوية التي تتم القراءة حاليًا عليها بواسطة TLVReader.
تعرض الطريقة GetContainerType() نوع الحاوية TLV التي تتم قراءة TLVReader فيها. إذا تم وضع TLVReader على المستوى الخارجي من ترميز TLV (أي قبل عنصر TLV الخارجي أو بعده)، ستعرض الطريقة kTLVType_NotDescriptionified.
التفاصيل | |
---|---|
المرتجعات |
نوع TLVللحاوية الحالية أو kTLVType_NotDescriptionified في حال عدم وضع TLVReader ضمن حاوية.
|
GetControlByte
uint16_t GetControlByte( void ) const
لعرض بايت تحكم مرتبط بعنصر TLV الحالي.
وعلى النحو الأمثل، لا يحتاج أي شخص إلى معرفة عن بايت التحكّم، ويجب أن تتوفّر إمكانية الوصول الداخلي إلى TLV فقط. ومع ذلك، يكون الوصول إلى بايت التحكّم مفيدًا لأغراض تصحيح الأخطاء من خلال أدوات مساعدةTLV (التي تحاول فك تشفير بايت التحكّم في العلامة عند طباعة محتوى ذاكرة التخزين المؤقت TLV).
التفاصيل | |
---|---|
المرتجعات |
عدد صحيح غير موقَّع يحتوي على بايت التحكُّم المرتبط بعنصر TLV الحالي. ويتم عرض kTLVControlByte_Notspecified إذا لم يتم تحديد موضع القارئ على عنصر.
|
الحصول على بيانات
WEAVE_ERROR GetDataPtr( const uint8_t *& data )
يمكنك الحصول على مؤشر بالبايت المشفّر الأولي بعنصر سلسلة TLV أو UTF8.
تعرض هذه الطريقة مؤشرًا مباشرًا لقيمة السلسلة المشفّرة ضمن المخزن المؤقت للإدخال الأساسي. ولكي تنجح العملية، تتطلب هذه الطريقة تضمين قيمة السلسلة بأكملها في ذاكرة تخزين مؤقت واحدة. بخلاف ذلك، تعرض الطريقة WEAVE_ERROR_TLV_UNDERRUN. وبهذه الطريقة يتم استخدامها بطريقة محدودة عند قراءة البيانات من مخازن التخزين المؤقت المتعددة المتباعدة.
التفاصيل | |||||||||
---|---|---|---|---|---|---|---|---|---|
المَعلمات |
|
||||||||
قيم الإرجاع |
|
المدة
uint32_t GetLength( void ) const
عرض طول البيانات المرتبطة بعنصر TLV الحالي.
لا ينطبق طول البيانات إلا على عناصر من نوع UTF8 أو سلسلة بايت. بالنسبة إلى سلاسل UTF8، تكون القيمة المعروضة هي عدد وحدات البايت في السلسلة، وليس عدد الأحرف.
التفاصيل | |
---|---|
المرتجعات |
طول البيانات (بالبايت) المرتبطة بالعنصر TLV الحالي، أو 0 إذا لم يكن العنصر الحالي سلسلة UTF8 أو سلسلة بايت، أو إذا لم يتم وضع القارئ في أحد العناصر
|
GetLengthRead
uint32_t GetLengthRead( void ) const
يعرض إجمالي عدد وحدات البايت التي تمت قراءتها منذ إعداد القارئ.
التفاصيل | |
---|---|
المرتجعات |
إجمالي عدد وحدات البايت التي تمت قراءتها منذ إعداد القارئ.
|
GetReadPoint
const uint8_t * GetReadPoint( void ) const
للحصول على نقطة في المخزن المؤقت للإدخال الذي يتوافق مع الموضع الحالي للقارئ.
التفاصيل | |
---|---|
المرتجعات |
مؤشر إلى المخزن المؤقت للإدخال الأساسي يتوافق مع الموضع الحالي للقارئ.
|
المدة المتبقية
uint32_t GetRemainingLength( void ) const
تعرض إجمالي عدد وحدات البايت التي يمكن قراءتها حتى يتم الوصول إلى الحد الأقصى لطول القراءة.
التفاصيل | |
---|---|
المرتجعات |
إجمالي عدد وحدات البايت التي يمكن قراءتها حتى يتم الوصول إلى الحد الأقصى لطول القراءة.
|
الحصول على سلسلة
WEAVE_ERROR GetString( char *buf, uint32_t bufSize )
يمكنك الحصول على قيمة عنصر بايت أو سلسلة UTF8 الحالية كسلسلة منتهية فارغة.
لتحديد حجم المخزن المؤقت المطلوب للإدخال، عليك استدعاء الطريقة GetLength() قبل استدعاء GetBytes(). ويجب أن يكون المخزن المؤقت للإدخال أكبر من بايت واحد على الأقل من طول السلسلة لاستيعاب الحرف الفارغ.
التفاصيل | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
المَعلمات |
|
||||||||||
قيم الإرجاع |
|
الحصول على علامة
uint64_t GetTag( void ) const
عرض العلامة المرتبطة بعنصر TLV الحالي.
يمكن استخدام القيمة التي تعرضها GetTag() مع دوال أداة العلامة (IsProfileTag() وIsContextTag() وProfileIdFromTag() وما إلى ذلك) لتحديد نوع العلامة واستخراج قيم حقول العلامات المختلفة.
التفاصيل | |
---|---|
المرتجعات |
عدد صحيح غير موقَّع يحتوي على معلومات عن العلامة المرتبطة بعنصر TLV الحالي.
|
GetType
TLVType GetType( void ) const
Init
void Init( const TLVReader & aReader )
Init
void Init( const uint8_t *data, uint32_t dataLen )
Init
void Init( PacketBuffer *buf, uint32_t maxLen )
لإعداد كائن TLVReader للقراءة من حزمة PacketBuffer واحدة.
يبدأ التحليل في موضع بدء المخزن المؤقت'(buf->DataStart()) ويستمر حتى نهاية البيانات في المخزن المؤقت (كما يشير إليه buf->Datalen())، أو تم تحليل maxLen بايت.
التفاصيل | |||||
---|---|---|---|---|---|
المَعلمات |
|
Init
void Init( PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers )
لإعداد كائن TLVReader للقراءة من واحد أو أكثر من PacketBuffers.
يبدأ التحليل في موضع البدء الأولي للمخزن المؤقت's (buf->DataStart()). إذا كانت allowDiscontiguousBuffers صحيحة، سيتقدّم القارئ خلال سلسلة المخازن المؤقت المرتبطة بمؤشرات Next(). ويستمر التحليل إلى أن يتم استهلاك كل البيانات في سلسلة المخزن المؤقت (كما يشير إليها buf->Datalen())، أو يتم تحليل maxLen بايت.
التفاصيل | |||||||
---|---|---|---|---|---|---|---|
المَعلمات |
|
التالي
WEAVE_ERROR Next( void )
تقدم العنصر TLVReader إلى عنصر TLV التالي لقراءته.
تضع الطريقة Next() كائن القارئ في العنصر التالي في ترميز TLV يقع في سياق الاحتواء نفسه. وعلى وجه الخصوص، إذا تم وضع القارئ في المستوى الخارجي من ترميز TLV، سيؤدي طلب Next() إلى نقل القارئ إلى العنصر التالي وأهمه. إذا تم وضع القارئ ضمن عنصر حاوية TLV (بنية أو مصفوفة أو مسار)، سيؤدي استدعاء Next() إلى نقل القارئ إلى العنصر التالي في الحاوية.
بما أنّ المعلّمة Next() تقيّد حركة القارئ في سياق الاحتواء الحالي، يؤدي استدعاء Next() عند وضع القارئ على عنصر الحاوية إلى تقديم أكثر من الحاوية، مع تخطي عناصرها (وأعضاء أي حاويات متداخلة) حتى يصل إلى العنصر الأول بعد الحاوية.
وعندما لا تكون هناك عناصر أخرى في سياق احتواء معيّن، ستعرض طريقة Next() خطأ WEAVE_END_OF_TLV وسيظل موضع القارئ بدون تغيير.
التفاصيل | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
قيم الإرجاع |
|
التالي
WEAVE_ERROR Next( TLVType expectedType, uint64_t expectedTag )
تقدم العنصر TLVReader إلى عنصر TLV التالي لقراءته، مع تأكيد نوع العنصر الجديد والعلامة.
طريقة Next(TLVType المتوقّعة، uint64_t المتوقّع) هي طريقة ملائمة لها السلوك نفسه المتّبع في Next()، ولكنها تتحقّق أيضًا من أنّ نوع وعلامة TLV الجديدة يتطابقان مع الوسيطات المقدَّمة.
التفاصيل | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
المَعلمات |
|
||||||||||||||||
قيم الإرجاع |
|
حاويات Open
WEAVE_ERROR OpenContainer( TLVReader & containerReader )
لإعداد كائن TLVReader جديد لقراءة أعضاء عنصر حاوية TLV.
تعمل طريقة OpenContainer() على إعداد كائن TLVReader جديد لقراءة عناصر العضو لحاوية TLV (بنية أو مصفوفة أو مسار). عند استدعاء OpenContainer() ، يجب وضع العنصر الحالي TLVReader على عنصر الحاوية لقراءته. تعتمد الطريقة كوسيطة وحيدة على المرجع إلى قارئ جديد سيتم إعداده لقراءة الحاوية. ويُعرَف هذا القارئ باسم قارئ الحاوية بينما يُعرَف قارئ باسم OpenContainer() باسم القارئ الرئيسي.
عندما تظهر الطريقة OpenContainer()، يتم وضع قارئ الحاوية مباشرةً قبل العضو الأول في الحاوية. سيؤدي استدعاء Next() على قارئ الحاوية إلى تقديم أعضاء المجموعة حتى الوصول إلى النهاية، وفي هذه المرحلة سيعرض القارئ WEAVE_END_OF_TLV.
أثناء فتح قارئ الحاوية، يجب على التطبيقات عدم إجراء مكالمات أو تغيير حالة القارئ الرئيسي. بعد انتهاء أحد التطبيقات من استخدام قارئ الحاويات، يجب إغلاقه من خلال استدعاء CloseContainer() على قارئ العنصر الرئيسي وتمرير قارئ الحاوية كوسيطة. يمكن أن تغلق التطبيقات قارئ الحاوية في أي وقت، سواء عند قراءة جميع العناصر المضمّنة في الحاوية الأساسية أو بدونها. بعد إغلاق قارئ الحاوية، يمكن للتطبيقات مواصلة استخدامه للقارئ الرئيسي.
يكتسِب قارئ الحاوية خصائص الضبط المختلفة من القارئ الرئيسي. وهي كما يلي:
- معرّف الملف الشخصي الضمني (ImplicitProfileId)
- مؤشر بيانات التطبيق (AppData)
- مؤشر دالة GetNextBuffer
التفاصيل | |||||
---|---|---|---|---|---|
المَعلمات |
|
||||
قيم الإرجاع |
|
التخطّي
WEAVE_ERROR Skip( void )
تقدم كائن TLVReader إلى عنصر TLV الحالي مباشرةً.
تضع الطريقة Skip() كائن القارئ مباشرةً بعد عنصر TLV الحالي، بحيث يؤدي الطلب التالي إلى Next() إلى نقل القارئ إلى العنصر التالي. كما هو الحال مع Next()، إذا تم وضع القارئ على عنصر حاوية في وقت الطلب، سيتم تخطي أعضاء الحاوية. وإذا لم يتم تثبيت القارئ في أي عنصر، يظل موضعه بدون تغيير.
التفاصيل | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
قيم الإرجاع |
|
التحقّق من النهاية
WEAVE_ERROR VerifyEndOfContainer( void )
يتم التحقق من أن كائن TVLReader يقع في نهاية حاوية TLV.
تتحقّق الطريقة VerifyEndOfContainer() من عدم توفّر عناصر TLV أخرى يجب قراءتها في حاوية TLV الحالية. هذه طريقة مريحة تعادل استدعاء Next() والتحقق من قيمة العرض WEAVE_END_OF_TLV.
التفاصيل | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
قيم الإرجاع |
|
الدوال المحمية
محو العناصر
void ClearElementState( void )
نوع العنصر
TLVElementType ElementType( void ) const
هذه طريقة خاصة لعرض TLVElementType من mControlByte.
التأكّد من البيانات
WEAVE_ERROR EnsureData( WEAVE_ERROR noDataErr )
GetElementHeaderLength
WEAVE_ERROR GetElementHeadLength( uint8_t & elemHeadBytes ) const
هذه طريقة خاصة تُستخدم لحساب طول رأس عنصر TLV.
حاوية مفتوحة
bool IsContainerOpen( void ) const
بيانات القراءة
WEAVE_ERROR ReadData( uint8_t *buf, uint32_t len )
عنصر القراءة
WEAVE_ERROR ReadElement( void )
علامة القراءة
uint64_t ReadTag( TLVTagControl tagControl, const uint8_t *& p )
SetContainerOpen
void SetContainerOpen( bool aContainerOpen )
SkipData
WEAVE_ERROR SkipData( void )
يمكنك تخطّي أي بيانات مضمَّنة في TLV الحالية من خلال قراءتها بدون التخزين المؤقت.
التفاصيل | |||||
---|---|---|---|---|---|
قيم الإرجاع |
|
تخطي إلى نهاية الحاوية
WEAVE_ERROR SkipToEndOfContainer( void )
عنصر التحقق
WEAVE_ERROR VerifyElement( void )
الدوال الثابتة المحمية
فشل FaNextGetNextBuffer
WEAVE_ERROR FailGetNextBuffer( TLVReader & reader, uintptr_t & bufHandle, const uint8_t *& bufStart, uint32_t & bufLen )
GetNextPacketBuffer
WEAVE_ERROR GetNextPacketBuffer( TLVReader & reader, uintptr_t & bufHandle, const uint8_t *& bufStart, uint32_t & bufLen )