Skip to content

Commit 7b96f6b

Browse files
committed
Added ostream hex support for DynamicArrayOf
1 parent 651cdd0 commit 7b96f6b

3 files changed

Lines changed: 48 additions & 1 deletion

File tree

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#pragma once
2+
#include "DynamicArrayOf.h"
3+
4+
#include <iomanip>
5+
#include <ostream>
6+
7+
namespace array19 {
8+
9+
template<class T> struct AsHex {
10+
const DynamicArrayOf<T>& a;
11+
12+
template<class Chr, class Traits>
13+
friend auto operator<<(std::basic_ostream<Chr, Traits>& out, AsHex<T>&& a) -> decltype(out)& {
14+
out << "[";
15+
bool first = true;
16+
for (auto& v : a.a) {
17+
if (first)
18+
first = false;
19+
else
20+
out << ", ";
21+
out << std::setfill('0') << std::setw(sizeof(T) * 2) << std::hex << std::internal << +v;
22+
}
23+
return out << std::dec << "]";
24+
}
25+
};
26+
27+
} // namespace array19

src/array19.lib/array19/DynamicArrayOf.test.cpp

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include "DynamicArrayOf.h"
22

33
#include "Array.h"
4+
#include "DynamicArrayOf.AsHex.ostream.h"
45
#include "DynamicArrayOf.equals.h"
56
#include "DynamicArrayOf.ostream.h"
67
#include "SliceOf.carray.h"
@@ -151,7 +152,7 @@ struct Vec3 {
151152
bool operator==(const Vec3&) const = default;
152153

153154
[[maybe_unused]] friend auto operator<<(std::ostream& o, const Vec3& v) -> std::ostream& {
154-
return o << "x:" << v.x << ", y:" << v.y << ", z:" << v.z;
155+
return o << "{x:" << v.x << ", y:" << v.y << ", z:" << v.z << '}';
155156
}
156157
};
157158

@@ -165,6 +166,24 @@ TEST(DynamicArrayOf, EmplaceStruct) {
165166
EXPECT_EQ(v, v2);
166167
}
167168

169+
TEST(DynamicArrayOf, Ostream) {
170+
auto s = std::stringstream{};
171+
s << DynamicArrayOf{10, 11, 16};
172+
EXPECT_EQ(s.str(), "[10, 11, 16]");
173+
}
174+
175+
TEST(DynamicArrayOf, OstreamStruct) {
176+
auto s = std::stringstream{};
177+
s << DynamicArrayOf{Vec3{1.1, 2.2, 3.3}, Vec3{10, 11, 16}};
178+
EXPECT_EQ(s.str(), "[{x:1.1, y:2.2, z:3.3}, {x:10, y:11, z:16}]");
179+
}
180+
181+
TEST(DynamicArrayOf, OstreamAsHex) {
182+
auto s = std::stringstream{};
183+
s << AsHex{DynamicArrayOf<uint8_t>{uint8_t{10}, uint8_t{11}, uint8_t{16}}};
184+
EXPECT_EQ(s.str(), "[0a, 0b, 10]");
185+
}
186+
168187
namespace {
169188

170189
struct Recorder {

src/array19.lib/array19/array19.qbs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ Product {
1515
"AllocatedArrayUtils.h",
1616
"Array.h",
1717
"Array.ostream.h",
18+
"DynamicArrayOf.AsHex.ostream.h",
1819
"DynamicArrayOf.equals.h",
1920
"DynamicArrayOf.h",
2021
"DynamicArrayOf.ostream.h",

0 commit comments

Comments
 (0)