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;
 
   67    static const bool VarLengthIncompatible =
 
   68            ParsedOptions::HasFixedLengthLimit ||
 
   69            ParsedOptions::HasFixedBitLengthLimit ||
 
   70            ParsedOptions::HasAvailableLengthLimit;
 
   73            (!ParsedOptions::HasVarLengthLimits) || (!VarLengthIncompatible),
 
   74            "VarLength option is incompatible with FixedLength, FixedBitLength " 
   75            "and AvailableLengthLimit");
 
   78            1U >= FieldsOptionsCompatibilityCalc<
 
   79                ParsedOptions::HasSequenceSizeFieldPrefix,
 
   80                ParsedOptions::HasSequenceSerLengthFieldPrefix,
 
   81                ParsedOptions::HasSequenceFixedSize,
 
   82                ParsedOptions::HasSequenceSizeForcing,
 
   83                ParsedOptions::HasSequenceLengthForcing,
 
   84                ParsedOptions::HasSequenceTerminationFieldSuffix>::Value,
 
   85            "The following options are incompatible, cannot be used together: " 
   86            "SequenceSizeFieldPrefix, SequenceSerLengthFieldPrefix, " 
   87            "SequenceFixedSize, SequenceSizeForcingEnabled, SequenceLengthForcingEnabled, " 
   88            "SequenceTerminationFieldSuffix");
 
   91            1U >= FieldsOptionsCompatibilityCalc<
 
   92                ParsedOptions::HasSequenceElemSerLengthFieldPrefix,
 
   93                ParsedOptions::HasSequenceElemFixedSerLengthFieldPrefix,
 
   94                ParsedOptions::HasSequenceTerminationFieldSuffix>::Value,
 
   95            "The following options are incompatible, cannot be used together: " 
   96            "SequenceElemSerLengthFieldPrefix, SequenceElemFixedSerLengthFieldPrefix " 
   97            "SequenceTerminationFieldSuffix");
 
  100            (!ParsedOptions::HasSequenceTrailingFieldSuffix) ||
 
  101            (!ParsedOptions::HasSequenceTerminationFieldSuffix),
 
  102            "The following options are incompatible, cannot be used together: " 
  103            "SequenceTrailingFieldSuffix, SequenceTerminationFieldSuffix");
 
  106            (!ParsedOptions::HasFailOnInvalid) ||
 
  107            (!ParsedOptions::HasIgnoreInvalid),
 
  108            "The following options are incompatible, cannot be used together: " 
  109            "FailOnInvalid, IgnoreInvalid");
 
  112            1U >= FieldsOptionsCompatibilityCalc<
 
  113                ParsedOptions::HasCustomStorageType,
 
  114                ParsedOptions::HasFixedSizeStorage,
 
  115                ParsedOptions::HasOrigDataView>::Value,
 
  116            "The following options are incompatible, cannot be used together: " 
  117            "CustomStorageType, FixedSizeStorage, OrigDataView");
 
  120            (!ParsedOptions::HasSequenceFixedSizeUseFixedSizeStorage) ||
 
  121            (ParsedOptions::HasSequenceFixedSize),
 
  122            "The option SequenceFixedSizeUseFixedSizeStorage cannot be used without SequenceFixedSize.");
 
  125            (!ParsedOptions::HasSequenceFixedSizeUseFixedSizeStorage) ||
 
  126            (!ParsedOptions::HasFixedSizeStorage),
 
  127            "The following options are incompatible, cannot be used together: " 
  128            "SequenceFixedSizeUseFixedSizeStorage, FixedSizeStorage");
 
  130    using FieldTypeAdapted = 
 
  131        typename ParsedOptions::template AdaptFieldType<TBasic>;            
 
  133    using InvalidByDefaultAdapted = 
 
  134        typename ParsedOptions::template AdaptInvalidByDefault<FieldTypeAdapted>;
 
  136    using VersionStorageAdapted = 
 
  137        typename ParsedOptions::template AdaptVersionStorage<InvalidByDefaultAdapted>;
 
  139    using SerOffsetAdapted = 
 
  140        typename ParsedOptions::template AdaptSerOffset<VersionStorageAdapted>;
 
  142    using DisplayOffsetAdapted = 
 
  143        typename ParsedOptions::template AdaptDisplayOffset<SerOffsetAdapted>;
 
  145    using VersionsRangeAdapted = 
 
  146        typename ParsedOptions::template AdaptVersionsRange<DisplayOffsetAdapted>;
 
  148    using FixedLengthLimitAdapted = 
 
  149        typename ParsedOptions::template AdaptFixedLengthLimit<VersionsRangeAdapted>;
 
  151    using FixedBitLengthLimitAdapted = 
 
  152        typename ParsedOptions::template AdaptFixedBitLengthLimit<FixedLengthLimitAdapted>;
 
  154    using VarLengthLimitsAdapted = 
 
  155        typename ParsedOptions::template AdaptVarLengthLimits<FixedBitLengthLimitAdapted>;
 
  157    using AvailableLengthLimitAdapted =
 
  158        typename ParsedOptions::template AdaptAvailableLengthLimit<VarLengthLimitsAdapted>;       
 
  160    using SequenceElemLengthForcingAdapted = 
 
  161        typename ParsedOptions::template AdaptSequenceElemLengthForcing<AvailableLengthLimitAdapted>;
 
  163    using SequenceElemSerLengthFieldPrefixAdapted = 
 
  164        typename ParsedOptions::template AdaptSequenceElemSerLengthFieldPrefix<SequenceElemLengthForcingAdapted>;
 
  166    using SequenceElemFixedSerLengthFieldPrefixAdapted = 
 
  167        typename ParsedOptions::template AdaptSequenceElemFixedSerLengthFieldPrefix<SequenceElemSerLengthFieldPrefixAdapted>;
 
  169    using SequenceSizeForcingAdapted = 
 
  170        typename ParsedOptions::template AdaptSequenceSizeForcing<SequenceElemFixedSerLengthFieldPrefixAdapted>;
 
  172    using SequenceLengthForcingAdapted = 
 
  173        typename ParsedOptions::template AdaptSequenceLengthForcing<SequenceSizeForcingAdapted>;
 
  175    using SequenceFixedSizeAdapted = 
 
  176        typename ParsedOptions::template AdaptSequenceFixedSize<SequenceLengthForcingAdapted>;
 
  178    using SequenceSizeFieldPrefixAdapted = 
 
  179        typename ParsedOptions::template AdaptSequenceSizeFieldPrefix<SequenceFixedSizeAdapted>;
 
  181    using SequenceSerLengthFieldPrefixAdapted = 
 
  182        typename ParsedOptions::template AdaptSequenceSerLengthFieldPrefix<SequenceSizeFieldPrefixAdapted>;
 
  184    using SequenceTrailingFieldSuffixAdapted = 
 
  185        typename ParsedOptions::template AdaptSequenceTrailingFieldSuffix<SequenceSerLengthFieldPrefixAdapted>;
 
  187    using SequenceTerminationFieldSuffixAdapted = 
 
  188        typename ParsedOptions::template AdaptSequenceTerminationFieldSuffix<SequenceTrailingFieldSuffixAdapted>;
 
  190     using RemLengthMemberFieldAdapted = 
 
  191        typename ParsedOptions::template AdaptRemLengthMemberField<SequenceTerminationFieldSuffixAdapted>;
 
  193    using DefaultValueInitialiserAdapted = 
 
  194        typename ParsedOptions::template AdaptDefaultValueInitialiser<RemLengthMemberFieldAdapted>;
 
  196    using MultiRangeValidationAdapted = 
 
  197        typename ParsedOptions::template AdaptMultiRangeValidation<DefaultValueInitialiserAdapted>;
 
  199    using CustomValidatorAdapted = 
 
  200        typename ParsedOptions::template AdaptCustomValidator<MultiRangeValidationAdapted>;
 
  202    using FailOnInvalidAdapted = 
 
  203        typename ParsedOptions::template AdaptFailOnInvalid<CustomValidatorAdapted>;
 
  205    using IgnoreInvalidAdapted = 
 
  206        typename ParsedOptions::template AdaptIgnoreInvalid<FailOnInvalidAdapted>;
 
  208    using EmptySerializationAdapted = 
 
  209        typename ParsedOptions::template AdaptEmptySerialization<IgnoreInvalidAdapted>;
 
  211    using CustomReadWrapAdapted = 
 
  212        typename ParsedOptions::template AdaptCustomRead<EmptySerializationAdapted>;
 
  214    using CustomRefreshWrapAdapted = 
 
  215        typename ParsedOptions::template AdaptCustomRefresh<CustomReadWrapAdapted>;
 
  217    using CustomWriteWrapAdapted = 
 
  218        typename ParsedOptions::template AdaptCustomWrite<CustomRefreshWrapAdapted>;
 
  220    using MissingOnInvalidAdapted = 
 
  221        typename ParsedOptions::template AdaptMissingOnInvalid<CustomWriteWrapAdapted>;
 
  223    using MissingOnReadFailAdapted = 
 
  224        typename ParsedOptions::template AdaptMissingOnReadFail<MissingOnInvalidAdapted>;
 
  226    using VariantResetOnDestructAdapted = 
 
  227        typename ParsedOptions::template AdaptVariantResetOnDestruct<MissingOnReadFailAdapted>;
 
  229    using FixedValueAdapted = 
 
  230        typename ParsedOptions::template AdaptFixedValue<VariantResetOnDestructAdapted>;        
 
  233    using Type = FixedValueAdapted;
 
  236template <
typename TBasic, 
typename... TOptions>
 
  237using AdaptBasicFieldT = 
typename AdaptBasicField<TBasic, TOptions...>::Type;
 
Main namespace for all classes / functions of COMMS library.