Skip to content

Commit ad60c1b

Browse files
fixup! implementing decoder interface
1 parent 6c00e29 commit ad60c1b

File tree

2 files changed

+15
-12
lines changed

2 files changed

+15
-12
lines changed

src/cbor/CborDecoder.cpp

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

34-
auto decoder_it = decoders.begin();
34+
// FIXME try with std::find
35+
auto decoder_it = decoders_tags.begin();
3536

36-
for(; decoder_it != decoders.end(); decoder_it++) {
37-
if(decoder_it->first == msg->id) {
37+
for(; decoder_it != decoders_tags.end(); decoder_it++) {
38+
if(*decoder_it == tag) {
3839
break;
3940
}
4041
}
4142

4243
// check if message.id exists on the decoders list or return error
43-
if(decoder_it == decoders.end()) {
44+
if(decoder_it == decoders_tags.end()) {
4445
return Decoder::Status::Error;
4546
}
4647

48+
auto decoder = decoders[decoder_it - decoders_tags.begin()];
49+
4750
// encode the message
48-
if(decoder_it->second->_decode(&iter, msg) == Decoder::Status::Error) {
51+
if(decoder->_decode(&iter, msg) == Decoder::Status::Error) {
4952
return Decoder::Status::Error;
5053
}
5154

@@ -59,17 +62,16 @@ CBORMessageDecoderSingleton& CBORMessageDecoderSingleton::getInstance() {
5962
}
6063

6164
void CBORMessageDecoderSingleton::append(CBORTag tag, CBORMessageDecoderInterface* decoder) {
62-
auto decoder_it = decoders.begin();
65+
auto decoder_it = decoders_tags.begin();
6366

64-
for(; decoder_it != decoders.end(); decoder_it++) {
65-
if(decoder_it->first == tag) {
67+
for(; decoder_it != decoders_tags.end(); decoder_it++) {
68+
if(* decoder_it == tag) {
6669
return;
6770
}
6871
}
6972

70-
decoders.push_back(
71-
std::make_pair(tag, decoder)
72-
);
73+
decoders_tags.push_back(tag);
74+
decoders.push_back(decoder);
7375
}
7476

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

src/cbor/CborDecoder.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ class CBORMessageDecoderSingleton: public Decoder {
4949
private:
5050
CBORMessageDecoderSingleton() {}
5151

52-
std::vector<std::pair<CBORTag, CBORMessageDecoderInterface*>> decoders;
52+
std::vector<CBORTag> decoders_tags;
53+
std::vector<CBORMessageDecoderInterface*> decoders;
5354
};
5455

5556
class CBORMessageDecoder: public Decoder {

0 commit comments

Comments
 (0)