26#include "../../codec.h"
27#include "../../field_codec.h"
41 dccl::Bitset encode()
override {
return encode(MINI_ID_OFFSET); }
45 unsigned size()
override {
return MINI_ID_SIZE; }
47 void validate()
override {}
53 MINI_ID_OFFSET = 1000000
63bool double_cmp(
double a,
double b,
int precision)
68 int a_part = (a - a_whole) * pow(10.0, precision);
69 int b_part = (b - b_whole) * pow(10.0, precision);
71 return (a_whole == b_whole) && (a_part == b_part);
78 return dccl::Bitset(MINI_ID_SIZE, wire_value - MINI_ID_OFFSET);
81int main(
int argc,
char* argv[])
84 for (
int i = 1; i < argc; ++i)
86 if (argv[i] && argv[i][0] ==
'-' && argv[i][1] ==
'v' && argv[i][2] ==
'\0')
90 dccl::dlog.
connect(verbose ? dccl::logger::ALL :
dccl::logger::WARN_PLUS, &std::cerr);
94 codec.set_crypto_passphrase(
"309ldskjfla39");
96 codec.load<MiniUser>();
97 codec.info<MiniUser>(&dccl::dlog);
99 MiniUser mini_user_msg_in, mini_user_msg_out;
100 mini_user_msg_in.set_user(876);
102 codec.encode(&encoded, mini_user_msg_in);
103 codec.decode(encoded, &mini_user_msg_out);
104 assert(mini_user_msg_out.SerializeAsString() == mini_user_msg_in.SerializeAsString());
106 codec.load<MiniOWTT>();
107 codec.info<MiniOWTT>(&dccl::dlog);
109 MiniOWTT mini_owtt_in, mini_owtt_out;
110 mini_owtt_in.set_clock_mode(3);
111 mini_owtt_in.set_tod(12);
112 mini_owtt_in.set_user(13);
115 codec.encode(&encoded, mini_owtt_in);
116 dccl::dlog.
is(dccl::logger::INFO) && dccl::dlog <<
"OWTT as hex: " <<
dccl::hex_encode(encoded) << std::endl;
118 codec.decode(encoded, &mini_owtt_out);
119 assert(mini_owtt_out.SerializeAsString() == mini_owtt_in.SerializeAsString());
121 codec.load<MiniAbort>();
122 codec.info<MiniAbort>(&dccl::dlog);
124 MiniAbort mini_abort_in, mini_abort_out;
125 mini_abort_in.set_user(130);
127 codec.encode(&encoded, mini_abort_in);
128 codec.decode(encoded, &mini_abort_out);
129 assert(mini_abort_out.SerializeAsString() == mini_abort_in.SerializeAsString());
132 dccl::dlog.
is(dccl::logger::INFO) && dccl::dlog <<
"all tests passed" << std::endl;
A variable size container of bits (subclassed from std::deque<bool>) with an optional hierarchy....
unsigned long to_ulong() const
Returns the value of the Bitset as an unsigned long integer. Equivalent to to<unsigned long>().
The Dynamic CCL enCODer/DECoder. This is the main class you will use to load, encode and decode DCCL ...
bool is(logger::Verbosity verbosity, logger::Group group=logger::GENERAL)
Indicates the verbosity of the Logger until the next std::flush or std::endl. The boolean return is u...
void connect(int verbosity_mask, Slot slot)
Connect the output of one or more given verbosities to a slot (function pointer or similar)
Base class for static-typed field encoders/decoders that use a fixed number of bits on the wire regar...
Dynamic Compact Control Language namespace.
google::protobuf::uint32 uint32
an unsigned 32 bit integer
void hex_encode(CharIterator begin, CharIterator end, std::string *out, bool upper_case=false)
Encodes a (little-endian) hexadecimal string from a byte string. Index 0 of begin is written to index...