@@ -16,21 +16,23 @@ Encoder::Status CBORMessageEncoderSingleton::encode(Message* message, uint8_t *
16
16
17
17
cbor_encoder_init (&encoder, data, len, 0 );
18
18
19
- auto encoder_it = encoders.begin ();
19
+ // FIXME try with std::find
20
+ auto encoder_it = encoders_ids.begin ();
20
21
21
- for (; encoder_it != encoders .end (); encoder_it++) {
22
- if (encoder_it-> first == message->id ) {
22
+ for (; encoder_it != encoders_ids .end (); encoder_it++) {
23
+ if (* encoder_it == message->id ) {
23
24
break ;
24
25
}
25
26
}
26
27
27
28
// check if message.id exists on the encoders list or return error
28
- if (encoder_it == encoders .end ()) {
29
+ if (encoder_it == encoders_ids .end ()) {
29
30
return Encoder::Status::Error;
30
31
}
32
+ auto encoder_inst = encoders[encoder_it - encoders_ids.begin ()];
31
33
32
34
// encode the message
33
- if (encoder_it-> second ->_encode (&encoder, message) == Encoder::Status::Error) {
35
+ if (encoder_inst ->_encode (&encoder, message) == Encoder::Status::Error) {
34
36
return Encoder::Status::Error;
35
37
}
36
38
@@ -46,17 +48,16 @@ CBORMessageEncoderSingleton& CBORMessageEncoderSingleton::getInstance() {
46
48
}
47
49
48
50
void CBORMessageEncoderSingleton::append (MessageId id, CBORMessageEncoderInterface* encoder) {
49
- auto encoder_it = encoders .begin ();
51
+ auto encoder_it = encoders_ids .begin ();
50
52
51
- for (; encoder_it != encoders .end (); encoder_it++) {
52
- if (encoder_it-> first == id) {
53
+ for (; encoder_it != encoders_ids .end (); encoder_it++) {
54
+ if (* encoder_it == id) {
53
55
return ;
54
56
}
55
57
}
56
58
57
- encoders.push_back (
58
- std::make_pair (id, encoder)
59
- );
59
+ encoders_ids.push_back (id);
60
+ encoders.push_back (encoder);
60
61
}
61
62
62
63
CBORMessageEncoderInterface::CBORMessageEncoderInterface (const CBORTag tag, const MessageId id)
0 commit comments