Skip to content

Commit 1ec6b59

Browse files
fixup! implementing decoder interface
1 parent 7e88c82 commit 1ec6b59

File tree

2 files changed

+24
-6
lines changed

2 files changed

+24
-6
lines changed

src/cbor/CborDecoder.cpp

+21-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,13 @@ Decoder::Status CBORMessageDecoderSingleton::decode(Message* msg, const uint8_t*
3131
return Decoder::Status::Error;
3232
}
3333

34-
auto decoder_it = decoders.find(tag);
34+
auto decoder_it = decoders.begin();
35+
36+
for(; decoder_it != decoders.end(); decoder_it++) {
37+
if(decoder_it->first == msg->id) {
38+
break;
39+
}
40+
}
3541

3642
// check if message.id exists on the decoders list or return error
3743
if(decoder_it == decoders.end()) {
@@ -52,6 +58,20 @@ CBORMessageDecoderSingleton& CBORMessageDecoderSingleton::getInstance() {
5258
return singleton;
5359
}
5460

61+
void CBORMessageDecoderSingleton::append(CBORTag tag, CBORMessageDecoderInterface* decoder) {
62+
auto decoder_it = decoders.begin();
63+
64+
for(; decoder_it != decoders.end(); decoder_it++) {
65+
if(decoder_it->first == tag) {
66+
return;
67+
}
68+
}
69+
70+
decoders.push_back(
71+
std::make_pair(tag, decoder)
72+
);
73+
}
74+
5575
CBORMessageDecoderInterface::CBORMessageDecoderInterface(const CBORTag tag, const MessageId id)
5676
: tag(tag), id(id) {
5777
// call singleton/global variable and insert this encoder

src/cbor/CborDecoder.h

+3-5
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
*/
1010
#pragma once
1111

12-
#include <unordered_map>
12+
#include <vector>
1313
#include "../interfaces/Decoder.h"
1414
#include "CBOR.h"
1515
#include "../interfaces/message.h"
@@ -43,15 +43,13 @@ class CBORMessageDecoderSingleton: public Decoder {
4343
public:
4444
static CBORMessageDecoderSingleton& getInstance();
4545

46-
void append(CBORTag id, CBORMessageDecoderInterface* encoder) {
47-
decoders[id] = encoder;
48-
}
46+
void append(CBORTag id, CBORMessageDecoderInterface* encoder);
4947

5048
Decoder::Status decode(Message* msg, const uint8_t* const buf, size_t &len);
5149
private:
5250
CBORMessageDecoderSingleton() {}
5351

54-
std::unordered_map<CBORTag, CBORMessageDecoderInterface*> decoders;
52+
std::vector<std::pair<CBORTag, CBORMessageDecoderInterface*>> decoders;
5553
};
5654

5755
class CBORMessageDecoder: public Decoder {

0 commit comments

Comments
 (0)