nl:: বুনা:: TLV:: TLVUpdater
#include <src/lib/core/WeaveTLV.h>
TLV এনকোডিং-এ উপাদান সম্পাদনা/সংযোজন/মোছার জন্য একটি ইউনিফাইড রিডার/রাইটার ইন্টারফেস প্রদান করে।
সারাংশ
TLVUpdater হল TLVReader এবং TLVWriter অবজেক্টের একটি ইউনিয়ন এবং একটি এনকোডিং-এ ডেটা সম্পাদনা/মোছার পাশাপাশি TLV এনকোডিং-এ নতুন উপাদান যোগ করার জন্য ইন্টারফেস পদ্ধতি প্রদান করে। TLVUpdater অবজেক্টটি মূলত দুটি কার্সারের মতো কাজ করে, একটি বিদ্যমান এনকোডিং পড়ার জন্য এবং অন্যটি লেখার জন্য (হয় বিদ্যমান ডেটা অনুলিপি করার জন্য বা নতুন ডেটা লেখার জন্য)।
শব্দার্থগতভাবে, TLVUpdater বস্তুটি TLVReader এবং TLVWriter- এর মিলনের মত কাজ করে। TLVUpdater পদ্ধতির TLVReader/TLVWriter-এ একইভাবে নামধারী কাউন্টারপার্টের মতো কমবেশি একই অর্থ রয়েছে। যেখানে শব্দার্থবিদ্যায় পার্থক্য আছে, পার্থক্যগুলি WeaveTLVUpdater.cpp- এ ফাংশনের মন্তব্য বিভাগে স্পষ্টভাবে নথিভুক্ত করা হয়েছে।
TLVUpdater- এর PutBytes() এবং PutString() পদ্ধতি সম্পর্কে একটি বিশেষ গুরুত্বপূর্ণ নোট হল যে এটি এনকোডিংকে একটি দূষিত অবস্থায় রেখে যেতে পারে যখন একটি ওভারফ্লো ঘটে তখন শুধুমাত্র এলিমেন্ট হেডার লেখা থাকে। এনকোডিং লেখার জন্য আনুমানিক পর্যাপ্ত ফাঁকা জায়গা আছে তা নিশ্চিত করতে অ্যাপ্লিকেশনগুলি GetRemainingFreeLength() কে কল করতে পারে। মনে রাখবেন GetRemainingFreeLength() আপনাকে শুধুমাত্র উপলব্ধ বিনামূল্যের বাইটগুলি বলে এবং অ্যাপ্লিকেশনটির জন্য এনকোড করা ডেটার দৈর্ঘ্য জানার কোনো উপায় নেই যা লেখা হয়। ওভারফ্লো হওয়ার ক্ষেত্রে, PutBytes() এবং PutString() উভয়ই কলারকে WEAVE_ERROR_BUFFER_TOO_SMALL ফেরত দেবে।
এছাড়াও, নোট করুন যে নেক্সট() পদ্ধতিটি বর্তমান উপাদানটি এড়িয়ে যাওয়ার জন্য এবং অভ্যন্তরীণ পাঠককে পরবর্তী উপাদানে অগ্রসর করার জন্য ওভারলোড করা হয়েছে। যেহেতু ইতিমধ্যে এনকোড করা উপাদানগুলি এড়িয়ে যাওয়ার জন্য অভ্যন্তরীণ লেখকের ফ্রি স্পেস স্টেট ভেরিয়েবলগুলিকে নতুন খালি স্থানের জন্য অ্যাকাউন্টে পরিবর্তন করতে হবে (এড়িয়ে যাওয়ার মাধ্যমে উপলব্ধ করা হয়েছে), অ্যাপ্লিকেশনটি একটি Get() পদ্ধতির পরে আপডেটারে নেক্সট() কল করবে বলে আশা করা হচ্ছে যার মান এটি নেই আবার লিখতে চাই না (যা বর্তমান উপাদানটি এড়িয়ে যাওয়ার সমতুল্য)।
পাবলিক ফাংশন | |
---|---|
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) | একটি TLVReader ব্যবহার করে একটি TLVUpdater অবজেক্ট শুরু করুন। |
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) |
পাবলিক ফাংশন
কপি এলিমেন্ট
WEAVE_ERROR CopyElement( TLVReader & reader )
কপি এলিমেন্ট
WEAVE_ERROR CopyElement( uint64_t tag, TLVReader & reader )
ডুপবাইটস
WEAVE_ERROR DupBytes( uint8_t *& buf, uint32_t & dataLen )
ডুপস্ট্রিং
WEAVE_ERROR DupString( char *& buf )
শেষ কন্টেইনার
WEAVE_ERROR EndContainer( TLVType outerContainerType )
এন্টার কন্টেইনার
WEAVE_ERROR EnterContainer( TLVType & outerContainerType )
একটি পাত্রের উপাদান পড়ার জন্য একটি TLVUpdater অবজেক্ট প্রস্তুত করে।
এটি আউটপুট TLV- এ কন্টেইনার অবজেক্টের শুরুকে এনকোড করে।
EnterContainer() পদ্ধতিটি বর্তমান TLVUpdater অবজেক্টকে একটি TLV ধারক (একটি কাঠামো, অ্যারে বা পথ) এর সদস্য উপাদানগুলি পড়তে শুরু করে। EnterContainer() অ্যাপ্লিকেশনে প্রতিটি কলের জন্য ExitContainer() এ একটি সংশ্লিষ্ট কল করতে হবে।
যখন EnterContainer() বলা হয় তখন TLVUpdater এর রিডার অবশ্যই কন্টেইনার এলিমেন্টে অবস্থান করতে হবে। পদ্ধতিটি একটি যুক্তি হিসাবে একটি TLVType মানের একটি রেফারেন্স নেয় যা কন্টেইনার পড়ার সময় আপডেটারের প্রসঙ্গ সংরক্ষণ করতে ব্যবহার করা হবে।
যখন EnterContainer() পদ্ধতিটি ফিরে আসে, আপডেটারটি কন্টেইনারের প্রথম সদস্যের ঠিক আগে অবস্থান করে। নেক্সট() কে বারবার কল করা শেষ না হওয়া পর্যন্ত সংগ্রহের সদস্যদের মাধ্যমে আপডেটারকে অগ্রসর করবে, এই সময়ে আপডেটার WEAVE_END_OF_TLV ফিরে আসবে।
একবার অ্যাপ্লিকেশনটি একটি কন্টেইনার পড়া শেষ করলে এটি ExitContainer() পদ্ধতিতে কল করে কন্টেইনারের পরে উপাদানগুলি পড়া চালিয়ে যেতে পারে।
বিস্তারিত | |||||||
---|---|---|---|---|---|---|---|
পরামিতি |
| ||||||
রিটার্ন মান |
|
প্রস্থান কন্টেইনার
WEAVE_ERROR ExitContainer( TLVType outerContainerType )
একটি TLV ধারক উপাদানের পড়া সম্পূর্ণ করে এবং TLV আউটপুটে TLV উপাদানের একটি শেষ এনকোড করে।
ExitContainer() পদ্ধতি EnterContainer() এ কল করার পরে একটি TLVUpdater অবজেক্টের অবস্থা পুনরুদ্ধার করে। 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 )
দৈর্ঘ্য পান
uint32_t GetLength( void ) const
GetLengthRead
uint32_t GetLengthRead( void ) const
GetLengthWritten
uint32_t GetLengthWritten( void )
GetReader
void GetReader( TLVReader & containerReader )
রেমেনিংফ্রীলেংথ পান
uint32_t GetRemainingFreeLength( void )
অবশিষ্ট দৈর্ঘ্য পান
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 )
একটি TLVReader ব্যবহার করে একটি TLVUpdater অবজেক্ট শুরু করুন।
এই পদ্ধতিতে কল করার সময়, TLVReader দ্বারা নির্দেশিত বাফারের TLV ডেটা বর্তমান রিড পয়েন্ট থেকে বাফারের শেষে সরানো হয়। একটি নতুন প্রাইভেট TLVReader অবজেক্ট এই নতুন অবস্থান থেকে পড়ার জন্য আরম্ভ করা হয়, যখন একটি নতুন প্রাইভেট TLVWriter অবজেক্ট খালি করা বাফার স্পেসে লেখার জন্য আরম্ভ করা হয়।
মনে রাখবেন যে যদি TLVReader ইতিমধ্যেই একটি উপাদান "চালু" অবস্থানে থাকে, তবে এটি প্রথমে সেই উপাদানটির শুরুতে ব্যাক-অফ করা হয়। এছাড়াও মনে রাখবেন যে এই ব্যাকিং অফ কন্টেইনার উপাদানগুলির সাথে ভালভাবে কাজ করে, যেমন, যদি TLVReader টি ইতিমধ্যেই EnterContainer() কল করার জন্য ব্যবহৃত হয়, তাহলে ব্যাক-অফ করার কিছু নেই। কিন্তু যদি TLVReader কন্টেইনার এলিমেন্টে অবস্থান করা হয় এবং EnterContainer() কে এখনও কল করা না হয়, তাহলে TLVReader অবজেক্টটিকে কন্টেইনার হেডের শুরুতে ব্যাক-অফ করা হয়।
ইনপুট TLVReader অবজেক্টটি ফেরত দেওয়ার আগে ধ্বংস হয়ে যাবে এবং ফিরে আসার সময় অ্যাপ্লিকেশনটি অবশ্যই এটি ব্যবহার করবে না।
বিস্তারিত | |||||||
---|---|---|---|---|---|---|---|
পরামিতি |
| ||||||
রিটার্ন মান |
|
সরান
WEAVE_ERROR Move( void )
ইনপুট TLV থেকে আউটপুট TLV এ বর্তমান উপাদানটি অনুলিপি করে।
Move() পদ্ধতি বর্তমান উপাদানটি কপি করে যার উপর TLVUpdater এর পাঠক অবস্থান করে, TLVUpdater এর লেখকের কাছে। অ্যাপ্লিকেশনটিকে নেক্সট() কল করা উচিত এবং এই পদ্ধতিতে কল করার আগে একটি উপাদানের উপর 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() পদ্ধতিটি একটি 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 )
পুটবুলিয়ান
WEAVE_ERROR PutBoolean( uint64_t tag, bool v )
পুটবাইটস
WEAVE_ERROR PutBytes( uint64_t tag, const uint8_t *buf, uint32_t len )
PutNull
WEAVE_ERROR PutNull( uint64_t tag )
পুটস্ট্রিং
WEAVE_ERROR PutString( uint64_t tag, const char *buf )
পুটস্ট্রিং
WEAVE_ERROR PutString( uint64_t tag, const char *buf, uint32_t len )
SetImplicitProfileId
void SetImplicitProfileId( uint32_t profileId )
TLVUpdater অবজেক্টের জন্য অন্তর্নিহিত প্রোফাইল আইডি সেট করুন।
এই পদ্ধতিটি TLVUpdater অবজেক্টের জন্য অন্তর্নিহিত প্রোফাইল ID সেট করে। যখন আপডেটারকে একটি নতুন এলিমেন্ট এনকোড করতে বলা হয়, যদি নতুন এলিমেন্টের সাথে যুক্ত ট্যাগের প্রোফাইল আইডি প্রোফাইল আইডির মানের সাথে মেলে, আপডেটার ট্যাগটিকে অন্তর্নিহিত আকারে এনকোড করবে, যার ফলে প্রক্রিয়ায় প্রোফাইল আইডি বাদ যাবে।
বিস্তারিত | |||
---|---|---|---|
পরামিতি |
|
স্টার্ট কন্টেইনার
WEAVE_ERROR StartContainer( uint64_t tag, TLVType containerType, TLVType & outerContainerType )
EndOfContainer যাচাই করুন
WEAVE_ERROR VerifyEndOfContainer( void )