30sdds::ParameterDefinition parameter(std::string name, sdds::Type type) {
31 sdds::ParameterDefinition definition;
32 definition.name = std::move(name);
33 definition.type = type;
38sdds::ArrayDefinition array(std::string name, sdds::Type type,
39 std::int32_t dimensions) {
40 sdds::ArrayDefinition definition;
41 definition.name = std::move(name);
42 definition.type = type;
43 definition.dimensions = dimensions;
48sdds::ColumnDefinition column(std::string name, sdds::Type type) {
49 sdds::ColumnDefinition definition;
50 definition.name = std::move(name);
51 definition.type = type;
56sdds::Layout makeLayout() {
57 sdds::DataOptions data;
58 data.mode = sdds::DataMode::Ascii;
61 sdds::LayoutBuilder builder;
62 builder.setDescription(
"Example SDDS Output",
"SDDS++ Example")
63 .setDataOptions(data);
65 const std::vector<std::pair<const char *, sdds::Type>> fields = {
66 {
"short", sdds::Type::Int16},
67 {
"ushort", sdds::Type::UInt16},
68 {
"long", sdds::Type::Int32},
69 {
"ulong", sdds::Type::UInt32},
70 {
"long64", sdds::Type::Int64},
71 {
"ulong64", sdds::Type::UInt64},
72 {
"float", sdds::Type::Float},
73 {
"double", sdds::Type::Double},
74 {
"longdouble", sdds::Type::LongDouble},
75 {
"string", sdds::Type::String},
76 {
"char", sdds::Type::Character},
79 for (
const auto &[name, type] : fields) {
80 builder.addParameter(parameter(std::string(name) +
"Param", type));
81 const bool oneDimensional = type == sdds::Type::Int16 ||
82 type == sdds::Type::UInt16 ||
83 type == sdds::Type::Int32 ||
84 type == sdds::Type::UInt32;
85 builder.addArray(array(std::string(name) +
"Array", type,
86 oneDimensional ? 1 : 2));
87 builder.addColumn(column(std::string(name) +
"Col", type));
89 return builder.build();
93void writeFirstPage(sdds::Writer &writer) {
95 writer.setParameter(
"shortParam", std::int16_t{10});
96 writer.setParameter(
"ushortParam", std::uint16_t{11});
97 writer.setParameter(
"longParam", std::int32_t{1000});
98 writer.setParameter(
"ulongParam", std::uint32_t{1001});
99 writer.setParameter(
"long64Param", std::int64_t{1002});
100 writer.setParameter(
"ulong64Param", std::uint64_t{1003});
101 writer.setParameter(
"floatParam", 3.14F);
102 writer.setParameter(
"doubleParam", 2.71828);
103 writer.setParameter(
"longdoubleParam", 1.1L);
104 writer.setParameter(
"stringParam", std::string(
"FirstPage"));
105 writer.setParameter(
"charParam",
'A');
107 writer.setArray(
"shortArray", {{3}, std::vector<std::int16_t>{1, 2, 3}});
108 writer.setArray(
"ushortArray", {{3}, std::vector<std::uint16_t>{4, 5, 6}});
109 writer.setArray(
"longArray", {{3}, std::vector<std::int32_t>{1000, 2000, 3000}});
110 writer.setArray(
"ulongArray", {{3}, std::vector<std::uint32_t>{1001, 2001, 3001}});
111 writer.setArray(
"long64Array", {{4, 2}, std::vector<std::int64_t>{
112 1002, 2002, 3002, 4002, 5002, 6002, 7002, 8002}});
113 writer.setArray(
"ulong64Array", {{4, 2}, std::vector<std::uint64_t>{
114 1003, 2003, 3003, 4003, 5003, 6003, 7003, 8003}});
115 writer.setArray(
"floatArray", {{4, 2}, std::vector<float>{
116 1.1F, 1.2F, 1.3F, 1.4F, 1.5F, 1.6F, 1.7F, 1.8F}});
117 writer.setArray(
"doubleArray", {{4, 2}, std::vector<double>{
118 1.2, 2.2, 3.2, 4.2, 5.2, 6.2, 7.2, 8.2}});
119 writer.setArray(
"longdoubleArray", {{4, 2}, std::vector<long double>{
120 1.3L, 2.3L, 3.3L, 4.3L, 5.3L, 6.3L, 7.3L, 8.3L}});
121 writer.setArray(
"stringArray", {{4, 2}, std::vector<std::string>{
122 "one",
"two",
"three",
"four",
"five",
"six",
"seven",
"eight"}});
123 writer.setArray(
"charArray", {{4, 2}, std::vector<char>{
124 'A',
'B',
'C',
'D',
'E',
'F',
'G',
'H'}});
126 writer.setColumn(
"shortCol", std::vector<std::int16_t>{1, 2, 3, 4, 5});
127 writer.setColumn(
"ushortCol", std::vector<std::uint16_t>{1, 2, 3, 4, 5});
128 writer.setColumn(
"longCol", std::vector<std::int32_t>{100, 200, 300, 400, 500});
129 writer.setColumn(
"ulongCol", std::vector<std::uint32_t>{100, 200, 300, 400, 500});
130 writer.setColumn(
"long64Col", std::vector<std::int64_t>{100, 200, 300, 400, 500});
131 writer.setColumn(
"ulong64Col", std::vector<std::uint64_t>{100, 200, 300, 400, 500});
132 writer.setColumn(
"floatCol", std::vector<float>{1.1F, 2.2F, 3.3F, 4.4F, 5.5F});
133 writer.setColumn(
"doubleCol", std::vector<double>{10.01, 20.02, 30.03, 40.04, 50.05});
134 writer.setColumn(
"longdoubleCol", std::vector<long double>{
135 10.01L, 20.02L, 30.03L, 40.04L, 50.05L});
136 writer.setColumn(
"stringCol", std::vector<std::string>{
137 "one",
"two",
"three",
"four",
"five"});
138 writer.setColumn(
"charCol", std::vector<char>{
'a',
'b',
'c',
'd',
'e'});
143void writeSecondPage(sdds::Writer &writer) {
145 writer.setParameter(
"shortParam", std::int16_t{20});
146 writer.setParameter(
"ushortParam", std::uint16_t{21});
147 writer.setParameter(
"longParam", std::int32_t{2000});
148 writer.setParameter(
"ulongParam", std::uint32_t{2001});
149 writer.setParameter(
"long64Param", std::int64_t{2002});
150 writer.setParameter(
"ulong64Param", std::uint64_t{2003});
151 writer.setParameter(
"floatParam", 6.28F);
152 writer.setParameter(
"doubleParam", 1.41421);
153 writer.setParameter(
"longdoubleParam", 2.2L);
154 writer.setParameter(
"stringParam", std::string(
"SecondPage"));
155 writer.setParameter(
"charParam",
'B');
157 writer.setArray(
"shortArray", {{2}, std::vector<std::int16_t>{7, 8}});
158 writer.setArray(
"ushortArray", {{2}, std::vector<std::uint16_t>{9, 10}});
159 writer.setArray(
"longArray", {{2}, std::vector<std::int32_t>{4000, 5000}});
160 writer.setArray(
"ulongArray", {{2}, std::vector<std::uint32_t>{4001, 5001}});
161 writer.setArray(
"long64Array", {{2, 2}, std::vector<std::int64_t>{4002, 5002, 6002, 7002}});
162 writer.setArray(
"ulong64Array", {{2, 2}, std::vector<std::uint64_t>{4003, 5003, 6003, 7003}});
163 writer.setArray(
"floatArray", {{2, 2}, std::vector<float>{11.11F, 22.22F, 33.33F, 44.44F}});
164 writer.setArray(
"doubleArray", {{2, 2}, std::vector<double>{33.33, 44.44, 55.55, 66.66}});
165 writer.setArray(
"longdoubleArray", {{2, 2}, std::vector<long double>{
166 55.55L, 66.66L, 77.77L, 88.88L}});
167 writer.setArray(
"stringArray", {{2, 2}, std::vector<std::string>{
168 "blue",
"red",
"yellow",
"gold"}});
169 writer.setArray(
"charArray", {{2, 2}, std::vector<char>{
'W',
'X',
'Y',
'Z'}});
171 writer.setColumn(
"shortCol", std::vector<std::int16_t>{6, 7, 8});
172 writer.setColumn(
"ushortCol", std::vector<std::uint16_t>{6, 7, 8});
173 writer.setColumn(
"longCol", std::vector<std::int32_t>{600, 700, 800});
174 writer.setColumn(
"ulongCol", std::vector<std::uint32_t>{600, 700, 800});
175 writer.setColumn(
"long64Col", std::vector<std::int64_t>{600, 700, 800});
176 writer.setColumn(
"ulong64Col", std::vector<std::uint64_t>{600, 700, 800});
177 writer.setColumn(
"floatCol", std::vector<float>{6.6F, 7.7F, 8.8F});
178 writer.setColumn(
"doubleCol", std::vector<double>{60.06, 70.07, 80.08});
179 writer.setColumn(
"longdoubleCol", std::vector<long double>{60.06L, 70.07L, 80.08L});
180 writer.setColumn(
"stringCol", std::vector<std::string>{
"six",
"seven",
"eight"});
181 writer.setColumn(
"charCol", std::vector<char>{
'f',
'g',
'h'});
193int main(
int argc,
char **argv) {
195 std::cerr <<
"usage: " << argv[0] <<
" [output.sdds]\n";
199 const std::filesystem::path output = argc == 2 ? argv[1] :
"example.sdds";
201 auto writer = sdds::Writer::create(output, makeLayout());
202 writeFirstPage(writer);
203 writeSecondPage(writer);
205 std::cout <<
"Wrote " << output <<
"\n";
206 }
catch (
const std::exception &error) {
207 std::cerr <<
"Unable to write " << output <<
": " << error.what() <<
'\n';
int main(int argc, char **argv)
Writes an SDDS++ example file.