Ariles
Loading...
Searching...
No Matches
std_array.h
Go to the documentation of this file.
1/**
2 @file
3 @author Alexander Sherikov
4
5 @copyright 2026 Alexander Sherikov, Licensed under the Apache License, Version 2.0.
6 (see @ref LICENSE or http://www.apache.org/licenses/LICENSE-2.0)
7
8 @brief
9*/
10
11#pragma once
12
13#include <array>
14#include "../internal/helpers.h"
15
16
17namespace ariles2
18{
19 template <class t_Type, std::size_t t_Size>
20 bool isMissing(const std::array<t_Type, t_Size> &entry)
21 {
22 return (entry.empty());
23 }
24} // namespace ariles2
25
26
27namespace ariles2
28{
29 namespace read
30 {
31 template <class t_Visitor, class t_Type, std::size_t t_Size>
33 t_Visitor &visitor,
34 std::array<t_Type, t_Size> &entry,
35 const typename t_Visitor::Parameters &param)
36 {
38 const std::size_t size = visitor.startArray();
39 if (size != t_Size)
40 {
41 throw std::runtime_error(
42 "Array size mismatch: expected " + std::to_string(t_Size) + ", got " + std::to_string(size));
43 }
44 for (std::size_t i = 0; i < t_Size; ++i)
45 {
46 visitor.visitArrayElement(entry[i], param);
47 }
48 visitor.endArray();
49 }
50 } // namespace read
51} // namespace ariles2
52
53
54namespace ariles2
55{
56 namespace write
57 {
58 template <class t_Visitor, class t_Type, std::size_t t_Size>
60 t_Visitor &writer,
61 const std::array<t_Type, t_Size> &entry,
62 const typename t_Visitor::Parameters &param)
63 {
65 writer.startArray(t_Size, param.compact_arrays_);
66 for (const t_Type &value : entry)
67 {
68 writer.visitArrayElement(value, param);
69 }
70 writer.endArray();
71 }
72 } // namespace write
73} // namespace ariles2
74
75
76namespace ariles2
77{
78 namespace compare
79 {
80 template <class t_Visitor, class t_Type, std::size_t t_Size>
82 t_Visitor &visitor,
83 const std::array<t_Type, t_Size> &left,
84 const std::array<t_Type, t_Size> &right,
85 const typename t_Visitor::Parameters &param)
86 {
88
89 for (std::size_t i = 0; i < t_Size; ++i)
90 {
91 apply_compare(visitor, left[i], right[i], param);
92 }
93 }
94 } // namespace compare
95} // namespace ariles2
96
97
98namespace ariles2
99{
100 namespace defaults
101 {
102 template <class t_Visitor, class t_Type, std::size_t t_Size>
104 const t_Visitor &visitor,
105 std::array<t_Type, t_Size> &entry,
106 const typename t_Visitor::Parameters &param)
107 {
109 for (t_Type &element : entry)
110 {
111 apply_defaults(visitor, element, param);
112 }
113 }
114 } // namespace defaults
115} // namespace ariles2
116
117
118
119namespace ariles2
120{
121 namespace process
122 {
123 template <class t_Visitor, class t_Type, std::size_t t_Size>
125 const t_Visitor &visitor,
126 std::array<t_Type, t_Size> &entry,
127 const typename t_Visitor::Parameters &param)
128 {
130 for (typename std::array<t_Type, t_Size>::reference element : entry)
131 {
132 apply_process(visitor, element, param);
133 }
134 }
135 } // namespace process
136} // namespace ariles2
137
138
139namespace ariles2
140{
141 namespace copyfrom
142 {
143 template <class t_Visitor, class t_LeftType, class t_RightType, std::size_t t_Size>
145 t_Visitor &visitor,
146 std::array<t_LeftType, t_Size> &left,
147 const std::array<t_RightType, t_Size> &right,
148 const typename t_Visitor::Parameters &param)
149 {
151
152 for (std::size_t i = 0; i < t_Size; ++i)
153 {
154 apply_copyfrom(visitor, left[i], right[i], param);
155 }
156 }
157 } // namespace copyfrom
158
159
160 namespace copyto
161 {
162 template <class t_Visitor, class t_LeftType, class t_RightType, std::size_t t_Size>
164 t_Visitor &visitor,
165 const std::array<t_LeftType, t_Size> &left,
166 std::array<t_RightType, t_Size> &right,
167 const typename t_Visitor::Parameters &param)
168 {
170
171 for (std::size_t i = 0; i < t_Size; ++i)
172 {
173 apply_copyto(visitor, left[i], right[i], param);
174 }
175 }
176 } // namespace copyto
177} // namespace ariles2
void apply_compare(t_Visitor &visitor, const t_Left &left, const t_Right &right, const typename t_Visitor::Parameters &param)
Definition basic.h:140
void apply_copyfrom(t_Visitor &visitor, t_Left &left, const t_Right &right, const typename t_Visitor::Parameters &param)
Definition basic.h:307
void apply_copyto(t_Visitor &visitor, const t_Left &left, t_Right &right, const typename t_Visitor::Parameters &param)
Definition basic.h:353
void apply_defaults(const t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters &param, ARILES2_IS_BASE_ENABLER(ariles2::defaults::Base, t_Entry))
Definition basic.h:232
void apply_process(const t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters &param)
Definition basic.h:289
void apply_read(t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters &parameters, ARILES2_IS_BASE_ENABLER(ariles2::read::Base, t_Entry))
Definition basic.h:21
void apply_write(t_Visitor &writer, const t_Entry &entry, const typename t_Visitor::Parameters &parameters, ARILES2_IS_BASE_ENABLER(ariles2::write::Base, t_Entry))
Definition basic.h:82
bool isMissing(const ARILES2_POINTER_TYPE< t_Entry > &entry)
#define CPPUT_TRACE_FUNCTION
Definition trace.h:126