Skip to content

Commit 7e88c82

Browse files
fixup! implementing encoder interface
1 parent 11b6388 commit 7e88c82

File tree

2 files changed

+25
-9
lines changed

2 files changed

+25
-9
lines changed

src/cbor/CborEncoder.cpp

+22-3
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,21 @@
88
file, You can obtain one at http://mozilla.org/MPL/2.0/.
99
*/
1010
#include "CborEncoder.h"
11-
12-
// static CBORMessageEncoderSingleton* singleton = nullptr;
11+
#include <algorithm>
1312

1413
Encoder::Status CBORMessageEncoderSingleton::encode(Message* message, uint8_t * data, size_t& len) { // TODO do we need to propagate the maximum length?
1514
// prepare cbor structure
1615
CborEncoder encoder;
1716

1817
cbor_encoder_init(&encoder, data, len, 0);
1918

20-
auto encoder_it = encoders.find(message->id);
19+
auto encoder_it = encoders.begin();
20+
21+
for(; encoder_it != encoders.end(); encoder_it++) {
22+
if(encoder_it->first == message->id) {
23+
break;
24+
}
25+
}
2126

2227
// check if message.id exists on the encoders list or return error
2328
if(encoder_it == encoders.end()) {
@@ -40,6 +45,20 @@ CBORMessageEncoderSingleton& CBORMessageEncoderSingleton::getInstance() {
4045
return singleton;
4146
}
4247

48+
void CBORMessageEncoderSingleton::append(MessageId id, CBORMessageEncoderInterface* encoder) {
49+
auto encoder_it = encoders.begin();
50+
51+
for(; encoder_it != encoders.end(); encoder_it++) {
52+
if(encoder_it->first == id) {
53+
return;
54+
}
55+
}
56+
57+
encoders.push_back(
58+
std::make_pair(id, encoder)
59+
);
60+
}
61+
4362
CBORMessageEncoderInterface::CBORMessageEncoderInterface(const CBORTag tag, const MessageId id)
4463
: tag(tag), id(id) {
4564
// call singleton/global variable and insert this encoder

src/cbor/CborEncoder.h

+3-6
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/Encoder.h"
1414
#include "CBOR.h"
1515
#include "../interfaces/message.h"
@@ -44,15 +44,12 @@ class CBORMessageEncoderSingleton: public Encoder {
4444
public:
4545
static CBORMessageEncoderSingleton& getInstance();
4646

47-
void append(CBORTag id, CBORMessageEncoderInterface* encoder) {
48-
encoders[id] = encoder;
49-
}
50-
47+
void append(MessageId id, CBORMessageEncoderInterface* encoder);
5148
Encoder::Status encode(Message* message, uint8_t * data, size_t& len);
5249
private:
5350
CBORMessageEncoderSingleton() {}
5451

55-
std::unordered_map<MessageId, CBORMessageEncoderInterface*> encoders;
52+
std::vector<std::pair<MessageId, CBORMessageEncoderInterface*>> encoders;
5653
};
5754

5855
class CBORMessageEncoder: public Encoder {

0 commit comments

Comments
 (0)