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 एन्कोडिंग के आखिर या कंटेनर के आखिरी एलिमेंट तक पहुंचता है, तो यह Next() तरीके से WEAVE_END_OF_TLV गड़बड़ी लौटाकर ऐप्लिकेशन को सिग्नल देता है. जब तक इसे फिर से चालू नहीं किया जाता, तब तक रीडर 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)
|
OpenContainer() को कॉल करने के बाद, TLV कंटेनर की रीडिंग पूरी होती है.
|
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
किसी एक PacketBuffer से पढ़ने के लिए, TLVReader ऑब्जेक्ट को शुरू करता है.
|
Init(PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers)
|
void
एक या ज़्यादा PacketBuffers से पढ़ने के लिए, TLVReader ऑब्जेक्ट शुरू करता है.
|
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
यह एक निजी तरीका है, जो mControlByte से TLVElementType दिखाता है.
|
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 ऑब्जेक्ट के लिए इनपुट डेटा जनरेट करेगा.
अगर इस वैल्यू को शून्य (डिफ़ॉल्ट वैल्यू) पर सेट किया जाता है, तो पाठक यह मानेगा कि कोई और इनपुट डेटा उपलब्ध नहीं है.
GetNextBuffer को किसी भी समय ऐप्लिकेशन की मदद से सेट किया जा सकता है. हालांकि, आम तौर पर इसे तब सेट किया जाता है, जब रीडर शुरू किया जाता है.
GetNextBufferFunct प्रकार की परिभाषा देखें और GetNextBuffer फ़ंक्शन को लागू करने के बारे में ज़्यादा जानकारी पाएं.
ImplicitProfileId
uint32_t ImplicitProfileId
अस्पष्ट रूप में एन्कोड किए गए प्रोफ़ाइल टैग के लिए उपयोग की जाने वाली प्रोफ़ाइल आईडी.
जब लोगों को प्रोफ़ाइल से जुड़ा कोई ऐसा टैग मिलता है जिसे इंप्लिसिट फ़ॉर्म में कोड में बदला गया है, तो वह टैग के लिए, अनुमानित प्रोफ़ाइल आईडी के तौर पर ImplicitProfileId
प्रॉपर्टी की वैल्यू का इस्तेमाल करता है.
डिफ़ॉल्ट रूप से, ImplicitProfileId
प्रॉपर्टी kProfileIdNotEdit पर सेट होती है. TLV को डिकोड करते समय, जिसमें साफ़ तौर पर कोड में बदले गए टैग शामिल हैं, ऐप्लिकेशन को इस तरह के टैग वाले किसी भी TLV एलिमेंट को पढ़ने से पहले ImplicitProfileId
को सेट करना चाहिए. सही प्रोफ़ाइल आईडी आम तौर पर, ऐप्लिकेशन के संदर्भ या बोले जा रहे प्रोटोकॉल पर निर्भर करता है.
अगर ImplicitProfileId
को kProfileIdNotSpecification पर सेट किया जाता है और अगर कोड में बदला गया कोई टैग मिलता है, तो रीडर 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 )
OpenContainer() को कॉल करने के बाद, TLV कंटेनर की रीडिंग पूरी होती है.
OpenContainer() को कॉल करने के बाद, CloseContainer() तरीका, पैरंट TLVReader ऑब्जेक्ट की स्थिति को पहले जैसा करता है. OpenContainer() को किए जाने वाले हर कॉल के लिए, CloseContainer() के लिए एक कॉल करना चाहिए. इससे, दोनों तरीकों में एक ही कंटेनर रीडर का रेफ़रंस पास किया जाता है.
जब CloseContainer() वापस आता है, तो पैरंट रीडर को कंटेनर के बाद आने वाले पहले एलिमेंट के ठीक पहले रखा जाता है. यहां से ऐप्लिकेशन, बाकी बचे किसी भी एलिमेंट के ज़रिए आगे बढ़ने के लिए, Next() तरीके का इस्तेमाल कर सकता है.
ऐप्लिकेशन किसी भी समय पैरंट रीडर पर, Close CloseContainer() को कॉल कर सकते हैं. भले ही, मौजूदा कंटेनर के सभी एलिमेंट पढ़े गए हों. CloseContainer() को कॉल करने के बाद, ऐप्लिकेशन को कंटेनर रीडर 'de-startized' पर विचार करना चाहिए और इसे फिर से शुरू किए बिना इसका इस्तेमाल न करें.
ब्यौरा | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
पैरामीटर |
|
||||||||||||
रिटर्न वैल्यू |
|
DupBytes
WEAVE_ERROR DupBytes( uint8_t *& buf, uint32_t & dataLen )
मौजूदा बाइट या UTF8 स्ट्रिंग की वैल्यू वाला बफ़र तय करता है और दिखाता है.
यह तरीका, मौजूदा स्थिति के लिए बफ़र बनाता है और बाइट या UTF-8 स्ट्रिंग एलिमेंट से जुड़े डेटा की कॉपी दिखाता है. बफ़र की मेमोरी Maloc() की मदद से ली जाती है और ज़रूरत न होने पर, कॉलर से खाली की जाने वाली मेमोरी खाली करनी चाहिए.
ब्यौरा | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
पैरामीटर |
|
||||||||||||
रिटर्न वैल्यू |
|
DupString
WEAVE_ERROR DupString( char *& buf )
मौजूदा बाइट या UTF8 स्ट्रिंग की शून्य-खत्म की गई वैल्यू वाला बफ़र तय करता है और दिखाता है.
यह तरीका, मौजूदा जगह पर बाइट या UTF-8 स्ट्रिंग एलिमेंट से जुड़े डेटा के लिए बफ़र बनाता है और उसकी ऐसी कॉपी दिखाता है जो खाली नहीं रहती. बफ़र की मेमोरी Maloc() की मदद से ली जाती है और ज़रूरत न होने पर, कॉलर से खाली (फ़्री) मेमोरी खाली करनी चाहिए.
ब्यौरा | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
पैरामीटर |
|
||||||||||||
रिटर्न वैल्यू |
|
EnterContainer
WEAVE_ERROR EnterContainer( TLVType & outerContainerType )
TLV कंटेनर एलिमेंट के सदस्यों को पढ़ने के लिए, TLVReader ऑब्जेक्ट तैयार करता है.
EnterContainer() तरीका, मौजूदा TLVReader ऑब्जेक्ट को किसी TLV कंटेनर (संरचना, अरे या पाथ) के सदस्य एलिमेंट को पढ़ना शुरू करने के लिए तैयार करता है. EnterContainer() को किए जाने वाले हर कॉल के लिए, ऐप्लिकेशन को ExitContainer() के हिसाब से कॉल करना चाहिए.
जब EnterContainer() को कहा जाता है, तो TLVReader ऑब्जेक्ट को पढ़ने के लिए कंटेनर एलिमेंट पर रखा जाना चाहिए. यह तरीका, आर्ग्युमेंट के तौर पर TLVType वैल्यू का रेफ़रंस लेता है. इसका इस्तेमाल, कंटेनर को पढ़ते समय पाठक का कॉन्टेक्स्ट सेव करने के लिए किया जाएगा.
जब EnterContainer() तरीका वापस लाया जाता है, तो रीडर को कंटेनर के पहले सदस्य के तुरंत पहले पोज़िशन किया जाता है. Next() को बार-बार कॉल करने पर, कलेक्शन के सदस्यों के ज़रिए लोगों को तब तक आगे बढ़ाया जा सकता है, जब तक कि वह खत्म नहीं हो जाता. ऐसा होने पर, पाठक को WEAVE_END_OF_TLV फ़ंक्शन दिखेगा.
ऐप्लिकेशन के कंटेनर को पढ़ने के बाद, यह ExitContainer() तरीके को कॉल करके कंटेनर के बाद एलिमेंट को पढ़ना जारी रख सकता है.
ब्यौरा | |||||
---|---|---|---|---|---|
पैरामीटर |
|
||||
रिटर्न वैल्यू |
|
ExitContainer
WEAVE_ERROR ExitContainer( TLVType outerContainerType )
यह फ़ंक्शन, TLV कंटेनर की रीडिंग को पूरा करता है. साथ ही, कंटेनर के बाद एलिमेंट को पढ़ने के लिए, TLVReader ऑब्जेक्ट तैयार करता है.
ExitContainer() का तरीका, EnterContainer() को कॉल करने के बाद TLVReader ऑब्जेक्ट की स्थिति को पहले जैसा करता है. EnterContainer() को किए जाने वाले हर कॉल के लिए, EnterContainer() तरीके से दी गई कॉन्टेक्स्ट वैल्यू को पास करते हुए ExitContainer() के लिए एक संबंधित कॉल करना चाहिए.
जब 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 स्ट्रिंग एलिमेंट की वैल्यू पाएं.
ज़रूरी इनपुट बफ़र साइज़ तय करने के लिए, GetBytes() को कॉल करने से पहले GetLength() तरीके को कॉल करें.
ब्यौरा | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
पैरामीटर |
|
||||||||||
रिटर्न वैल्यू |
|
GetContainerType
TLVType GetContainerType( void ) const
उस कंटेनर का टाइप दिखाता है जिसमें TLVReader दिख रहा है.
GetContainerType() तरीका, TLV कंटेनर का टाइप दिखाता है, जिसमें TLVReader डेटा पढ़ा जा रहा है. अगर TLVReader को TLV एन्कोडिंग के सबसे बाहरी लेवल पर सेट किया गया है (जैसे कि सबसे बाहरी TLV एलिमेंट के पहले, उस पर या बाद में), तो यह तरीका kTLVType_NotSafe दिखाएगा.
ब्यौरा | |
---|---|
लौटाए जाने वाले प्रॉडक्ट |
मौजूदा कंटेनर का TLVType या अगर TLVReader को किसी कंटेनर के अंदर नहीं रखा गया है, तो kTLVType_Not उपयोगकर्ता.
|
GetControlByte
uint16_t GetControlByte( void ) const
यह फ़ंक्शन मौजूदा TLV एलिमेंट से जुड़ा कंट्रोल बाइट दिखाता है.
आम तौर पर, किसी को भी कंट्रोल बाइट के बारे में जानने की ज़रूरत नहीं होती है. इसका ऐक्सेस, सिर्फ़ TLV के इंटरनल इंप्लिमेंटेशन के पास होना चाहिए. इसके बावजूद, कंट्रोल बाइट का ऐक्सेस होने से, TLVDebugउपयोगिताएं की मदद से डीबग करने में मदद मिलती है. ये सुविधाएं, TLV बफ़र कॉन्टेंट को अच्छी तरह से प्रिंट करते समय, टैग कंट्रोल बाइट को डिकोड करने की कोशिश करती हैं.
ब्यौरा | |
---|---|
लौटाए जाने वाले प्रॉडक्ट |
बिना साइन वाला पूर्णांक, जिसमें मौजूदा TLV एलिमेंट से जुड़े कंट्रोल बाइट शामिल होते हैं. अगर रीडर को किसी एलिमेंट पर नहीं रखा जाता है, तो kTLVControlByte_Not उपयोगकर्ता लौटाया जाता है.
|
GetDataPtr
WEAVE_ERROR GetDataPtr( const uint8_t *& data )
TLV बाइट या UTF8 स्ट्रिंग एलिमेंट के शुरुआती एन्कोड किए गए बाइट का पॉइंटर पाएं.
यह तरीका, दिए गए इनपुट बफ़र में कोड में बदली गई स्ट्रिंग की वैल्यू का डायरेक्ट पॉइंटर दिखाता है. सफल होने के लिए, तरीके में स्ट्रिंग की पूरी वैल्यू एक बफ़र में होनी चाहिए. ऐसा न होने पर, यह तरीका WEAVE_ERROR_TLV_UNDERRUN दिखाता है. यह एक से ज़्यादा अलग-अलग बफ़र से डेटा पढ़ते समय, सीमित इस्तेमाल के तरीके को बनाता है.
ब्यौरा | |||||||||
---|---|---|---|---|---|---|---|---|---|
पैरामीटर |
|
||||||||
रिटर्न वैल्यू |
|
GetLength
uint32_t GetLength( void ) const
मौजूदा TLV एलिमेंट से जुड़े डेटा की लंबाई दिखाता है.
डेटा की लंबाई सिर्फ़ UTF8 स्ट्रिंग या बाइट स्ट्रिंग टाइप के एलिमेंट पर लागू होती है. UTF8 स्ट्रिंग के लिए, लौटाया गया मान स्ट्रिंग में बाइट की संख्या होता है, न कि वर्णों की संख्या.
ब्यौरा | |
---|---|
लौटाए जाने वाले प्रॉडक्ट |
मौजूदा TLV एलिमेंट से जुड़े डेटा की लंबाई (बाइट में) या अगर मौजूदा एलिमेंट, UTF8 स्ट्रिंग या बाइट स्ट्रिंग नहीं है या रीडर किसी एलिमेंट पर मौजूद नहीं है, तो इसकी लंबाई 0 होगी.
|
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 स्ट्रिंग एलिमेंट की वैल्यू, खत्म की गई शून्य स्ट्रिंग के तौर पर पाएं.
ज़रूरी इनपुट बफ़र साइज़ तय करने के लिए, GetBytes() को कॉल करने से पहले GetLength() तरीके को कॉल करें. शून्य वर्ण को शामिल करने के लिए इनपुट बफ़र, स्ट्रिंग की लंबाई से कम से कम एक बाइट बड़ा होना चाहिए.
ब्यौरा | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
पैरामीटर |
|
||||||||||
रिटर्न वैल्यू |
|
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 )
किसी एक PacketBuffer से पढ़ने के लिए, TLVReader ऑब्जेक्ट को शुरू करता है.
पार्सिंग, बफ़र की स्टार्ट पोज़िशन (buf->DataStart()) से शुरू होती है और बफ़र में डेटा के आखिर तक जारी रहती है (जैसा कि buf->Datalen() से बताया गया है) या maxLen बाइट पार्स कर दिए गए हैं.
ब्यौरा | |||||
---|---|---|---|---|---|
पैरामीटर |
|
Init
void Init( PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers )
एक या ज़्यादा PacketBuffers से पढ़ने के लिए, TLVReader ऑब्जेक्ट शुरू करता है.
पार्स करना शुरुआती बफ़र की शुरुआती पोज़िशन (buf->DataStart()) पर शुरू होता है. अगर AllowDisconiguousBuffers सही है, तो पाठक अपने 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(TLVType अपेक्षितType, uint64_texpectedTag) तरीका, सुविधा का एक ऐसा तरीका है जिसका व्यवहार Next() जैसा ही होता है. हालांकि, इससे यह पुष्टि होती है कि नए TLV एलिमेंट का टाइप और टैग, दिए गए आर्ग्युमेंट से मेल खाते हैं.
ब्यौरा | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
पैरामीटर |
|
||||||||||||||||
रिटर्न वैल्यू |
|
OpenContainer
WEAVE_ERROR OpenContainer( TLVReader & containerReader )
TLV कंटेनर एलिमेंट के सदस्यों को पढ़ने के लिए, नया TLVReader ऑब्जेक्ट शुरू करता है.
OpenContainer() का तरीका, TLV कंटेनर (स्ट्रक्चर, अरे या पाथ) के सदस्य एलिमेंट को पढ़ने के लिए, एक नए TLVReader ऑब्जेक्ट को शुरू करता है. 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
यह एक निजी तरीका है, जो mControlByte से TLVElementType दिखाता है.
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 )