Skip to content

Commit 5f49c52

Browse files
Merge pull request #159 from martinfantini/enum_save_compare
Enum save compare
2 parents a3ed8c7 + 2165ca2 commit 5f49c52

File tree

5 files changed

+35
-0
lines changed

5 files changed

+35
-0
lines changed

src/mfast/coder/encoder_v2/fast_encoder_core.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
#include "../mfast_coder_export.h"
44
#include "../../sequence_ref.h"
5+
#include "../../enum_ref.h"
56
#include "../../nested_message_ref.h"
67
#include "../../malloc_allocator.h"
78
#include "../common/template_repo.h"
@@ -31,6 +32,11 @@ inline bool equivalent(const decimal_cref &v, const value_storage &prev) {
3132
v.exponent() == prev.of_decimal.exponent_;
3233
}
3334

35+
inline bool equivalent(const enum_cref &v, const value_storage &prev) {
36+
return v.absent() == prev.is_empty() &&
37+
v.value() == prev.of_uint64.content_;
38+
}
39+
3440
template <typename T>
3541
inline bool equivalent(const vector_cref<T> &v, const value_storage &prev) {
3642
return v.size() == prev.of_array.len_ - 1 &&

src/mfast/enum_ref.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,11 @@ class enum_mref : public make_field_mref<enum_cref> {
9797
*this->storage() = this->instruction()->initial_value();
9898
}
9999
value_type value() const { return this->storage()->get<value_type>(); }
100+
101+
protected:
102+
friend class mfast::detail::codec_helper;
103+
104+
void copy_from(value_storage v) const { *this->storage() = v; }
100105
};
101106

102107
template <> struct mref_of<enum_cref> { typedef enum_mref type; };

tests/enum_encoder_decoder.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,13 @@ TEST_CASE("enum test encoder/decoder","[enum_encoder_decoder]")
1717
REQUIRE(test_case.encoding(test_1.cref(),"\xC0\x81\x83",true));
1818
REQUIRE(test_case.decoding("\xC0\x81\x83",test_1.cref(),true));
1919
}
20+
21+
TEST_CASE("enum test copy encoder/decoder","[enum_copy_encoder_decoder]")
22+
{
23+
fast_test_coding_case<simple16::templates_description> test_case;
24+
simple16::Test_3 test_3;
25+
simple16::Test_3_mref test_3_mref = test_3.mref();
26+
test_3_mref.set_discrete().as_Three();
27+
REQUIRE(test_case.encoding(test_3.cref(),"\xE0\x83\x83",true));
28+
REQUIRE(test_case.decoding("\xE0\x83\x83",test_3.cref(),true));
29+
}

tests/enum_encoder_decoder_v2.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,13 @@ TEST_CASE("enum test encoder_V2/decoder_v2","[enum_encoder_v2_decoder_v2]")
1717
REQUIRE(test_case.encoding(test_1.cref(),"\xC0\x81\x83",true));
1818
REQUIRE(test_case.decoding("\xC0\x81\x83",test_1.cref(),true));
1919
}
20+
21+
TEST_CASE("enum test copy encoder_V2/decoder_v2","[enum_copy_encoder_v2_decoder_v2]")
22+
{
23+
fast_test_coding_case_v2<simple16::templates_description> test_case;
24+
simple16::Test_3 test_3;
25+
simple16::Test_3_mref test_3_mref = test_3.mref();
26+
test_3_mref.set_discrete().as_Three();
27+
REQUIRE(test_case.encoding(test_3.cref(),"\xE0\x83\x83",true));
28+
REQUIRE(test_case.decoding("\xE0\x83\x83",test_3.cref(),true));
29+
}

tests/simple16.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,8 @@
1818
<template name="Test_2" id="2">
1919
<string name="MsgType" id="36"><constant value="DQ"/></string>
2020
</template>
21+
<template name="Test_3" id="3">
22+
<string name="MsgType" id="35"><constant value="HP"/></string>
23+
<field name="discrete" id="2477"><type name="DiscreteEnum"><copy/></type></field>
24+
</template>
2125
</templates>

0 commit comments

Comments
 (0)