@@ -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
6161void 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
7585CBORMessageDecoderInterface::CBORMessageDecoderInterface (const CBORTag tag, const MessageId id)
0 commit comments