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
l10n-placeholder56PutBytes
l10n-placeholder57PutNull
l10n-placeholder58PutString
l10n-placeholder59PutString
l10n-placeholder60SetImplicitProfileId
l10n-placeholder61شناسه نمایه ضمنی را برای شی TLVUpdater تنظیم کنید.
این روش شناسه نمایه ضمنی را برای شی TLVUpdater تنظیم می کند. وقتی از بهروزرسانیکننده خواسته میشود یک عنصر جدید را رمزگذاری کند، اگر شناسه نمایه تگ مرتبط با عنصر جدید با مقدار profileId مطابقت داشته باشد، بهروزرسانیکننده برچسب را به صورت ضمنی رمزگذاری میکند و در نتیجه شناسه نمایه را در این فرآیند حذف میکند.
جزئیات | |||
---|---|---|---|
مولفه های |
|
StartContainer
l10n-placeholder62VerifyEndOfContainer
l10n-placeholder63جز در مواردی که غیر از این ذکر شده باشد، محتوای این صفحه تحت مجوز Creative Commons Attribution 4.0 License است و نمونه کدها نیز دارای مجوز Apache 2.0 License است. برای اطلاع از جزئیات، به خطمشیهای سایت Google Developers مراجعه کنید. جاوا علامت تجاری ثبتشده Oracle و/یا شرکتهای وابسته به آن است. Thread علامت تجاری ثبتشده Thread Group, Inc است.
تاریخ آخرین بهروزرسانی 2022-08-30 بهوقت ساعت هماهنگ جهانی.