File tree 2 files changed +25
-9
lines changed
2 files changed +25
-9
lines changed Original file line number Diff line number Diff line change 8
8
file, You can obtain one at http://mozilla.org/MPL/2.0/.
9
9
*/
10
10
#include " CborEncoder.h"
11
-
12
- // static CBORMessageEncoderSingleton* singleton = nullptr;
11
+ #include < algorithm>
13
12
14
13
Encoder::Status CBORMessageEncoderSingleton::encode (Message* message, uint8_t * data, size_t & len) { // TODO do we need to propagate the maximum length?
15
14
// prepare cbor structure
16
15
CborEncoder encoder;
17
16
18
17
cbor_encoder_init (&encoder, data, len, 0 );
19
18
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
+ }
21
26
22
27
// check if message.id exists on the encoders list or return error
23
28
if (encoder_it == encoders.end ()) {
@@ -40,6 +45,20 @@ CBORMessageEncoderSingleton& CBORMessageEncoderSingleton::getInstance() {
40
45
return singleton;
41
46
}
42
47
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
+
43
62
CBORMessageEncoderInterface::CBORMessageEncoderInterface (const CBORTag tag, const MessageId id)
44
63
: tag(tag), id(id) {
45
64
// call singleton/global variable and insert this encoder
Original file line number Diff line number Diff line change 9
9
*/
10
10
#pragma once
11
11
12
- #include < unordered_map >
12
+ #include < vector >
13
13
#include " ../interfaces/Encoder.h"
14
14
#include " CBOR.h"
15
15
#include " ../interfaces/message.h"
@@ -44,15 +44,12 @@ class CBORMessageEncoderSingleton: public Encoder {
44
44
public:
45
45
static CBORMessageEncoderSingleton& getInstance ();
46
46
47
- void append (CBORTag id, CBORMessageEncoderInterface* encoder) {
48
- encoders[id] = encoder;
49
- }
50
-
47
+ void append (MessageId id, CBORMessageEncoderInterface* encoder);
51
48
Encoder::Status encode (Message* message, uint8_t * data, size_t & len);
52
49
private:
53
50
CBORMessageEncoderSingleton () {}
54
51
55
- std::unordered_map< MessageId, CBORMessageEncoderInterface*> encoders;
52
+ std::vector<std::pair< MessageId, CBORMessageEncoderInterface*> > encoders;
56
53
};
57
54
58
55
class CBORMessageEncoder : public Encoder {
You can’t perform that action at this time.
0 commit comments