#pragma once #include "string_literal.hpp" #include "templates.hpp" namespace kel { namespace lbm { namespace sch { struct Void {}; struct UnsignedInteger {}; struct SignedInteger {}; struct FloatingPoint {}; template struct MixedPrecision { using Meta = Void; using StorageType = StorageT; using InterfaceType = InterfaceT; }; template struct Primitive { using Meta = Void; using StorageType = PrimType; using InterfaceType = PrimType; static constexpr uint64_t Bytes = N; }; using UInt8 = Primitive; using UInt16 = Primitive; using UInt32 = Primitive; using UInt64 = Primitive; using Int8 = Primitive; using Int16 = Primitive; using Int32 = Primitive; using Int64 = Primitive; using Float8 = Primitive; using Float16 = Primitive; using Float32 = Primitive; using Float64 = Primitive; template struct MixedPrecision { using Meta = Void; using Inner = Sch; }; template struct FixedArray { using Meta = Void; using Inner = T; static constexpr std::array Dimensions{Dims...}; }; template struct Array { using Meta = FixedArray; using Inner = T; static constexpr std::array Dimensions{Dims}; }; template struct Tuple { }; template struct Member {}; template struct Struct {}; } template struct schema { using Type = Sch; }; } }