Add ability to unpack TLV8 by iterator

Also fixed bug using increment operator (++) by replacing with std::next()
This commit is contained in:
Gregg 2024-04-06 21:45:49 -05:00
parent 7e2625034c
commit acebaf6caa
2 changed files with 14 additions and 4 deletions

View File

@ -209,6 +209,15 @@ int TLV8::unpack(uint8_t *buf, size_t bufSize){
return(unpackPhase); return(unpackPhase);
} }
/////////////////////////////////////
int TLV8::unpack(TLV8_it it){
if(it==end())
return(0);
return(unpack(*it,(*it).len));
}
///////////////////////////////////// /////////////////////////////////////

View File

@ -92,7 +92,7 @@ class TLV8 : public std::list<tlv8_t, Mallocator<tlv8_t>> {
size_t pack_size(){return(pack_size(begin(), end()));} size_t pack_size(){return(pack_size(begin(), end()));}
void pack_init(TLV8_it it1, TLV8_it it2){currentPackIt=it1; endPackIt=it2; currentPackPhase=0;} void pack_init(TLV8_it it1, TLV8_it it2){currentPackIt=it1; endPackIt=it2; currentPackPhase=0;}
void pack_init(TLV8_it it1){pack_init(it1, it1++);} void pack_init(TLV8_it it1){pack_init(it1, std::next(it1));}
void pack_init(){pack_init(begin(),end());} void pack_init(){pack_init(begin(),end());}
size_t pack(uint8_t *buf, size_t bufSize); size_t pack(uint8_t *buf, size_t bufSize);
@ -101,14 +101,15 @@ class TLV8 : public std::list<tlv8_t, Mallocator<tlv8_t>> {
const char *getName(uint8_t tag); const char *getName(uint8_t tag);
void print(TLV8_it it1, TLV8_it it2); void print(TLV8_it it1, TLV8_it it2);
void print(TLV8_it it1){print(it1, it1++);} void print(TLV8_it it1){print(it1, std::next(it1));}
void print(){print(begin(), end());} void print(){print(begin(), end());}
void osprint(std::ostream& os, TLV8_it it1, TLV8_it it2); void osprint(std::ostream& os, TLV8_it it1, TLV8_it it2);
void osprint(std::ostream& os, TLV8_it it1){osprint(os, it1, it1++);} void osprint(std::ostream& os, TLV8_it it1){osprint(os, it1, std::next(it1));}
void osprint(std::ostream& os){osprint(os, begin(), end());} void osprint(std::ostream& os){osprint(os, begin(), end());}
int unpack(uint8_t *buf, size_t bufSize); int unpack(uint8_t *buf, size_t bufSize);
int unpack(TLV8_it it);
void wipe(){std::list<tlv8_t, Mallocator<tlv8_t>>().swap(*this);} void wipe(){std::list<tlv8_t, Mallocator<tlv8_t>>().swap(*this);}