11#include "OptionsParser.h"
29struct FieldsOptionsCompatibilityCalc
31 static const std::size_t Value =
32 static_cast<std::size_t
>(T1) +\
33 static_cast<std::size_t
>(T2) +
34 static_cast<std::size_t
>(T3) +
35 static_cast<std::size_t
>(T4) +
36 static_cast<std::size_t
>(T5) +
37 static_cast<std::size_t
>(T6);
42template <
typename TBasic,
typename... TOptions>
45 using ParsedOptions = OptionsParser<TOptions...>;
47 static const bool CustomReaderIncompatible =
48 ParsedOptions::HasSerOffset ||
49 ParsedOptions::HasFixedLengthLimit ||
50 ParsedOptions::HasFixedBitLengthLimit ||
51 ParsedOptions::HasVarLengthLimits ||
52 ParsedOptions::HasAvailableLengthLimit ||
53 ParsedOptions::HasSequenceElemLengthForcing ||
54 ParsedOptions::HasSequenceSizeForcing ||
55 ParsedOptions::HasSequenceLengthForcing ||
56 ParsedOptions::HasSequenceFixedSize ||
57 ParsedOptions::HasSequenceSizeFieldPrefix ||
58 ParsedOptions::HasSequenceSerLengthFieldPrefix ||
59 ParsedOptions::HasSequenceElemSerLengthFieldPrefix ||
60 ParsedOptions::HasSequenceElemFixedSerLengthFieldPrefix ||
61 ParsedOptions::HasSequenceTrailingFieldSuffix ||
62 ParsedOptions::HasSequenceTerminationFieldSuffix ||
63 ParsedOptions::HasEmptySerialization ||
64 ParsedOptions::HasMissingOnReadFail;
66 static const bool VarLengthIncompatible =
67 ParsedOptions::HasFixedLengthLimit ||
68 ParsedOptions::HasFixedBitLengthLimit ||
69 ParsedOptions::HasAvailableLengthLimit;
72 (!ParsedOptions::HasVarLengthLimits) || (!VarLengthIncompatible),
73 "VarLength option is incompatible with FixedLength, FixedBitLength "
74 "and AvailableLengthLimit");
77 1U >= FieldsOptionsCompatibilityCalc<
78 ParsedOptions::HasSequenceSizeFieldPrefix,
79 ParsedOptions::HasSequenceSerLengthFieldPrefix,
80 ParsedOptions::HasSequenceFixedSize,
81 ParsedOptions::HasSequenceSizeForcing,
82 ParsedOptions::HasSequenceLengthForcing,
83 ParsedOptions::HasSequenceTerminationFieldSuffix>::Value,
84 "The following options are incompatible, cannot be used together: "
85 "SequenceSizeFieldPrefix, SequenceSerLengthFieldPrefix, "
86 "SequenceFixedSize, SequenceSizeForcingEnabled, SequenceLengthForcingEnabled, "
87 "SequenceTerminationFieldSuffix");
90 1U >= FieldsOptionsCompatibilityCalc<
91 ParsedOptions::HasSequenceElemSerLengthFieldPrefix,
92 ParsedOptions::HasSequenceElemFixedSerLengthFieldPrefix,
93 ParsedOptions::HasSequenceTerminationFieldSuffix>::Value,
94 "The following options are incompatible, cannot be used together: "
95 "SequenceElemSerLengthFieldPrefix, SequenceElemFixedSerLengthFieldPrefix "
96 "SequenceTerminationFieldSuffix");
99 (!ParsedOptions::HasSequenceTrailingFieldSuffix) ||
100 (!ParsedOptions::HasSequenceTerminationFieldSuffix),
101 "The following options are incompatible, cannot be used together: "
102 "SequenceTrailingFieldSuffix, SequenceTerminationFieldSuffix");
105 (!ParsedOptions::HasFailOnInvalid) ||
106 (!ParsedOptions::HasIgnoreInvalid),
107 "The following options are incompatible, cannot be used together: "
108 "FailOnInvalid, IgnoreInvalid");
111 1U >= FieldsOptionsCompatibilityCalc<
112 ParsedOptions::HasCustomStorageType,
113 ParsedOptions::HasFixedSizeStorage,
114 ParsedOptions::HasOrigDataView>::Value,
115 "The following options are incompatible, cannot be used together: "
116 "CustomStorageType, FixedSizeStorage, OrigDataView");
119 (!ParsedOptions::HasSequenceFixedSizeUseFixedSizeStorage) ||
120 (ParsedOptions::HasSequenceFixedSize),
121 "The option SequenceFixedSizeUseFixedSizeStorage cannot be used without SequenceFixedSize.");
124 (!ParsedOptions::HasSequenceFixedSizeUseFixedSizeStorage) ||
125 (!ParsedOptions::HasFixedSizeStorage),
126 "The following options are incompatible, cannot be used together: "
127 "SequenceFixedSizeUseFixedSizeStorage, FixedSizeStorage");
129 using FieldTypeAdapted =
130 typename ParsedOptions::template AdaptFieldType<TBasic>;
132 using InvalidByDefaultAdapted =
133 typename ParsedOptions::template AdaptInvalidByDefault<FieldTypeAdapted>;
135 using VersionStorageAdapted =
136 typename ParsedOptions::template AdaptVersionStorage<InvalidByDefaultAdapted>;
138 using SerOffsetAdapted =
139 typename ParsedOptions::template AdaptSerOffset<VersionStorageAdapted>;
141 using DisplayOffsetAdapted =
142 typename ParsedOptions::template AdaptDisplayOffset<SerOffsetAdapted>;
144 using VersionsRangeAdapted =
145 typename ParsedOptions::template AdaptVersionsRange<DisplayOffsetAdapted>;
147 using FixedLengthLimitAdapted =
148 typename ParsedOptions::template AdaptFixedLengthLimit<VersionsRangeAdapted>;
150 using FixedBitLengthLimitAdapted =
151 typename ParsedOptions::template AdaptFixedBitLengthLimit<FixedLengthLimitAdapted>;
153 using VarLengthLimitsAdapted =
154 typename ParsedOptions::template AdaptVarLengthLimits<FixedBitLengthLimitAdapted>;
156 using AvailableLengthLimitAdapted =
157 typename ParsedOptions::template AdaptAvailableLengthLimit<VarLengthLimitsAdapted>;
159 using SequenceElemLengthForcingAdapted =
160 typename ParsedOptions::template AdaptSequenceElemLengthForcing<AvailableLengthLimitAdapted>;
162 using SequenceElemSerLengthFieldPrefixAdapted =
163 typename ParsedOptions::template AdaptSequenceElemSerLengthFieldPrefix<SequenceElemLengthForcingAdapted>;
165 using SequenceElemFixedSerLengthFieldPrefixAdapted =
166 typename ParsedOptions::template AdaptSequenceElemFixedSerLengthFieldPrefix<SequenceElemSerLengthFieldPrefixAdapted>;
168 using SequenceSizeForcingAdapted =
169 typename ParsedOptions::template AdaptSequenceSizeForcing<SequenceElemFixedSerLengthFieldPrefixAdapted>;
171 using SequenceLengthForcingAdapted =
172 typename ParsedOptions::template AdaptSequenceLengthForcing<SequenceSizeForcingAdapted>;
174 using SequenceFixedSizeAdapted =
175 typename ParsedOptions::template AdaptSequenceFixedSize<SequenceLengthForcingAdapted>;
177 using SequenceSizeFieldPrefixAdapted =
178 typename ParsedOptions::template AdaptSequenceSizeFieldPrefix<SequenceFixedSizeAdapted>;
180 using SequenceSerLengthFieldPrefixAdapted =
181 typename ParsedOptions::template AdaptSequenceSerLengthFieldPrefix<SequenceSizeFieldPrefixAdapted>;
183 using SequenceTrailingFieldSuffixAdapted =
184 typename ParsedOptions::template AdaptSequenceTrailingFieldSuffix<SequenceSerLengthFieldPrefixAdapted>;
186 using SequenceTerminationFieldSuffixAdapted =
187 typename ParsedOptions::template AdaptSequenceTerminationFieldSuffix<SequenceTrailingFieldSuffixAdapted>;
189 using RemLengthMemberFieldAdapted =
190 typename ParsedOptions::template AdaptRemLengthMemberField<SequenceTerminationFieldSuffixAdapted>;
192 using DefaultValueInitialiserAdapted =
193 typename ParsedOptions::template AdaptDefaultValueInitialiser<RemLengthMemberFieldAdapted>;
195 using MultiRangeValidationAdapted =
196 typename ParsedOptions::template AdaptMultiRangeValidation<DefaultValueInitialiserAdapted>;
198 using CustomValidatorAdapted =
199 typename ParsedOptions::template AdaptCustomValidator<MultiRangeValidationAdapted>;
201 using FailOnInvalidAdapted =
202 typename ParsedOptions::template AdaptFailOnInvalid<CustomValidatorAdapted>;
204 using IgnoreInvalidAdapted =
205 typename ParsedOptions::template AdaptIgnoreInvalid<FailOnInvalidAdapted>;
207 using EmptySerializationAdapted =
208 typename ParsedOptions::template AdaptEmptySerialization<IgnoreInvalidAdapted>;
210 using CustomReadWrapAdapted =
211 typename ParsedOptions::template AdaptCustomRead<EmptySerializationAdapted>;
213 using CustomRefreshWrapAdapted =
214 typename ParsedOptions::template AdaptCustomRefresh<CustomReadWrapAdapted>;
216 using CustomWriteWrapAdapted =
217 typename ParsedOptions::template AdaptCustomWrite<CustomRefreshWrapAdapted>;
219 using MissingOnInvalidAdapted =
220 typename ParsedOptions::template AdaptMissingOnInvalid<CustomWriteWrapAdapted>;
222 using MissingOnReadFailAdapted =
223 typename ParsedOptions::template AdaptMissingOnReadFail<MissingOnInvalidAdapted>;
225 using VariantResetOnDestructAdapted =
226 typename ParsedOptions::template AdaptVariantResetOnDestruct<MissingOnReadFailAdapted>;
228 using FixedValueAdapted =
229 typename ParsedOptions::template AdaptFixedValue<VariantResetOnDestructAdapted>;
232 using Type = FixedValueAdapted;
235template <
typename TBasic,
typename... TOptions>
236using AdaptBasicFieldT =
typename AdaptBasicField<TBasic, TOptions...>::Type;
Main namespace for all classes / functions of COMMS library.