Utopia 2
Framework for studying models of complex & adaptive systems.
Loading...
Searching...
No Matches
Static Public Member Functions | Private Attributes | List of all members
Utopia::DataIO::HDFBufferFactory Class Reference

Class which turns non-vector or plain-array containers into vectors. If the value_types are containers themselves, these are turned into vectors as well, because HDF5 cannot write something else. More...

#include <hdfbufferfactory.hh>

Static Public Member Functions

template<typename T >
static auto convert_source (T &source)
 function for converting source data into variable length type
 
template<typename Iter , typename Adaptor >
static auto buffer (Iter begin, Iter end, Adaptor &&adaptor)
 static function for turning an iterator range with arbitrarty datatypes into a vector of data as returned from 'adaptor'. Version for non-container return types of 'adaptor'
 

Private Attributes

std::shared_ptr< spdlog::logger > _log
 For logging all kinds of stuff.
 

Detailed Description

Class which turns non-vector or plain-array containers into vectors. If the value_types are containers themselves, these are turned into vectors as well, because HDF5 cannot write something else.

Member Function Documentation

◆ buffer()

template<typename Iter , typename Adaptor >
static auto Utopia::DataIO::HDFBufferFactory::buffer ( Iter  begin,
Iter  end,
Adaptor &&  adaptor 
)
inlinestatic

static function for turning an iterator range with arbitrarty datatypes into a vector of data as returned from 'adaptor'. Version for non-container return types of 'adaptor'

Parameters
beginstart of raw data range
endend of raw data range
adaptoradaptor function-pointer/functor/lamdba...
Template Parameters
IterIterator
Adaptorfunction<some_type(typename Iterator::value_type)>
Returns
auto The data range buffered from the adaptor
97 {
98 using T = Utils::remove_qualifier_t< decltype(adaptor(*begin)) >;
99 if constexpr (Utils::is_container_v< T >)
100 {
101
102 // set up buffer
103 if constexpr (Utils::is_array_like_v< T >)
104 {
105 std::vector< T > data_buffer(std::distance(begin, end));
106 auto buffer_begin = data_buffer.begin();
107 for (; begin != end; ++begin, ++buffer_begin)
108 {
109 *buffer_begin = adaptor(*begin);
110 }
111 return data_buffer;
112 }
113 else
114 {
115 std::vector< hvl_t > data_buffer(std::distance(begin, end));
116
117 auto buffer_begin = data_buffer.begin();
118 for (; begin != end; ++begin, ++buffer_begin)
119 {
121 }
122
123 return data_buffer;
124 }
125 }
126 else if constexpr (std::is_same_v< T, std::string >)
127 {
128 // set up buffer
129
130 std::vector< const char* > data_buffer(std::distance(begin, end));
131
132 auto buffer_begin = data_buffer.begin();
133 for (auto it = begin; it != end; ++it, ++buffer_begin)
134 {
136 }
137
138 return data_buffer;
139 }
140
141 else
142 { // not a container
143 // set up buffer
144 std::vector< T > data_buffer(std::distance(begin, end));
145
146 // make buffer
147 auto buffer_begin = data_buffer.begin();
148 for (; begin != end; ++begin, ++buffer_begin)
149 {
150 *buffer_begin = adaptor(*begin);
151 }
152 return data_buffer;
153 }
154 }
static auto convert_source(T &source)
function for converting source data into variable length type
Definition hdfbufferfactory.hh:63
Container select_entities(const Manager &mngr, const DataIO::Config &sel_cfg)
Select entities according to parameters specified in a configuration.
Definition select.hh:213
auto end(zip< Containers... > &zipper)
end function like std::end
Definition zip.hh:550
auto begin(zip< Containers... > &zipper)
Begin function like std::begin.
Definition zip.hh:537
typename remove_qualifier< T >::type remove_qualifier_t
Shorthand for 'typename remove_qualifier::value'.
Definition type_traits.hh:97

◆ convert_source()

template<typename T >
static auto Utopia::DataIO::HDFBufferFactory::convert_source ( T &  source)
inlinestatic

function for converting source data into variable length type

Parameters
sourceThe source
Template Parameters
Tthe source type
Returns
auto
64 {
65 if constexpr (std::is_same_v< T, std::string >)
66 {
67 return source.c_str();
68 }
69 else
70 {
71 hvl_t value;
72 value.len = source.size();
73 value.p = &(source[0]);
74 return value;
75 }
76 }
@ source
Cell is an infection source: constantly infected, spreading infection.

Member Data Documentation

◆ _log

std::shared_ptr< spdlog::logger > Utopia::DataIO::HDFBufferFactory::_log
private

For logging all kinds of stuff.


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