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 تحليل البيانات مباشرةً من مخزن تخزين مؤقت ثابت للإدخال أو من سلسلة مكوّنة من حزمة واحدة أو أكثر من حِزم PacketBuffer. بالإضافة إلى ذلك، يمكن للتطبيقات توفير دالة GetNextBuffer
لخلاصة البيانات إلى القارئ من مصدر عشوائي، مثل مقبس أو منفذ تسلسلي.
الاكتساب
الفئات الفرعية المعروفة المباشرة:nl::Weave::Profiles::DataManagement_Current::CircularEventReader
nl::Weave::TLV::CircularTLVReader
الأنواع العلنية |
|
---|---|
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)
|
تخصِّص وتعيد التخزين المؤقت الذي يحتوي على قيمة سلسلة البايت أو سلسلة UTF8 الحالية.
|
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
|
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. عند استدعاء الدالة، يكون من المتوقع أن تنتج بيانات إضافية للقارئ لتحليلها أو الإشارة إلى عدم توفر المزيد من البيانات.
التفاصيل | |||||||||
---|---|---|---|---|---|---|---|---|---|
المَعلمات |
|
||||||||
قيم الإرجاع |
|
السمات العامة
AppData
void * AppData
حقل مؤشر يمكن استخدامه مع البيانات الخاصة بالتطبيق.
GetNextBuffer
GetNextBufferFunct GetNextBuffer
مؤشر يشير إلى دالة تنتج بيانات إدخال لكائن TLVReader.
في حال التعيين على "NULL" (القيمة التلقائية)، سيفترض القارئ أنّه لا تتوفّر بيانات إدخال إضافية.
يمكن تعيين GetNextBuffer من قِبل أحد التطبيقات في أي وقت، ولكن يتم تعيينه عادةً عند تهيئة القارئ.
راجِع تعريف نوع GetNextBufferFunct للحصول على معلومات إضافية عن تنفيذ دالة GetNextBuffer.
ImplicitProfileId
uint32_t ImplicitProfileId
معرّف الملف الشخصي المطلوب استخدامه لعلامات الملف الشخصي المشفرة بشكل ضمني.
عندما يصادف القارئ علامة خاصة بالملف الشخصي تم ترميزها بصيغة ضمنية، فإنه يستخدم قيمة السمة ImplicitProfileId
باعتبارها معرّف الملف الشخصي المفترض للعلامة.
يتم ضبط السمة ImplicitProfileId
تلقائيًا على kProfileIdNotSpecified. عند فك ترميز 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
الدوال العامة
CloseContainer
WEAVE_ERROR CloseContainer( TLVReader & containerReader )
تكمل قراءة حاوية TLV بعد استدعاء الدالة OpenContainer().
تستعيد طريقة CloseContainer() حالة كائن TLVReader الرئيسي بعد استدعاء الدالة OpenContainer(). بالنسبة إلى كل استدعاء لـ OpenContainer()، يجب أن تُجري تطبيقات OpenContainer() استدعاءًا مماثلاً إلى CloseContainer()، مع تمرير مرجع إلى قارئ الحاوية نفسه إلى كلتا الطريقتين.
عند إرجاع CloseContainer()، يتم وضع القارئ الرئيسي مباشرةً قبل العنصر الأول الذي يلي الحاوية. ومن هذه النقطة، يمكن للتطبيق استخدام طريقة Next() للتقدم خلال أي عناصر متبقية.
يمكن للتطبيقات استدعاء الدالة CloseContainer() للإغلاق على قارئ رئيسي في أي وقت من الأوقات، بغض النظر عمّا إذا تمت قراءة جميع العناصر في الحاوية الأساسية أم لا. بعد استدعاء CloseContainer()، يجب أن ينظر التطبيق إلى قارئ الحاوية "de-إعداد" ولا يجب أن يستخدمه أكثر من ذلك بدون إعادة إعداده.
التفاصيل | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
المَعلمات |
|
||||||||||||
قيم الإرجاع |
|
DupBytes
WEAVE_ERROR DupBytes( uint8_t *& buf, uint32_t & dataLen )
تخصِّص وتعيد التخزين المؤقت الذي يحتوي على قيمة سلسلة البايت أو سلسلة UTF8 الحالية.
تنشئ هذه الطريقة مخزنًا مؤقتًا لـ وتعرض نسخة من البيانات المرتبطة بعنصر سلسلة بايت أو UTF-8 في الموضع الحالي. يتم الحصول على ذاكرة المخزن المؤقت باستخدام الإجراء()alloc وتشمل تفريغها باستخدام الدالة Free() من قِبل المتصل عندما لا تكون هناك حاجة إليه.
التفاصيل | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
المَعلمات |
|
||||||||||||
قيم الإرجاع |
|
DupString
WEAVE_ERROR DupString( char *& buf )
تُخصِّص وترجع المورد الاحتياطي الذي يحتوي على القيمة الفارغة لسلسلة بايت أو UTF8 الحالية.
تنشئ هذه الطريقة مخزنًا مؤقتًا لـ وتعرض نسخة فارغة من البيانات المرتبطة بعنصر سلسلة البايت أو UTF-8 في الموضع الحالي. يتم الحصول على ذاكرة المخزن المؤقت باستخدام الإجراء()alloc وتشمل تفريغها باستخدام الدالة Free() من قِبل المتصل عندما لا تكون هناك حاجة إليه.
التفاصيل | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
المَعلمات |
|
||||||||||||
قيم الإرجاع |
|
EnterContainer
WEAVE_ERROR EnterContainer( TLVType & outerContainerType )
لإعداد كائن TLVReader لقراءة عناصر حاوية TLV.
تعمل الطريقة EnterContainer() على كائن TLVReader الحالي لبدء قراءة عناصر العضو لحاوية TLV (بنية أو مصفوفة أو مسار). بالنسبة إلى كل استدعاء تطبيقات EnterContainer()، يجب أن تجري استدعاءًا مقابلاً إلى ExitContainer().
عندما يتم استدعاء EnterContainer()، يجب وضع الكائن TLVReader في عنصر الحاوية لتتم قراءته. وتستعين الطريقة كوسيطة بمرجع قيمة TLVType التي سيتم استخدامها لحفظ سياق القارئ أثناء قراءته للحاوية.
عند إرجاع الإجراء EnterContainer()، يتم وضع القارئ مباشرةً قبل العضو الأول في الحاوية. يؤدي استدعاء الدالة Next() بشكل متكرر إلى دفع القارئ إلى التنقّل بين أجزاء المجموعة إلى أن يتم الوصول إلى النهاية، وعند ذلك سيعيد القارئ عرض WEAVE_END_OF_TLV.
بعد انتهاء التطبيق من قراءة الحاوية، يمكنه مواصلة قراءة العناصر بعد الحاوية عن طريق استدعاء الإجراء ExitContainer().
التفاصيل | |||||
---|---|---|---|---|---|
المَعلمات |
|
||||
قيم الإرجاع |
|
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_NotSpecified.
التفاصيل | |
---|---|
المرتجعات |
نوع الحقل TLVType للحاوية الحالية أو kTLVType_NotSpecified إذا لم يتم وضع TLVReader داخل حاوية.
|
GetControlByte
uint16_t GetControlByte( void ) const
لعرض بايت التحكّم المرتبط بعنصر TLV الحالي.
من المفترَض ألا يعرف أحد عن بايت التحكّم، ويجب ألا يتمكّن أحد من الوصول إليه سوى التطبيق الداخلي للغة TLV. مع ذلك، يكون الوصول إلى بايت التحكّم مفيدًا لأغراض تصحيح الأخطاء من خلال الأدوات المساعدةلتصحيح الأخطاءTLV (التي تحاول فك ترميز بايت التحكّم في العلامة عند طباعة محتوى المخزن المؤقت TLV بشكل جيّد).
التفاصيل | |
---|---|
المرتجعات |
عدد صحيح غير موقَّع يحتوي على بايت التحكّم المرتبط بعنصر TLV الحالي. يتم عرض kTLVControlByte_NotSpecified إذا لم يكن القارئ في موضعه على أحد العناصر.
|
GetDataPtr
WEAVE_ERROR GetDataPtr( const uint8_t *& data )
مرِّر مؤشر الماوس فوق البايت المشفّر الأولي لعنصر سلسلة بايت TLV أو عنصر سلسلة UTF8.
تعرض هذه الطريقة مؤشرًا مباشرًا لقيمة السلسلة المشفرة داخل المخزن المؤقت للإدخال الأساسي. للنجاح، تتطلب الطريقة أن تكون قيمة السلسلة بأكملها موجودة في مخزن مؤقت واحد. وبخلاف ذلك، تعرِض الطريقة WEAVE_ERROR_TLV_UNDERRUN. وهذا يجعل طريقة الاستخدام المحدود عند قراءة البيانات من مخازن احتياطية متعددة ومتجاورة.
التفاصيل | |||||||||
---|---|---|---|---|---|---|---|---|---|
المَعلمات |
|
||||||||
قيم الإرجاع |
|
GetLength
uint32_t GetLength( void ) const
تعرض طول البيانات المرتبطة بعنصر TLV الحالي.
ينطبق طول البيانات فقط على عناصر من نوع UTF8 أو سلسلة بايت. بالنسبة إلى سلاسل UTF8، تكون القيمة المعروضة هي عدد وحدات البايت في السلسلة، وليس عدد الأحرف.
التفاصيل | |
---|---|
المرتجعات |
طول البيانات المرتبطة بعنصر TLV الحالي (بالبايت)، أو القيمة 0 إذا لم يكن العنصر الحالي سلسلة UTF8 أو سلسلة بايت، أو إذا لم يكن القارئ في موضعه على عنصر.
|
GetLengthRead
uint32_t GetLengthRead( void ) const
تعرض إجمالي عدد وحدات البايت التي تمت قراءتها منذ إعداد القارئ.
التفاصيل | |
---|---|
المرتجعات |
إجمالي عدد وحدات البايت التي تمت قراءتها منذ إعداد القارئ.
|
GetReadPoint
const uint8_t * GetReadPoint( void ) const
للحصول على نقطة في المخزن المؤقت الأساسي للإدخال، والتي تتوافق مع الموضع الحالي للقارئ.
التفاصيل | |
---|---|
المرتجعات |
مؤشر إلى المخزن المؤقت الأساسي للإدخال يتوافق مع الموضع الحالي للقارئ
|
GetRemainingLength
uint32_t GetRemainingLength( void ) const
لعرض إجمالي عدد وحدات البايت التي يمكن قراءتها حتى يبلغ الحد الأقصى لطول القراءة.
التفاصيل | |
---|---|
المرتجعات |
إجمالي عدد وحدات البايت التي يمكن قراءتها إلى أن يتم الوصول إلى الحد الأقصى لمدة القراءة.
|
GetString
WEAVE_ERROR GetString( char *buf, uint32_t bufSize )
احصل على قيمة عنصر سلسلة البايت أو UTF8 الحالي كسلسلة منتهية فارغة.
لتحديد حجم المخزن المؤقت المطلوب للإدخال، يمكنك استدعاء الطريقة GetLength() قبل طلب GetBytes(). يجب أن يكون المخزن المؤقت للإدخال أكبر من طول السلسلة بمقدار بايت واحد على الأقل من طول السلسلة لاستيعاب الحرف الفارغ.
التفاصيل | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
المَعلمات |
|
||||||||||
قيم الإرجاع |
|
GetTag
uint64_t GetTag( void ) const
يتم عرض العلامة المرتبطة بعنصر TLV الحالي.
يمكن استخدام القيمة التي تعرضها GetTag() مع الدوال المساعدة للعلامات (IsProfileTag() وIsContextTag() وProfileIdFromTag() وغيرها) لتحديد نوع العلامة واستخراج قيم مختلفة لحقول العلامات.
التفاصيل | |
---|---|
المرتجعات |
عدد صحيح غير موقَّع يحتوي على معلومات حول العلامة المرتبطة بعنصر TLV الحالي.
|
GetType
TLVType GetType( void ) const
إنت
void Init( const TLVReader & aReader )
إنت
void Init( const uint8_t *data, uint32_t dataLen )
إنت
void Init( PacketBuffer *buf, uint32_t maxLen )
تهيئة كائن TLVReader لقراءته من كائن PacketBuffer واحد.
يبدأ التحليل من موضع بدء المخزن المؤقت (buf->DataStart() ) ويستمر حتى نهاية البيانات في المخزن المؤقت (كما هو موضّح في buf->Datalen() )، أو يتم تحليل وحدات بايت maxLen.
التفاصيل | |||||
---|---|---|---|---|---|
المَعلمات |
|
إنت
void Init( PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers )
تهيئة كائن TLVReader لقراءته من كائن TLVReader واحد أو أكثر.
يبدأ التحليل عند موضع بداية المخزن المؤقت الأولي (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(TLVTypeexpectedType, uint64_texpectedTag) طريقة ملائمة لها سلوك Next() نفسه، ولكنها تتحقق أيضًا من تطابق نوع وعلامة عنصر TLV الجديد مع الوسيطات المقدَّمة.
التفاصيل | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
المَعلمات |
|
||||||||||||||||
قيم الإرجاع |
|
OpenContainer
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 الحالي مباشرةً.
طريقة تخطي() وضع كائن القارئ بعد عنصر TLV الحالي مباشرةً، بحيث يؤدي الاستدعاء التالي إلى Next() إلى توجيه القارئ إلى العنصر التالي. كما هو الحال مع Next()، إذا تم وضع القارئ في عنصر حاوية في وقت الاستدعاء، سيتم تخطّي أعضاء الحاوية. إذا لم يتم وضع القارئ على أي عنصر، فسيظل موضعه بدون تغيير.
التفاصيل | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
قيم الإرجاع |
|
VerifyEndOfContainer
WEAVE_ERROR VerifyEndOfContainer( void )
للتحقّق من أنّ الكائن TVLReader يقع في نهاية حاوية TLV.
تتحقّق طريقة VerifyEndOfContainer() من عدم توفُّر عناصر TLV أخرى يمكن قراءتها ضمن حاوية TLV الحالية. هذه طريقة مناسبة تشبه استدعاء Next() والبحث عن القيمة المعروضة WEAVE_END_OF_TLV.
التفاصيل | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
قيم الإرجاع |
|
الدوال المحمية
ClearElementState
void ClearElementState( void )
ElementType
TLVElementType ElementType( void ) const
هذه طريقة خاصة تعرض TLVElementType من mControlByte.
EnsureData
WEAVE_ERROR EnsureData( WEAVE_ERROR noDataErr )
GetElementHeadLength
WEAVE_ERROR GetElementHeadLength( uint8_t & elemHeadBytes ) const
هذه طريقة خاصة تُستخدَم لحساب طول رأس عنصر TLV.
IsContainerOpen
bool IsContainerOpen( void ) const
ReadData
WEAVE_ERROR ReadData( uint8_t *buf, uint32_t len )
ReadElement
WEAVE_ERROR ReadElement( void )
ReadTag
uint64_t ReadTag( TLVTagControl tagControl, const uint8_t *& p )
SetContainerOpen
void SetContainerOpen( bool aContainerOpen )
SkipData
WEAVE_ERROR SkipData( void )
يمكنك تخطّي أي بيانات مضمَّنة في TLV الحالي من خلال قراءتها بدون مورد احتياطي وجهة.
التفاصيل | |||||
---|---|---|---|---|---|
قيم الإرجاع |
|
SkipToEndOfContainer
WEAVE_ERROR SkipToEndOfContainer( void )
VerifyElement
WEAVE_ERROR VerifyElement( void )
الدوال الثابتة المحمية
FailGetNextBuffer
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 )