Skip to content

Commit 6c00e29

Browse files
fixup! implementing encoder interface
1 parent 1ec6b59 commit 6c00e29

File tree

2 files changed

+14
-12
lines changed

2 files changed

+14
-12
lines changed

src/cbor/CborEncoder.cpp

+12-11
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,23 @@ Encoder::Status CBORMessageEncoderSingleton::encode(Message* message, uint8_t *
1616

1717
cbor_encoder_init(&encoder, data, len, 0);
1818

19-
auto encoder_it = encoders.begin();
19+
// FIXME try with std::find
20+
auto encoder_it = encoders_ids.begin();
2021

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) {
2324
break;
2425
}
2526
}
2627

2728
// 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()) {
2930
return Encoder::Status::Error;
3031
}
32+
auto encoder_inst = encoders[encoder_it - encoders_ids.begin()];
3133

3234
// encode the message
33-
if(encoder_it->second->_encode(&encoder, message) == Encoder::Status::Error) {
35+
if(encoder_inst->_encode(&encoder, message) == Encoder::Status::Error) {
3436
return Encoder::Status::Error;
3537
}
3638

@@ -46,17 +48,16 @@ CBORMessageEncoderSingleton& CBORMessageEncoderSingleton::getInstance() {
4648
}
4749

4850
void CBORMessageEncoderSingleton::append(MessageId id, CBORMessageEncoderInterface* encoder) {
49-
auto encoder_it = encoders.begin();
51+
auto encoder_it = encoders_ids.begin();
5052

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) {
5355
return;
5456
}
5557
}
5658

57-
encoders.push_back(
58-
std::make_pair(id, encoder)
59-
);
59+
encoders_ids.push_back(id);
60+
encoders.push_back(encoder);
6061
}
6162

6263
CBORMessageEncoderInterface::CBORMessageEncoderInterface(const CBORTag tag, const MessageId id)

src/cbor/CborEncoder.h

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

52-
std::vector<std::pair<MessageId, CBORMessageEncoderInterface*>> encoders;
52+
std::vector<MessageId> encoders_ids;
53+
std::vector<CBORMessageEncoderInterface*> encoders;
5354
};
5455

5556
class CBORMessageEncoder: public Encoder {

0 commit comments

Comments
 (0)