HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
Data Structures | Public Types | Public Member Functions | Friends
tt::datum_impl< HasLargeObjects > Class Template Reference

#include <ttauri/datum.hpp>

Data Structures

struct  _break
 
struct  _continue
 
struct  null
 
struct  undefined
 

Public Types

using vector = std::vector<datum_impl>
 
using map = std::unordered_map<datum_impl, datum_impl>
 

Public Member Functions

 datum_impl (datum_impl const &other) noexcept
 
datum_imploperator= (datum_impl const &other) noexcept
 
 datum_impl (datum_impl &&other) noexcept
 
datum_imploperator= (datum_impl &&other) noexcept
 
 datum_impl (datum_impl::undefined) noexcept
 
 datum_impl (datum_impl::null) noexcept
 
 datum_impl (datum_impl::_break) noexcept
 
 datum_impl (datum_impl::_continue) noexcept
 
 datum_impl (double value) noexcept
 
 datum_impl (float value) noexcept
 
 datum_impl (decimal value) noexcept
 
 datum_impl (date::year_month_day const &ymd) noexcept
 
 datum_impl (unsigned long long value) noexcept
 
 datum_impl (unsigned long value) noexcept
 
 datum_impl (unsigned int value) noexcept
 
 datum_impl (unsigned short value) noexcept
 
 datum_impl (unsigned char value) noexcept
 
 datum_impl (signed long long value) noexcept
 
 datum_impl (signed long value) noexcept
 
 datum_impl (signed int value) noexcept
 
 datum_impl (signed short value) noexcept
 
 datum_impl (signed char value) noexcept
 
 datum_impl (bool value) noexcept
 
 datum_impl (char value) noexcept
 
 datum_impl (std::string_view value) noexcept
 
 datum_impl (std::string const &value) noexcept
 
 datum_impl (char const *value) noexcept
 
template<bool P = HasLargeObjects, std::enable_if_t< P, int > = 0>
 datum_impl (URL const &value) noexcept
 
template<bool P = HasLargeObjects, std::enable_if_t< P, int > = 0>
 datum_impl (URL &&value) noexcept
 
template<bool P = HasLargeObjects, std::enable_if_t< P, int > = 0>
 datum_impl (datum_impl::vector const &value) noexcept
 
template<bool P = HasLargeObjects, std::enable_if_t< P, int > = 0>
 datum_impl (datum_impl::vector &&value) noexcept
 
template<bool P = HasLargeObjects, std::enable_if_t< P, int > = 0>
 datum_impl (datum_impl::map const &value) noexcept
 
template<bool P = HasLargeObjects, std::enable_if_t< P, int > = 0>
 datum_impl (datum_impl::map &&value) noexcept
 
datum_imploperator= (datum_impl::undefined rhs) noexcept
 
datum_imploperator= (datum_impl::null rhs) noexcept
 
datum_imploperator= (datum_impl::_break rhs) noexcept
 
datum_imploperator= (datum_impl::_continue rhs) noexcept
 
datum_imploperator= (double rhs) noexcept
 
datum_imploperator= (float rhs) noexcept
 
datum_imploperator= (decimal rhs) noexcept
 
datum_imploperator= (date::year_month_day const &ymd) noexcept
 
datum_imploperator= (unsigned long long rhs)
 
datum_imploperator= (unsigned long rhs) noexcept
 
datum_imploperator= (unsigned int rhs) noexcept
 
datum_imploperator= (unsigned short rhs) noexcept
 
datum_imploperator= (unsigned char rhs) noexcept
 
datum_imploperator= (signed long long rhs) noexcept
 
datum_imploperator= (signed long rhs) noexcept
 
datum_imploperator= (signed int rhs) noexcept
 
datum_imploperator= (signed short rhs) noexcept
 
datum_imploperator= (signed char rhs) noexcept
 
datum_imploperator= (bool rhs) noexcept
 
datum_imploperator= (char rhs) noexcept
 
datum_imploperator= (std::string_view rhs)
 
datum_imploperator= (std::string const &rhs)
 
datum_imploperator= (char const *rhs)
 
template<bool P = HasLargeObjects, std::enable_if_t< P, int > = 0>
datum_imploperator= (URL const &rhs) noexcept
 
template<bool P = HasLargeObjects, std::enable_if_t< P, int > = 0>
datum_imploperator= (URL &&rhs) noexcept
 
template<bool P = HasLargeObjects, std::enable_if_t< P, int > = 0>
datum_imploperator= (datum_impl::vector const &rhs)
 
template<bool P = HasLargeObjects, std::enable_if_t< P, int > = 0>
datum_imploperator= (datum_impl::vector &&rhs)
 
template<bool P = HasLargeObjects, std::enable_if_t< P, int > = 0>
datum_imploperator= (datum_impl::map const &rhs)
 
template<bool P = HasLargeObjects, std::enable_if_t< P, int > = 0>
datum_imploperator= (datum_impl::map &&rhs)
 
 operator double () const
 
 operator float () const
 
 operator decimal () const
 
 operator date::year_month_day () const
 
 operator signed long long () const
 
 operator signed long () const
 
 operator signed int () const
 
 operator signed short () const
 
 operator signed char () const
 
 operator unsigned long long () const
 
 operator unsigned long () const
 
 operator unsigned int () const
 
 operator unsigned short () const
 
 operator unsigned char () const
 
 operator bool () const noexcept
 
 operator char () const
 
 operator bstring () const
 
 operator std::string () const noexcept
 
template<bool P = HasLargeObjects, std::enable_if_t< P, int > = 0>
 operator URL () const
 
template<bool P = HasLargeObjects, std::enable_if_t< P, int > = 0>
 operator datum_impl::vector () const
 
template<bool P = HasLargeObjects, std::enable_if_t< P, int > = 0>
 operator datum_impl::map () const
 
template<bool P = HasLargeObjects, std::enable_if_t< P, int > = 0>
datum_imploperator[] (datum_impl const &rhs)
 Index into a datum::map or datum::vector.
 
template<bool P = HasLargeObjects, std::enable_if_t< P, int > = 0>
datum_impl operator[] (datum_impl const &rhs) const
 Index into a datum::map or datum::vector.
 
template<bool P = HasLargeObjects, std::enable_if_t< P, int > = 0>
bool contains (datum_impl const &rhs) const noexcept
 Check if an index is contained in a datum.
 
template<bool P = HasLargeObjects, std::enable_if_t< P, int > = 0>
datum_implappend ()
 Append and return a reference to a datum holding undefined to this datum.
 
template<typename... Args>
void emplace_back (Args &&... args)
 
template<typename Arg >
void push_back (Arg &&arg)
 
void pop_back ()
 
datum_impl year () const
 
datum_impl quarter () const
 
datum_impl month () const
 
datum_impl day () const
 
datum_impl const & front () const
 
datum_implfront ()
 
datum_impl const & back () const
 
datum_implback ()
 
std::string repr () const noexcept
 
int type_order () const noexcept
 
datum_implget_by_path (std::vector< std::string > const &key)
 
datum_impl get_by_path (std::vector< std::string > const &key) const
 
bool is_integer () const noexcept
 
bool is_decimal () const noexcept
 
bool is_ymd () const noexcept
 
bool is_float () const noexcept
 
bool is_string () const noexcept
 
bool is_bytes () const noexcept
 
bool is_bool () const noexcept
 
bool is_null () const noexcept
 
bool is_undefined () const noexcept
 
bool is_break () const noexcept
 
bool is_continue () const noexcept
 
bool is_url () const noexcept
 
bool is_vector () const noexcept
 
bool is_map () const noexcept
 
bool is_numeric () const noexcept
 
datum_type_t type () const noexcept
 
char const * type_name () const noexcept
 
size_t size () const
 
template<bool P = HasLargeObjects, std::enable_if_t< P, int > = 0>
map::const_iterator map_begin () const
 
template<bool P = HasLargeObjects, std::enable_if_t< P, int > = 0>
map::const_iterator map_end () const
 
template<bool P = HasLargeObjects, std::enable_if_t< P, int > = 0>
vector::const_iterator vector_begin () const
 
template<bool P = HasLargeObjects, std::enable_if_t< P, int > = 0>
vector::const_iterator vector_end () const
 
size_t hash () const noexcept
 
datum_imploperator++ ()
 
datum_imploperator-- ()
 
datum_impl operator++ (int)
 
datum_impl operator-- (int)
 
datum_imploperator+= (datum_impl const &rhs)
 
datum_imploperator-= (datum_impl const &rhs)
 
datum_imploperator*= (datum_impl const &rhs)
 
datum_imploperator/= (datum_impl const &rhs)
 
datum_imploperator%= (datum_impl const &rhs)
 
datum_imploperator<<= (datum_impl const &rhs)
 
datum_imploperator>>= (datum_impl const &rhs)
 
datum_imploperator&= (datum_impl const &rhs)
 
datum_imploperator|= (datum_impl const &rhs)
 
datum_imploperator^= (datum_impl const &rhs)
 

Friends

datum_impl operator~ (datum_impl const &rhs)
 
datum_impl operator- (datum_impl const &rhs)
 
datum_impl operator+ (datum_impl const &rhs)
 
bool operator== (datum_impl const &lhs, datum_impl const &rhs) noexcept
 
bool operator< (datum_impl const &lhs, datum_impl const &rhs) noexcept
 
bool operator!= (datum_impl const &lhs, datum_impl const &rhs) noexcept
 
bool operator> (datum_impl const &lhs, datum_impl const &rhs) noexcept
 
bool operator<= (datum_impl const &lhs, datum_impl const &rhs) noexcept
 
bool operator>= (datum_impl const &lhs, datum_impl const &rhs) noexcept
 
datum_impl operator+ (datum_impl const &lhs, datum_impl const &rhs)
 
datum_impl operator- (datum_impl const &lhs, datum_impl const &rhs)
 
datum_impl operator* (datum_impl const &lhs, datum_impl const &rhs)
 
datum_impl operator/ (datum_impl const &lhs, datum_impl const &rhs)
 
datum_impl operator% (datum_impl const &lhs, datum_impl const &rhs)
 
datum_impl operator<< (datum_impl const &lhs, datum_impl const &rhs)
 
datum_impl operator>> (datum_impl const &lhs, datum_impl const &rhs)
 
datum_impl operator& (datum_impl const &lhs, datum_impl const &rhs)
 
datum_impl operator| (datum_impl const &lhs, datum_impl const &rhs)
 
datum_impl operator^ (datum_impl const &lhs, datum_impl const &rhs)
 
std::string to_string (datum_impl const &d)
 
std::ostreamoperator<< (std::ostream &os, datum_impl const &d)
 
void swap (datum_impl &lhs, datum_impl &rhs) noexcept
 
datum_impl pow (datum_impl const &lhs, datum_impl const &rhs)
 
datum_impl deep_merge (datum_impl const &lhs, datum_impl const &rhs) noexcept
 Merge two datums together, such that the second will override values on the first.
 
template<typename Alternative >
bool holds_alternative (datum_impl const &rhs) noexcept
 

Detailed Description

template<bool HasLargeObjects>
class tt::datum_impl< HasLargeObjects >

A fixed size (64 bits) class for a generic value type.

A datum can hold and do calculations with the following types:

Due to the recursive nature of the datum type (through vector and map) you can serialize your own types by adding conversion constructor and operator to and from the datum on your type.

Parameters
HasLargeObjectstrue when the datum will manage memory for large objects

Member Function Documentation

◆ append()

template<bool HasLargeObjects>
template<bool P = HasLargeObjects, std::enable_if_t< P, int > = 0>
datum_impl & tt::datum_impl< HasLargeObjects >::append ( )
inline

Append and return a reference to a datum holding undefined to this datum.

This datum holding a undefined will be treated as if it is holding an empty vector. This datum must hold a vector.

Returns
a reference to datum holding a vector.

◆ contains()

template<bool HasLargeObjects>
template<bool P = HasLargeObjects, std::enable_if_t< P, int > = 0>
bool tt::datum_impl< HasLargeObjects >::contains ( datum_impl< HasLargeObjects > const & rhs) const
inlinenoexcept

Check if an index is contained in a datum.

This datum must hold a vector, map or undefined. When this datum holds undefined it is treated as if datum holds an empty map. When this datum holds a vector, the index must be datum holding an integer.

Parameters
rhsAn index into the map or vector.
Returns
true if the index is in the map or vector.

◆ operator[]() [1/2]

template<bool HasLargeObjects>
template<bool P = HasLargeObjects, std::enable_if_t< P, int > = 0>
datum_impl & tt::datum_impl< HasLargeObjects >::operator[] ( datum_impl< HasLargeObjects > const & rhs)
inline

Index into a datum::map or datum::vector.

This datum must hold a vector, map or undefined. When this datum holds undefined it is treated as if datum holds an empty map. When this datum holds a vector, the index must be datum holding an integer.

Parameters
rhsAn index into the map or vector.

◆ operator[]() [2/2]

template<bool HasLargeObjects>
template<bool P = HasLargeObjects, std::enable_if_t< P, int > = 0>
datum_impl tt::datum_impl< HasLargeObjects >::operator[] ( datum_impl< HasLargeObjects > const & rhs) const
inline

Index into a datum::map or datum::vector.

This datum must hold a vector, map or undefined. When this datum holds undefined it is treated as if datum holds an empty map. When this datum holds a vector, the index must be datum holding an integer.

Parameters
rhsAn index into the map or vector.

◆ type_order()

template<bool HasLargeObjects>
int tt::datum_impl< HasLargeObjects >::type_order ( ) const
inlinenoexcept

Return ordering of types. Used in less-than comparison between different types.

Friends And Related Symbol Documentation

◆ deep_merge

template<bool HasLargeObjects>
datum_impl deep_merge ( datum_impl< HasLargeObjects > const & lhs,
datum_impl< HasLargeObjects > const & rhs )
friend

Merge two datums together, such that the second will override values on the first.

This will merge map-datums together by recursively deep merging matching items.

Parameters
lhsFirst datum.
rhsSecond datum that will override the first datum.
Returns

The documentation for this class was generated from the following file: