nl:: Weave:: TLV:: TLVReader
#include <src/lib/core/WeaveTLV.h>
מנתח נתונים יעיל בזיכרון לקידוד נתונים בפורמט TLV של Weave.
סיכום
ב-TLVReader מטמיעים מנתח נתונים מסוג 'משיכה' בלבד, לנתוני Weave TLV. אובייקט TLVReader פועל כסמן שיכול לשמש לאיטרציה על פני רצף של רכיבי TLV ולפרש את התוכן שלהם. כשאפליקציות ממוקמות על רכיב, הן יכולות לבצע קריאות לשיטות Get() של הקורא כדי להריץ שאילתה על הסוג והתג של הרכיב הנוכחי, ולחלץ כל ערך משויך. שיטת Next() של הקורא משמשת להתקדמות מרכיב לרכיב.
אובייקט TLVReader תמיד ממוקם לפני, על או אחרי רכיב TLV. באתחול הראשון, TLVReader ממוקם ממש לפני הרכיב הראשון של הקידוד. כדי להתחיל לקרוא, האפליקציה צריכה לבצע קריאה ראשונית לשיטה Next() כדי למקם את הקורא ברכיב הראשון. כשיש חפיפה במבנה של קונטיינר, אפשר להשתמש במערך או בנתיב במתודה OpenContainer() או EnterContainer() כדי לבצע איטרציה בתוכן של הקונטיינר.
כשהקורא מגיע לסוף של קידוד TLV, או לאלמנט האחרון בתוך קונטיינר, הוא מסמן לאפליקציה על ידי החזרת שגיאת WEAVE_END_OF_TLV מה-method Next(). הקורא ימשיך להחזיר WEAVE_END_OF_TLV עד שהוא יופעל מחדש, או עד ליציאה מהמאגר הנוכחי (באמצעות CloseContainer() / ExitContainer()).
אובייקט TLVReader יכול לנתח נתונים ישירות ממאגר נתונים זמני של קלט, או משרשרת של PacketBuffers אחת או יותר. בנוסף, אפליקציות יכולות לספק פונקציית 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)
|
הפונקציה Allocat מופיעה ומחזירה מאגר נתונים זמני שמכיל את הערך של מחרוזת ה-UTF8 או הבייט הנוכחי.
|
DupString(char *& buf)
|
הפונקציה Allocat מופיעה ומחזירה מאגר נתונים זמני שמכיל את הערך עם סיום ה-null של הבייט או מחרוזת 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. כשמפעילים את הפונקציה, היא אמורה לספק נתונים נוספים כדי שהקורא יוכל לנתח אותה או לאותת לקורא שאין עוד נתונים זמינים.
פרטים | |||||||||
---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||
מוחזר ערכים |
|
מאפיינים ציבוריים
AppData
void * AppData
שדה מצביע שאפשר להשתמש בו לנתונים ספציפיים לאפליקציה.
GetNextBuffer
GetNextBufferFunct GetNextBuffer
מצביע לפונקציה שתפיק נתוני קלט עבור האובייקט TLVReader.
אם היא מוגדרת ל-NULL (ערך ברירת המחדל), הקורא יניח שאין נתוני קלט נוספים זמינים.
אפליקציה יכולה להגדיר את GetNextBuffer בכל שלב, אבל בדרך כלל היא מוגדרת באמצעות אתחול הקורא.
למידע נוסף על יישום פונקציית GetNextBuffer, ראו הגדרה של סוג GetNextBufferFunct.
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() צריך לבצע קריאה תואמת ל-CloseContainer(), ומעבירה הפניה לאותו קורא קונטיינרים לשתי ה-methods.
כאשר CloseContainer() חוזר, קורא ההורה ממוקם ממש לפני הרכיב הראשון שאחרי הקונטיינר. מהשלב הזה, האפליקציה יכולה להשתמש בשיטה Next() כדי להתקדם דרך כל הרכיבים שנותרו.
בכל שלב, אפליקציות יכולות לקרוא לסגירה של CloseContainer() בקורא הורה, גם אם כל הרכיבים בקונטיינר הבסיסי נקראו. אחרי הקריאה ל-CloseContainer(), האפליקציה צריכה להתייחס לקורא הקונטיינר כ-'de-initialized' ולא יכולים להשתמש בו שוב בלי לאתחל אותו מחדש.
פרטים | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||
מוחזר ערכים |
|
DupBytes
WEAVE_ERROR DupBytes( uint8_t *& buf, uint32_t & dataLen )
הפונקציה Allocat מופיעה ומחזירה מאגר נתונים זמני שמכיל את הערך של מחרוזת ה-UTF8 או הבייט הנוכחי.
השיטה הזו יוצרת מאגר נתונים זמני ומחזירה עותק של הנתונים שמשויכים לרכיב המחרוזת של בייטים או UTF-8 במיקום הנוכחי. הזיכרון למאגר הנתונים הזמני נוצר באמצעות Malloc() , וצריך לפנות אותו באמצעות free() על ידי המתקשר/ת כשאין בו יותר צורך.
פרטים | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||
מוחזר ערכים |
|
DupString
WEAVE_ERROR DupString( char *& buf )
הפונקציה Allocat מופיעה ומחזירה מאגר נתונים זמני שמכיל את הערך עם סיום ה-null של הבייט או מחרוזת UTF8 הנוכחיים.
השיטה הזו יוצרת מאגר נתונים זמני ומחזירה עותק עם סיום null של הנתונים המשויכים לרכיב המחרוזת של בייטים או UTF-8 במיקום הנוכחי. הזיכרון למאגר הנתונים הזמני נוצר באמצעות Malloc() , וצריך לפנות אותו באמצעות free() על ידי המתקשר/ת כשאין בו יותר צורך.
פרטים | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||
מוחזר ערכים |
|
EnterContainer
WEAVE_ERROR EnterContainer( TLVType & outerContainerType )
הכנה של אובייקט TLVReader לקריאת החברים ברכיב הקונטיינר TLV.
ה-method EnterContainer() מכינה את אובייקט TLVReader הנוכחי כך שיתחיל לקרוא את הרכיבים החברים בקונטיינר TLV (מבנה, מערך או נתיב). בכל קריאה ל-EnterContainer(), חייבים לבצע קריאה תואמת ל-ExitContainer().
כשקוראים לפונקציה EnterContainer(), את האובייקט TLVReader חייב להיות ממוקם על רכיב הקונטיינר כדי לקרוא אותו. השיטה הזו משתמשת כארגומנט כהפניה לערך TLVType שישמשו לשמירת ההקשר של הקורא בזמן קריאת הקונטיינר.
כשהשיטה EnterContainer() חוזרת, הקורא ממוקם מיד לפני האיבר הראשון של הקונטיינר. קריאה חוזרת ל-Next() תקדם את הקורא דרך החברים באוסף עד שהוא יגיע לסוףו, ואז הקורא יחזיר WEAVE_END_OF_TLV.
לאחר שהאפליקציה מסיימת לקרוא קונטיינר, היא יכולה להמשיך לקרוא את הרכיבים אחרי הקונטיינר על ידי קריאה לשיטה ExitContainer().
פרטים | |||||
---|---|---|---|---|---|
פרמטרים |
|
||||
מוחזר ערכים |
|
ExitContainer
WEAVE_ERROR ExitContainer( TLVType outerContainerType )
משלימה את הקריאה של קונטיינר TLV ומכינה אובייקט TLVReader לקריאת רכיבים אחרי הקונטיינר.
ה-method 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 קורא כרגע.
ה-method GetContainerType() מחזירה את סוג הקונטיינר TLV שבו ה-TLVReader קורא. אם ה-TLVReader ממוקם ברמה החיצונית ביותר של קידוד TLV (כלומר לפני, מעל או אחרי רכיב ה-TLV החיצוני ביותר), ה-method תחזיר kTLVType_NotSpecified.
פרטים | |
---|---|
החזרות |
ה-TLVType של הקונטיינר הנוכחי, או kTLVType_NotSpecified אם ה-TLVReader לא ממוקם בתוך קונטיינר.
|
GetControlByte
uint16_t GetControlByte( void ) const
הפונקציה מחזירה את בייט הבקרה שמשויך לרכיב TLV הנוכחי.
במצב אידיאלי אף אחד לא צריך לדעת על בייט הבקרה, ורק להטמעה הפנימית של TLV צריכה להיות גישה. עם זאת, גישה לבייט הבקרה שימושית לצורך ניפוי באגים באמצעות TLV
פרטים | |
---|---|
החזרות |
מספר שלם לא חתום שמכיל את הבייט של הבקרה שמשויך לרכיב TLV הנוכחי. הפונקציה kTLVControlByte_NotSpecified מוחזר אם הקורא לא ממוקם על רכיב.
|
GetDataPtr
WEAVE_ERROR GetDataPtr( const uint8_t *& data )
קבלת מצביע לבייט המקודד הראשוני של בייט TLV או רכיב מחרוזת UTF8.
השיטה הזו מחזירה מצביע ישיר את ערך המחרוזת המקודד בתוך מאגר הקלט הבסיסי. כדי להצליח, השיטה דורשת שכל ערך המחרוזת יהיה במאגר נתונים זמני אחד. אחרת, ה-method מחזירה 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(). כדי להכיל את התו ה-null, מאגר הנתונים הזמני חייב להיות גדול בבייט אחד לפחות מאורך המחרוזת.
פרטים | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||
מוחזר ערכים |
|
GetTag
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 אחד או יותר.
הניתוח מתחיל בנקודת ההתחלה של מאגר הנתונים הזמני (buf->DataStart() ). אם הערך של הפרמטר AllowDiscontiguousBuffers הוא True, הקורא יתקדם בשרשרת של מאגרי הנתונים הזמניים שמקושרים באמצעות מצביעי Next(). הניתוח ממשיך עד שיסופקו כל הנתונים בשרשרת מאגר הנתונים הזמני (כפי שנקבע על ידי buf->Datalen() ) או ינותחו בייטים של maxLen.
פרטים | |||||||
---|---|---|---|---|---|---|---|
פרמטרים |
|
הבא
WEAVE_ERROR Next( void )
מקדמת את האובייקט TLVReader לרכיב TLV הבא שיש לקרוא.
ה-method Next() ממקמת את אובייקט ה-Reader ברכיב הבא בקידוד TLV שנמצא באותו הקשר של גבולות. באופן ספציפי, אם הקורא ממוקם ברמה החיצונית ביותר של קידוד TLV, קריאה של Next() תקדם את הקורא לאלמנט הבא, העליון ביותר. אם הקורא ממוקם בתוך רכיב קונטיינר TLV (מבנה, מערך או נתיב), קריאה ל-Next() תקדם את הקורא לרכיב החבר הבא בקונטיינר.
מכיוון ש-Next() מגבילה את תנועת הקורא להקשר הבלימת הנוכחי, קריאה ל-Next() כשהקורא ממוקם על רכיב בקונטיינר תקדם מעל הקונטיינר וידלג על הרכיבים שכלולים בו (ועל הרכיבים של קונטיינרים בתוך קונטיינרים) עד שהוא יגיע לאלמנט הראשון אחרי הקונטיינר.
כשאין רכיבים נוספים בתוך הקשר מסוים של הגבלה, ה-method Next() מחזירה שגיאת WEAVE_END_OF_TLV והמיקום של הקורא יישאר ללא שינוי.
פרטים | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
מוחזר ערכים |
|
הבא
WEAVE_ERROR Next( TLVType expectedType, uint64_t expectedTag )
מקדמת את האובייקט TLVReader לרכיב TLV הבא שיש לקרוא, עם הצהרה על הסוג והתג של הרכיב החדש.
השיטה Next(TLVType ExpectedType, 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.
שיטת Skip() ממקמת את אובייקט הקורא מיד אחרי רכיב ה-TLV הנוכחי, כך שקריאה נוספת ל-Next() תקדם את הקורא לאלמנט הבא. בדומה ל-Next(), אם הקורא ממוקם על רכיב קונטיינר בזמן הקריאה, המערכת תדלג על החברים במאגר. אם הקורא לא ממוקם על רכיב כלשהו, המיקום שלו נשאר ללא שינוי.
פרטים | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
מוחזר ערכים |
|
VerifyEndOfContainer
WEAVE_ERROR VerifyEndOfContainer( void )
מאשרת שהאובייקט TVLReader נמצא בסוף קונטיינר מסוג TLV.
ה-method 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 )