parcel 0.2.2
Wrappable, wire-transferable C++23 value system with JSON serialization
Loading...
Searching...
No Matches
primitive.h File Reference

PrimitiveCell<T> plus the per-storage PrimitiveTraits<T> specializations. More...

#include <parcel/cell.h>
#include <parcel/common.h>
#include <parcel/descriptor.h>
#include <commons/types.hpp>
#include <algorithm>
#include <complex>
#include <memory>
#include <string>
#include <string_view>
#include <type_traits>
#include <utility>
Include dependency graph for primitive.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  parcel::primitives::is_std_complex< T >
 Detects std::complex<U> storage (used by PrimitiveCell::to_string). More...
 
struct  parcel::primitives::PrimitiveTraits< char >
 Traits for char — wire kind "char". More...
 
struct  parcel::primitives::PrimitiveTraits< bool >
 Traits for bool — wire kind "bool". More...
 
struct  parcel::primitives::PrimitiveTraits< comms::u8 >
 Traits for comms::u8 — wire kind "u8". More...
 
struct  parcel::primitives::PrimitiveTraits< comms::u16 >
 Traits for comms::u16 — wire kind "u16". More...
 
struct  parcel::primitives::PrimitiveTraits< comms::u32 >
 Traits for comms::u32 — wire kind "u32". More...
 
struct  parcel::primitives::PrimitiveTraits< comms::u64 >
 Traits for comms::u64 — wire kind "u64". More...
 
struct  parcel::primitives::PrimitiveTraits< comms::u128 >
 Traits for comms::u128 — wire kind "u128". More...
 
struct  parcel::primitives::PrimitiveTraits< comms::i8 >
 Traits for comms::i8 — wire kind "i8". More...
 
struct  parcel::primitives::PrimitiveTraits< comms::i16 >
 Traits for comms::i16 — wire kind "i16". More...
 
struct  parcel::primitives::PrimitiveTraits< comms::i32 >
 Traits for comms::i32 — wire kind "i32". More...
 
struct  parcel::primitives::PrimitiveTraits< comms::i64 >
 Traits for comms::i64 — wire kind "i64". More...
 
struct  parcel::primitives::PrimitiveTraits< comms::i128 >
 Traits for comms::i128 — wire kind "i128". More...
 
struct  parcel::primitives::PrimitiveTraits< comms::f32 >
 Traits for comms::f32 — wire kind "f32". More...
 
struct  parcel::primitives::PrimitiveTraits< comms::f64 >
 Traits for comms::f64 — wire kind "f64". More...
 
struct  parcel::primitives::PrimitiveTraits< comms::cs8 >
 Traits for comms::cs8 — wire kind "cs8". More...
 
struct  parcel::primitives::PrimitiveTraits< comms::cs16 >
 Traits for comms::cs16 — wire kind "cs16". More...
 
struct  parcel::primitives::PrimitiveTraits< comms::cs32 >
 Traits for comms::cs32 — wire kind "cs32". More...
 
struct  parcel::primitives::PrimitiveTraits< comms::cs64 >
 Traits for comms::cs64 — wire kind "cs64". More...
 
struct  parcel::primitives::PrimitiveTraits< comms::cu8 >
 Traits for comms::cu8 — wire kind "cu8". More...
 
struct  parcel::primitives::PrimitiveTraits< comms::cu16 >
 Traits for comms::cu16 — wire kind "cu16". More...
 
struct  parcel::primitives::PrimitiveTraits< comms::cu32 >
 Traits for comms::cu32 — wire kind "cu32". More...
 
struct  parcel::primitives::PrimitiveTraits< comms::cu64 >
 Traits for comms::cu64 — wire kind "cu64". More...
 
struct  parcel::primitives::PrimitiveTraits< comms::cf32 >
 Traits for comms::cf32 — wire kind "cf32". More...
 
struct  parcel::primitives::PrimitiveTraits< comms::cf64 >
 Traits for comms::cf64 — wire kind "cf64". More...
 
struct  parcel::primitives::PrimitiveTraits< std::string >
 Traits for std::string — wire kind "string". More...
 
class  parcel::PrimitiveCell< T >
 Leaf cell wrapping a single scalar (or complex) value of type T. More...
 

Concepts

concept  parcel::PrimitiveStorage
 Concept naming the set of types PrimitiveCell accepts as storage.
 

Typedefs

using parcel::CharCell = PrimitiveCell< char >
 PrimitiveCell<char>.
 
using parcel::BoolCell = PrimitiveCell< bool >
 PrimitiveCell<bool>.
 
using parcel::U8Cell = PrimitiveCell< comms::u8 >
 PrimitiveCell<comms::u8>.
 
using parcel::U16Cell = PrimitiveCell< comms::u16 >
 PrimitiveCell<comms::u16>.
 
using parcel::U32Cell = PrimitiveCell< comms::u32 >
 PrimitiveCell<comms::u32>.
 
using parcel::U64Cell = PrimitiveCell< comms::u64 >
 PrimitiveCell<comms::u64>.
 
using parcel::I8Cell = PrimitiveCell< comms::i8 >
 PrimitiveCell<comms::i8>.
 
using parcel::I16Cell = PrimitiveCell< comms::i16 >
 PrimitiveCell<comms::i16>.
 
using parcel::I32Cell = PrimitiveCell< comms::i32 >
 PrimitiveCell<comms::i32>.
 
using parcel::I64Cell = PrimitiveCell< comms::i64 >
 PrimitiveCell<comms::i64>.
 
using parcel::FloatCell = PrimitiveCell< comms::f32 >
 PrimitiveCell<comms::f32>.
 
using parcel::DoubleCell = PrimitiveCell< comms::f64 >
 PrimitiveCell<comms::f64>.
 
using parcel::Cs8Cell = PrimitiveCell< comms::cs8 >
 PrimitiveCell<comms::cs8>.
 
using parcel::Cs16Cell = PrimitiveCell< comms::cs16 >
 PrimitiveCell<comms::cs16>.
 
using parcel::Cs32Cell = PrimitiveCell< comms::cs32 >
 PrimitiveCell<comms::cs32>.
 
using parcel::Cs64Cell = PrimitiveCell< comms::cs64 >
 PrimitiveCell<comms::cs64>.
 
using parcel::Cu8Cell = PrimitiveCell< comms::cu8 >
 PrimitiveCell<comms::cu8>.
 
using parcel::Cu16Cell = PrimitiveCell< comms::cu16 >
 PrimitiveCell<comms::cu16>.
 
using parcel::Cu32Cell = PrimitiveCell< comms::cu32 >
 PrimitiveCell<comms::cu32>.
 
using parcel::Cu64Cell = PrimitiveCell< comms::cu64 >
 PrimitiveCell<comms::cu64>.
 
using parcel::Cf32Cell = PrimitiveCell< comms::cf32 >
 PrimitiveCell<comms::cf32>.
 
using parcel::Cf64Cell = PrimitiveCell< comms::cf64 >
 PrimitiveCell<comms::cf64>.
 
using parcel::StringCell = PrimitiveCell< std::string >
 PrimitiveCell<std::string>.
 
using parcel::U128Cell = PrimitiveCell< comms::u128 >
 PrimitiveCell<comms::u128> — value rendered as a decimal string.
 
using parcel::I128Cell = PrimitiveCell< comms::i128 >
 PrimitiveCell<comms::i128> — value rendered as a decimal string.
 

Detailed Description

PrimitiveCell<T> plus the per-storage PrimitiveTraits<T> specializations.

Defines the leaf cell type for scalar values: bool, char, the commons fixed-width integers (comms::u8-comms::u64, comms::i8-comms::i64, plus comms::u128 / comms::i128 when supported), the floats (comms::f32 / comms::f64), the complex numbers (comms::cs8-comms::cu64, comms::cf32 / comms::cf64), and std::string. Each specialization of PrimitiveTraits<T> carries the wire kind id (e.g. "i32", "cf64", "string") and a default human-readable name + description used by the cell's descriptor.

The numeric storage types come from <commons/types.hpp>; complex numbers travel on the wire as a [real, imaginary] array via commons' nlohmann::adl_serializer<std::complex<T>>.