nl:: بافت:: TLV:: TLVUpdater
#include <src/lib/core/WeaveTLV.h>
یک رابط Reader/Writer یکپارچه برای ویرایش/افزودن/حذف عناصر در رمزگذاری 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() برای رد شدن عنصر فعلی و همچنین پیشبرد خواننده داخلی به عنصر بعدی، بارگذاری شده است. از آنجایی که پرش از عناصر کدگذاری شده از قبل مستلزم تغییر متغیرهای حالت فضای آزاد نویسنده داخلی برای در نظر گرفتن فضای آزاد شده جدید (با پرش در دسترس است)، انتظار می رود که برنامه بعد از متد Get() که مقدار آن را ندارد ، Next() را در به روز رسانی فراخوانی کند. نمیخواهم بنویسم (که معادل پرش از عنصر فعلی است).
توابع عمومی | |
---|---|
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
شروع کنید
WEAVE_ERROR Init( uint8_t *buf, uint32_t dataLen, uint32_t maxLen )
یک شی TLVUpdater را برای ویرایش یک بافر ورودی واحد راه اندازی کنید.
با فراخوانی این روش، دادههای TLV در بافر به انتهای بافر منتقل میشوند و یک شی TLVReader خصوصی روی این بافر تغییر مکان اولیه داده میشود. یک شی TLVWriter خصوصی نیز در فضای آزاد که اکنون در ابتدا در دسترس است، مقداردهی اولیه می شود. برنامه ها می توانند از شی TLVUpdater برای تجزیه داده های TLV و اصلاح/حذف عناصر موجود یا اضافه کردن عناصر جدید به رمزگذاری استفاده کنند.
جزئیات | |||||||
---|---|---|---|---|---|---|---|
پارامترها |
| ||||||
ارزش های بازگشتی |
|
شروع کنید
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 )
VerifyEndOfContainer
WEAVE_ERROR VerifyEndOfContainer( void )
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates. The OPENTHREAD and related marks are trademarks of the Thread Group and are used under license.
تاریخ آخرین بهروزرسانی 2024-11-14 بهوقت ساعت هماهنگ جهانی.