Skip to content

Commit 5bd4759

Browse files
committed
Add support for the uint64 and int64 data types to the RDM messaging
1 parent f7afc58 commit 5bd4759

33 files changed

+277
-27
lines changed

common/messaging/DescriptorTest.cpp

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,18 @@ using std::vector;
3333
using ola::messaging::BoolFieldDescriptor;
3434
using ola::messaging::FieldDescriptor;
3535
using ola::messaging::FieldDescriptorGroup;
36+
using ola::messaging::Int16FieldDescriptor;
37+
using ola::messaging::Int32FieldDescriptor;
38+
using ola::messaging::Int64FieldDescriptor;
39+
using ola::messaging::Int8FieldDescriptor;
3640
using ola::messaging::IPV4FieldDescriptor;
3741
using ola::messaging::IPV6FieldDescriptor;
3842
using ola::messaging::MACFieldDescriptor;
3943
using ola::messaging::StringFieldDescriptor;
4044
using ola::messaging::UIDFieldDescriptor;
4145
using ola::messaging::UInt16FieldDescriptor;
4246
using ola::messaging::UInt32FieldDescriptor;
47+
using ola::messaging::UInt64FieldDescriptor;
4348
using ola::messaging::UInt8FieldDescriptor;
4449

4550
class DescriptorTest: public CppUnit::TestFixture {
@@ -113,7 +118,7 @@ void DescriptorTest::testFieldDescriptors() {
113118
OLA_ASSERT_EQ(1u, uint8_descriptor.MaxSize());
114119
OLA_ASSERT_FALSE(uint8_descriptor.IsLittleEndian());
115120
OLA_ASSERT_EQ(static_cast<int8_t>(10),
116-
uint8_descriptor.Multiplier());
121+
uint8_descriptor.Multiplier());
117122
OLA_ASSERT_TRUE(uint8_descriptor.FixedSize());
118123
OLA_ASSERT_TRUE(uint8_descriptor.LimitedSize());
119124

@@ -122,7 +127,7 @@ void DescriptorTest::testFieldDescriptors() {
122127
OLA_ASSERT_EQ(1u, uint8_descriptor2.MaxSize());
123128
OLA_ASSERT_TRUE(uint8_descriptor2.IsLittleEndian());
124129
OLA_ASSERT_EQ(static_cast<int8_t>(-1),
125-
uint8_descriptor2.Multiplier());
130+
uint8_descriptor2.Multiplier());
126131
OLA_ASSERT_TRUE(uint8_descriptor2.FixedSize());
127132
OLA_ASSERT_TRUE(uint8_descriptor2.LimitedSize());
128133

@@ -132,7 +137,7 @@ void DescriptorTest::testFieldDescriptors() {
132137
OLA_ASSERT_EQ(2u, uint16_descriptor.MaxSize());
133138
OLA_ASSERT_FALSE(uint16_descriptor.IsLittleEndian());
134139
OLA_ASSERT_EQ(static_cast<int8_t>(10),
135-
uint16_descriptor.Multiplier());
140+
uint16_descriptor.Multiplier());
136141
OLA_ASSERT_TRUE(uint16_descriptor.FixedSize());
137142
OLA_ASSERT_TRUE(uint16_descriptor.LimitedSize());
138143

@@ -141,7 +146,7 @@ void DescriptorTest::testFieldDescriptors() {
141146
OLA_ASSERT_EQ(2u, uint16_descriptor2.MaxSize());
142147
OLA_ASSERT_TRUE(uint16_descriptor2.IsLittleEndian());
143148
OLA_ASSERT_EQ(static_cast<int8_t>(-1),
144-
uint16_descriptor2.Multiplier());
149+
uint16_descriptor2.Multiplier());
145150
OLA_ASSERT_TRUE(uint16_descriptor2.FixedSize());
146151
OLA_ASSERT_TRUE(uint16_descriptor2.LimitedSize());
147152

@@ -151,7 +156,7 @@ void DescriptorTest::testFieldDescriptors() {
151156
OLA_ASSERT_EQ(4u, uint32_descriptor.MaxSize());
152157
OLA_ASSERT_FALSE(uint32_descriptor.IsLittleEndian());
153158
OLA_ASSERT_EQ(static_cast<int8_t>(10),
154-
uint32_descriptor.Multiplier());
159+
uint32_descriptor.Multiplier());
155160
OLA_ASSERT_TRUE(uint32_descriptor.FixedSize());
156161
OLA_ASSERT_TRUE(uint32_descriptor.LimitedSize());
157162

@@ -160,9 +165,28 @@ void DescriptorTest::testFieldDescriptors() {
160165
OLA_ASSERT_EQ(4u, uint32_descriptor2.MaxSize());
161166
OLA_ASSERT_TRUE(uint32_descriptor2.IsLittleEndian());
162167
OLA_ASSERT_EQ(static_cast<int8_t>(-1),
163-
uint32_descriptor2.Multiplier());
168+
uint32_descriptor2.Multiplier());
164169
OLA_ASSERT_TRUE(uint32_descriptor2.FixedSize());
165170
OLA_ASSERT_TRUE(uint32_descriptor2.LimitedSize());
171+
172+
// uint64_t
173+
UInt64FieldDescriptor uint64_descriptor("uint64", false, 10);
174+
OLA_ASSERT_EQ(string("uint64"), uint64_descriptor.Name());
175+
OLA_ASSERT_EQ(8u, uint64_descriptor.MaxSize());
176+
OLA_ASSERT_FALSE(uint64_descriptor.IsLittleEndian());
177+
OLA_ASSERT_EQ(static_cast<int8_t>(10),
178+
uint64_descriptor.Multiplier());
179+
OLA_ASSERT_TRUE(uint64_descriptor.FixedSize());
180+
OLA_ASSERT_TRUE(uint64_descriptor.LimitedSize());
181+
182+
UInt64FieldDescriptor uint64_descriptor2("uint64", true, -1);
183+
OLA_ASSERT_EQ(string("uint64"), uint64_descriptor2.Name());
184+
OLA_ASSERT_EQ(8u, uint64_descriptor2.MaxSize());
185+
OLA_ASSERT_TRUE(uint64_descriptor2.IsLittleEndian());
186+
OLA_ASSERT_EQ(static_cast<int8_t>(-1),
187+
uint64_descriptor2.Multiplier());
188+
OLA_ASSERT_TRUE(uint64_descriptor2.FixedSize());
189+
OLA_ASSERT_TRUE(uint64_descriptor2.LimitedSize());
166190
}
167191

168192

common/messaging/MessagePrinter.cpp

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,15 @@ void GenericMessagePrinter::Visit(const BasicMessageField<uint32_t> *message) {
113113
}
114114

115115

116+
void GenericMessagePrinter::Visit(const BasicMessageField<uint64_t> *message) {
117+
const UInt64FieldDescriptor *descriptor = message->GetDescriptor();
118+
AppendUInt(descriptor->Name(),
119+
message->Value(),
120+
descriptor->LookupValue(message->Value()),
121+
descriptor->Multiplier());
122+
}
123+
124+
116125
void GenericMessagePrinter::Visit(const BasicMessageField<int8_t> *message) {
117126
const Int8FieldDescriptor *descriptor = message->GetDescriptor();
118127
AppendInt(descriptor->Name(),
@@ -140,6 +149,15 @@ void GenericMessagePrinter::Visit(const BasicMessageField<int32_t> *message) {
140149
}
141150

142151

152+
void GenericMessagePrinter::Visit(const BasicMessageField<int64_t> *message) {
153+
const Int64FieldDescriptor *descriptor = message->GetDescriptor();
154+
AppendInt(descriptor->Name(),
155+
message->Value(),
156+
descriptor->LookupValue(message->Value()),
157+
descriptor->Multiplier());
158+
}
159+
160+
143161
void GenericMessagePrinter::Visit(const GroupMessageField *message) {
144162
Stream() << string(m_indent, ' ')
145163
<< TransformLabel(message->GetDescriptor()->Name()) << " {" << endl;
@@ -155,7 +173,7 @@ void GenericMessagePrinter::PostVisit(const GroupMessageField *message) {
155173

156174

157175
void GenericMessagePrinter::AppendUInt(const string &name,
158-
unsigned int value,
176+
uint64_t value,
159177
const string &label,
160178
int8_t multiplier) {
161179
Stream() << string(m_indent, ' ') << TransformLabel(name) << ": ";
@@ -170,7 +188,7 @@ void GenericMessagePrinter::AppendUInt(const string &name,
170188

171189

172190
void GenericMessagePrinter::AppendInt(const string &name,
173-
int value,
191+
int64_t value,
174192
const string &label,
175193
int8_t multiplier) {
176194
Stream() << string(m_indent, ' ') << TransformLabel(name) << ": ";

common/messaging/MessagePrinterTest.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ using ola::messaging::UIDFieldDescriptor;
6161
using ola::messaging::UIDMessageField;
6262
using ola::messaging::UInt32FieldDescriptor;
6363
using ola::messaging::UInt32MessageField;
64+
using ola::messaging::UInt64FieldDescriptor;
65+
using ola::messaging::UInt64MessageField;
6466
using ola::messaging::UInt8FieldDescriptor;
6567
using ola::messaging::UInt8MessageField;
6668

@@ -101,6 +103,7 @@ void GenericMessagePrinterTest::testSimplePrinter() {
101103
UInt8FieldDescriptor uint8_descriptor("Count", false, -3);
102104
Int8FieldDescriptor int8_descriptor("Delta", false, 1);
103105
Int16FieldDescriptor int16_descriptor("Rate", false, -1);
106+
UInt64FieldDescriptor uint64_descriptor("Data");
104107

105108
// try a simple print first
106109
vector<const ola::messaging::MessageFieldInterface*> fields;
@@ -120,12 +123,14 @@ void GenericMessagePrinterTest::testSimplePrinter() {
120123
fields.push_back(new UInt8MessageField(&uint8_descriptor, 4));
121124
fields.push_back(new Int8MessageField(&int8_descriptor, 10));
122125
fields.push_back(new Int16MessageField(&int16_descriptor, 10));
126+
fields.push_back(new UInt64MessageField(&uint64_descriptor, 424242424242));
123127

124128
Message message(fields);
125129
string expected = (
126130
"On/Off: false\nip: 10.0.0.1\nipv6: ::ffff:192.168.0.1\n"
127131
"mac: 01:23:45:67:89:ab\nuid: 7a70:00000001\nName: foobar\nId: 42\n"
128-
"Count: 4 x 10 ^ -3\nDelta: 10 x 10 ^ 1\nRate: 10 x 10 ^ -1\n");
132+
"Count: 4 x 10 ^ -3\nDelta: 10 x 10 ^ 1\nRate: 10 x 10 ^ -1\n"
133+
"Data: 424242424242\n");
129134
OLA_ASSERT_EQ(expected, m_printer.AsString(&message));
130135
}
131136

common/messaging/SchemaPrinter.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,14 @@ void SchemaPrinter::Visit(const UInt32FieldDescriptor *descriptor) {
8989
}
9090

9191

92+
void SchemaPrinter::Visit(const UInt64FieldDescriptor *descriptor) {
93+
AppendHeading(descriptor->Name(), "uint64");
94+
MaybeAppendIntervals(descriptor->Intervals());
95+
MaybeAppendLabels(descriptor->Labels());
96+
m_str << endl;
97+
}
98+
99+
92100
void SchemaPrinter::Visit(const Int8FieldDescriptor *descriptor) {
93101
AppendHeading(descriptor->Name(), "int8");
94102
MaybeAppendIntervals(descriptor->Intervals());
@@ -112,6 +120,15 @@ void SchemaPrinter::Visit(const Int32FieldDescriptor *descriptor) {
112120
m_str << endl;
113121
}
114122

123+
124+
void SchemaPrinter::Visit(const Int64FieldDescriptor *descriptor) {
125+
AppendHeading(descriptor->Name(), "int64");
126+
MaybeAppendIntervals(descriptor->Intervals());
127+
MaybeAppendLabels(descriptor->Labels());
128+
m_str << endl;
129+
}
130+
131+
115132
void SchemaPrinter::Visit(const FieldDescriptorGroup *descriptor) {
116133
m_str << string(m_indent, ' ') << descriptor->Name() << " {" << endl;
117134
m_indent += m_indent_size;

common/messaging/SchemaPrinterTest.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,11 @@ using ola::messaging::SchemaPrinter;
4242
using ola::messaging::StringFieldDescriptor;
4343
using ola::messaging::UInt16FieldDescriptor;
4444
using ola::messaging::UInt32FieldDescriptor;
45+
using ola::messaging::UInt64FieldDescriptor;
4546
using ola::messaging::UInt8FieldDescriptor;
4647
using ola::messaging::Int16FieldDescriptor;
4748
using ola::messaging::Int32FieldDescriptor;
49+
using ola::messaging::Int64FieldDescriptor;
4850
using ola::messaging::Int8FieldDescriptor;
4951
using ola::messaging::UIDFieldDescriptor;
5052

@@ -235,5 +237,8 @@ void SchemaPrinterTest::testIntervalTypes() {
235237
OLA_ASSERT_EQ(
236238
string("Count: int32: (-70000, 82560)\n"),
237239
GenerateIntervalString<Int32FieldDescriptor>(-70000, 82560));
240+
OLA_ASSERT_EQ(
241+
string("Count: int64: (-7000000000, 8256123456)\n"),
242+
GenerateIntervalString<Int64FieldDescriptor>(-7000000000, 8256123456));
238243
}
239244

common/rdm/DescriptorConsistencyChecker.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,11 @@ void DescriptorConsistencyChecker::Visit(
7979
}
8080

8181

82+
void DescriptorConsistencyChecker::Visit(
83+
const ola::messaging::UInt64FieldDescriptor*) {
84+
}
85+
86+
8287
void DescriptorConsistencyChecker::Visit(
8388
const ola::messaging::Int8FieldDescriptor*) {
8489
}
@@ -94,6 +99,11 @@ void DescriptorConsistencyChecker::Visit(
9499
}
95100

96101

102+
void DescriptorConsistencyChecker::Visit(
103+
const ola::messaging::Int64FieldDescriptor*) {
104+
}
105+
106+
97107
void DescriptorConsistencyChecker::Visit(
98108
const ola::messaging::FieldDescriptorGroup *descriptor) {
99109
if (!descriptor->FixedSize())

common/rdm/DescriptorConsistencyChecker.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,11 @@ class DescriptorConsistencyChecker
5959
void Visit(const ola::messaging::UInt8FieldDescriptor*);
6060
void Visit(const ola::messaging::UInt16FieldDescriptor*);
6161
void Visit(const ola::messaging::UInt32FieldDescriptor*);
62+
void Visit(const ola::messaging::UInt64FieldDescriptor*);
6263
void Visit(const ola::messaging::Int8FieldDescriptor*);
6364
void Visit(const ola::messaging::Int16FieldDescriptor*);
6465
void Visit(const ola::messaging::Int32FieldDescriptor*);
66+
void Visit(const ola::messaging::Int64FieldDescriptor*);
6567
void Visit(const ola::messaging::FieldDescriptorGroup*);
6668
void PostVisit(const ola::messaging::FieldDescriptorGroup*);
6769

common/rdm/GroupSizeCalculator.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,12 @@ void GroupSizeCalculator::Visit(
173173
}
174174

175175

176+
void GroupSizeCalculator::Visit(
177+
const ola::messaging::UInt64FieldDescriptor *descriptor) {
178+
m_non_groups.push_back(descriptor);
179+
}
180+
181+
176182
void GroupSizeCalculator::Visit(
177183
const ola::messaging::Int8FieldDescriptor *descriptor) {
178184
m_non_groups.push_back(descriptor);
@@ -191,6 +197,12 @@ void GroupSizeCalculator::Visit(
191197
}
192198

193199

200+
void GroupSizeCalculator::Visit(
201+
const ola::messaging::Int64FieldDescriptor *descriptor) {
202+
m_non_groups.push_back(descriptor);
203+
}
204+
205+
194206
void GroupSizeCalculator::Visit(
195207
const ola::messaging::FieldDescriptorGroup *descriptor) {
196208
m_groups.push_back(descriptor);
@@ -294,6 +306,12 @@ void StaticGroupTokenCalculator::Visit(
294306
}
295307

296308

309+
void StaticGroupTokenCalculator::Visit(
310+
OLA_UNUSED const ola::messaging::UInt64FieldDescriptor *descriptor) {
311+
m_token_count.top()++;
312+
}
313+
314+
297315
void StaticGroupTokenCalculator::Visit(
298316
OLA_UNUSED const ola::messaging::Int8FieldDescriptor *descriptor) {
299317
m_token_count.top()++;
@@ -312,6 +330,12 @@ void StaticGroupTokenCalculator::Visit(
312330
}
313331

314332

333+
void StaticGroupTokenCalculator::Visit(
334+
OLA_UNUSED const ola::messaging::Int64FieldDescriptor *descriptor) {
335+
m_token_count.top()++;
336+
}
337+
338+
315339
void StaticGroupTokenCalculator::Visit(
316340
const ola::messaging::FieldDescriptorGroup *descriptor) {
317341
m_token_count.push(0);

common/rdm/GroupSizeCalculator.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,11 @@ class StaticGroupTokenCalculator
6060
void Visit(const ola::messaging::UInt8FieldDescriptor*);
6161
void Visit(const ola::messaging::UInt16FieldDescriptor*);
6262
void Visit(const ola::messaging::UInt32FieldDescriptor*);
63+
void Visit(const ola::messaging::UInt64FieldDescriptor*);
6364
void Visit(const ola::messaging::Int8FieldDescriptor*);
6465
void Visit(const ola::messaging::Int16FieldDescriptor*);
6566
void Visit(const ola::messaging::Int32FieldDescriptor*);
67+
void Visit(const ola::messaging::Int64FieldDescriptor*);
6668
void Visit(const ola::messaging::FieldDescriptorGroup*);
6769
void PostVisit(const ola::messaging::FieldDescriptorGroup*);
6870

@@ -106,9 +108,11 @@ class GroupSizeCalculator: public ola::messaging::FieldDescriptorVisitor {
106108
void Visit(const ola::messaging::UInt8FieldDescriptor*);
107109
void Visit(const ola::messaging::UInt16FieldDescriptor*);
108110
void Visit(const ola::messaging::UInt32FieldDescriptor*);
111+
void Visit(const ola::messaging::UInt64FieldDescriptor*);
109112
void Visit(const ola::messaging::Int8FieldDescriptor*);
110113
void Visit(const ola::messaging::Int16FieldDescriptor*);
111114
void Visit(const ola::messaging::Int32FieldDescriptor*);
115+
void Visit(const ola::messaging::Int64FieldDescriptor*);
112116
void Visit(const ola::messaging::FieldDescriptorGroup*);
113117
void PostVisit(const ola::messaging::FieldDescriptorGroup*);
114118

0 commit comments

Comments
 (0)