Skip to content

Commit 87f45cb

Browse files
fixup! implementing encoder interface
1 parent 897c622 commit 87f45cb

File tree

2 files changed

+20
-17
lines changed

2 files changed

+20
-17
lines changed

src/cbor/CborEncoder.cpp

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,9 @@
99
*/
1010
#include "CborEncoder.h"
1111

12-
static CBORMessageEncoderClass* singleton = nullptr;
13-
CBORMessageEncoderClass& CBORMessageEncoder = CBORMessageEncoderClass::getInstance();
12+
// static CBORMessageEncoderSingleton* singleton = nullptr;
1413

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

@@ -35,17 +34,16 @@ Encoder::Status CBORMessageEncoderClass::encode(Message* message, uint8_t * data
3534
return Encoder::Status::Complete;
3635
}
3736

38-
CBORMessageEncoderClass& CBORMessageEncoderClass::getInstance() {
39-
if(singleton == nullptr) {
40-
singleton = new CBORMessageEncoderClass();
41-
}
42-
return *singleton;
37+
CBORMessageEncoderSingleton& CBORMessageEncoderSingleton::getInstance() {
38+
static CBORMessageEncoderSingleton singleton;
39+
40+
return singleton;
4341
}
4442

4543
CBORMessageEncoderInterface::CBORMessageEncoderInterface(const CBORTag tag, const MessageId id)
4644
: tag(tag), id(id) {
4745
// call singleton/global variable and insert this encoder
48-
CBORMessageEncoderClass::getInstance().append(id, this);
46+
CBORMessageEncoderSingleton::getInstance().append(id, this);
4947
}
5048

5149
Encoder::Status CBORMessageEncoderInterface::_encode(CborEncoder* encoder, Message *msg) {

src/cbor/CborEncoder.h

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,13 @@
1515
#include "../interfaces/message.h"
1616
#include "./tinycbor/cbor-lib.h"
1717

18-
class CBORMessageEncoderClass;
18+
class CBORMessageEncoderSingleton;
1919

2020

2121
// TODO find a better name
2222
// TODO maybe a template<CBORTag tag, MessageId id> ?
2323
// TODO maybe template<resultStruct> that is also the parameter of encode
2424
// TODO in order to make this more extensible we should not pass Message* as a parameter, templated function may be better (or void*)
25-
// providing both id and tag gives the ability to convert and avoid using a conversion function
2625
class CBORMessageEncoderInterface {
2726
public:
2827
CBORMessageEncoderInterface(const CBORTag tag, const MessageId id);
@@ -35,25 +34,31 @@ class CBORMessageEncoderInterface {
3534
const CBORTag tag;
3635
const MessageId id;
3736

38-
friend CBORMessageEncoderClass;
37+
friend CBORMessageEncoderSingleton;
3938

4039
// wrapper for encode function that for the time being only writes the tag in the buffer
4140
Encoder::Status _encode(CborEncoder* encoder, Message *msg);
4241
};
4342

44-
// TODO make a private constructor?
45-
class CBORMessageEncoderClass: public Encoder {
43+
class CBORMessageEncoderSingleton: public Encoder {
4644
public:
47-
CBORMessageEncoderClass() {}
48-
static CBORMessageEncoderClass& getInstance();
45+
static CBORMessageEncoderSingleton& getInstance();
4946

5047
void append(CBORTag id, CBORMessageEncoderInterface* encoder) {
5148
encoders[id] = encoder;
5249
}
5350

5451
Encoder::Status encode(Message* message, uint8_t * data, size_t& len);
5552
private:
53+
CBORMessageEncoderSingleton() {}
54+
55+
static CBORMessageEncoderSingleton singleton;
5656
std::map<MessageId, CBORMessageEncoderInterface*> encoders;
5757
};
5858

59-
extern CBORMessageEncoderClass& CBORMessageEncoder;
59+
class CBORMessageEncoder: public Encoder {
60+
public:
61+
inline Encoder::Status encode(Message* msg, uint8_t* buf, size_t &len) {
62+
return CBORMessageEncoderSingleton::getInstance().encode(msg, buf, len);
63+
}
64+
};

0 commit comments

Comments
 (0)