@@ -31,21 +31,24 @@ Decoder::Status CBORMessageDecoderSingleton::decode(Message* msg, const uint8_t*
31
31
return Decoder::Status::Error;
32
32
}
33
33
34
- auto decoder_it = decoders.begin ();
34
+ // FIXME try with std::find
35
+ auto decoder_it = decoders_tags.begin ();
35
36
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 ) {
38
39
break ;
39
40
}
40
41
}
41
42
42
43
// 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 ()) {
44
45
return Decoder::Status::Error;
45
46
}
46
47
48
+ auto decoder = decoders[decoder_it - decoders_tags.begin ()];
49
+
47
50
// encode the message
48
- if (decoder_it-> second ->_decode (&iter, msg) == Decoder::Status::Error) {
51
+ if (decoder ->_decode (&iter, msg) == Decoder::Status::Error) {
49
52
return Decoder::Status::Error;
50
53
}
51
54
@@ -59,17 +62,16 @@ CBORMessageDecoderSingleton& CBORMessageDecoderSingleton::getInstance() {
59
62
}
60
63
61
64
void CBORMessageDecoderSingleton::append (CBORTag tag, CBORMessageDecoderInterface* decoder) {
62
- auto decoder_it = decoders .begin ();
65
+ auto decoder_it = decoders_tags .begin ();
63
66
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) {
66
69
return ;
67
70
}
68
71
}
69
72
70
- decoders.push_back (
71
- std::make_pair (tag, decoder)
72
- );
73
+ decoders_tags.push_back (tag);
74
+ decoders.push_back (decoder);
73
75
}
74
76
75
77
CBORMessageDecoderInterface::CBORMessageDecoderInterface (const CBORTag tag, const MessageId id)
0 commit comments