Skip to content

Commit f304d04

Browse files
testing usage of linkedlists for cbor decoder singleton
1 parent 55fb70a commit f304d04

File tree

2 files changed

+27
-13
lines changed

2 files changed

+27
-13
lines changed

src/cbor/MessageDecoder.cpp

+21-11
Original file line numberDiff line numberDiff line change
@@ -31,21 +31,21 @@ MessageDecoder::Status CBORMessageDecoderSingleton::decode(Message* msg, const u
3131
return MessageDecoder::Status::Error;
3232
}
3333

34-
auto decoder_it = decoders.begin();
34+
struct llnode* decoder_it = decoders;
3535

36-
for(; decoder_it != decoders.end(); decoder_it++) {
37-
if(decoder_it->first == tag) {
36+
for(; decoder_it != nullptr; decoder_it = decoder_it->next) {
37+
if(decoder_it->tag == tag) {
3838
break;
3939
}
4040
}
4141

4242
// check if message.id exists on the decoders list or return error
43-
if(decoder_it == decoders.end()) {
43+
if(decoder_it == nullptr) {
4444
return MessageDecoder::Status::Error;
4545
}
4646

4747
// encode the message
48-
if(decoder_it->second->_decode(&iter, msg) == MessageDecoder::Status::Error) {
48+
if(decoder_it->decoder->_decode(&iter, msg) == MessageDecoder::Status::Error) {
4949
return MessageDecoder::Status::Error;
5050
}
5151

@@ -59,17 +59,27 @@ CBORMessageDecoderSingleton& CBORMessageDecoderSingleton::getInstance() {
5959
}
6060

6161
void CBORMessageDecoderSingleton::append(CBORTag tag, CBORMessageDecoderInterface* decoder) {
62-
auto decoder_it = decoders.begin();
62+
struct llnode* decoder_it = decoders;
6363

64-
for(; decoder_it != decoders.end(); decoder_it++) {
65-
if(decoder_it->first == tag) {
64+
for(; decoder_it != nullptr; decoder_it = decoder_it->next) {
65+
if(decoder_it->tag == tag) {
6666
return;
6767
}
6868
}
6969

70-
decoders.push_back(
71-
std::make_pair(tag, decoder)
72-
);
70+
struct llnode* next = new llnode;
71+
72+
next->tag = tag;
73+
next->decoder = decoder;
74+
75+
// this is the first element
76+
if(decoders == nullptr) {
77+
decoders = next;
78+
} else {
79+
decoders_last->next = next;
80+
}
81+
82+
decoders_last = next;
7383
}
7484

7585
CBORMessageDecoderInterface::CBORMessageDecoderInterface(const CBORTag tag, const MessageId id)

src/cbor/MessageDecoder.h

+6-2
Original file line numberDiff line numberDiff line change
@@ -107,9 +107,13 @@ class CBORMessageDecoderSingleton: public MessageDecoder {
107107
*/
108108
MessageDecoder::Status decode(Message* msg, const uint8_t* const buf, size_t &len);
109109
private:
110-
CBORMessageDecoderSingleton() {}
110+
CBORMessageDecoderSingleton(): decoders(nullptr), decoders_last(nullptr) { }
111111

112-
std::vector<std::pair<CBORTag, CBORMessageDecoderInterface*>> decoders;
112+
struct llnode {
113+
struct llnode* next;
114+
CBORTag tag;
115+
CBORMessageDecoderInterface* decoder;
116+
} *decoders, *decoders_last;
113117
};
114118

115119
/**

0 commit comments

Comments
 (0)