Go to the documentation of this file.
24 #ifndef TPIE_PIPELINING_SERIALIZATION_H
25 #define TPIE_PIPELINING_SERIALIZATION_H
27 #include <tpie/pipelining/node.h>
28 #include <tpie/pipelining/factory_helpers.h>
29 #include <tpie/pipelining/pair_factory.h>
30 #include <tpie/pipelining/pipe_base.h>
34 namespace serialization_bits {
36 template <
typename dest_t>
45 : dest(std::move(dest))
60 stream_size_type bytesRead = 0;
61 while (rd->can_read()) {
65 stream_size_type bytesRead2 = rd->
offset();
66 step(bytesRead2 - bytesRead);
67 bytesRead = bytesRead2;
90 void push(
const T & x) {
115 template <
typename T>
116 pipe_end<typename serialization_bits::output_factory<T>::type>
121 namespace serialization_bits {
123 template <
typename T>
129 std::shared_ptr<node> output=std::shared_ptr<node>())
130 :
node(token), output(output)
134 this->
set_name(
"Serialization reverse writer");
142 forward<tpie::maybe<tpie::temp_file>*>(
"__srev_file", &
file, 1);
149 void push(
const item_type & x) {
156 forward<stream_size_type>(
"items", items);
161 std::shared_ptr<node> output;
163 stream_size_type items;
166 template <
typename dest_t>
172 : dest(std::move(dest))
174 set_name(
"Serialization reverse reader");
183 file = fetch<tpie::maybe<tpie::temp_file> *>(
"__srev_file");
184 if (!
file->is_constructed())
186 rd.open((*file)->path());
192 stream_size_type bytesRead = 0;
193 while (rd.can_read()) {
197 stream_size_type bytesRead2 = rd.
offset();
198 step(bytesRead2 - bytesRead);
199 bytesRead = bytesRead2;
213 template <
typename T>
220 set_name(
"Serialization reverse reader");
228 file = fetch<tpie::maybe<tpie::temp_file> *>(
"__srev_file");
229 if (!
file->is_constructed())
231 rd.open((*file)->path());
236 return rd.can_read();
241 stream_size_type bytesRead = rd.
offset();
243 stream_size_type bytesRead2 = rd.
offset();
244 step(bytesRead2 - bytesRead);
258 template <
typename T>
264 std::shared_ptr<node> output = std::shared_ptr<node>())
269 set_name(
"Serialization buffer writer");
277 forward<tpie::maybe<tpie::temp_file>*>(
"__sbuf_file", &
file, 1);
284 void push(
const item_type & x) {
291 this->forward<stream_size_type>(
"items", items);
294 std::shared_ptr<node> output;
297 stream_size_type items;
301 template <
typename dest_t>
307 : dest(std::move(dest))
313 set_name(
"Serialization buffer reader");
318 file = fetch<tpie::maybe<tpie::temp_file> *>(
"__sbuf_file");
319 if (!
file->is_constructed())
322 rd.open((*file)->path());
328 stream_size_type bytesRead = 0;
329 while (rd.can_read()) {
333 stream_size_type bytesRead2 = rd.
offset();
334 step(bytesRead2 - bytesRead);
335 bytesRead = bytesRead2;
349 template <
typename T>
356 set_name(
"Fetching items", PRIORITY_SIGNIFICANT);
363 file = fetch<tpie::maybe<tpie::temp_file> *>(
"__sbuf_file");
364 if (!
file->is_constructed())
366 rd.open((*file)->path());
371 return rd.can_read();
376 stream_size_type bytesRead = rd.
offset();
378 stream_size_type bytesRead2 = rd.
offset();
379 step(bytesRead2 - bytesRead);
400 template <
typename T>
447 template <
typename T>
500 #endif // TPIE_PIPELINING_SERIALIZATION_H
pipelining/factory_base.h Base class of pipelining factories
Central file abstraction.
void go() override
For initiator nodes, execute this phase by pushing all items to be pushed.
void go() override
For initiator nodes, execute this phase by pushing all items to be pushed.
void propagate() override
Propagate stream metadata.
void propagate() override
Propagate stream metadata.
outputpipe_t output()
Returns a termfactory for the output nodes.
inputpipe_t input()
Returns a termfactory for the input nodes.
void unserialize(T &v)
Unserialize an unserializable item from the stream.
void set_minimum_memory(memory_size_type minimumMemory)
Called by implementers to declare minimum memory requirements.
Class to deduce the item_type of a node of type T.
void set_plot_options(flags< PLOT > options)
Set options specified for plot(), as a combination of node::PLOT values.
void add_push_destination(const node_token &dest)
Called by implementers to declare a push destination.
void end() override
End pipeline processing phase.
void set_name(const std::string &name, priority_type priority=PRIORITY_USER)
Set this node's name.
void serialize(const T &v)
Serialize a serializable item and write it to the stream.
stream_size_type offset()
Number of bytes read, not including the header.
void end() override
End pipeline processing phase.
Serialization stream buffer.
pipe_end< typename serialization_bits::output_factory< T >::type > serialization_output(serialization_writer &wr)
A pipelining node that writes item to a serialization_writer.
void end() override
End pipeline processing phase.
const std::string & path() const
The path of the file opened or the empty string.
void set_minimum_resource_usage(resource_type type, memory_size_type usage)
Called by implementers to declare minimum resource requirements.
void serialize(const T &v)
Serialize a serializable item and write it to the stream.
void step(stream_size_type steps=1)
Step the progress indicator.
void set_steps(stream_size_type steps)
Called by implementers that intend to call step().
void add_dependency(const node_token &dest)
Called by implementers to declare a node dependency, that is, a requirement that another node has end...
void end() override
End pipeline processing phase.
pipe_middle< split_factory< serialization_bits::reverser_input_t, node, serialization_bits::reverser_output_t > > serialization_reverser
A pipelining node that reverses serializable items and creates a phase boundary.
void propagate() override
Propagate stream metadata.
A passive serialization reverser stored in external memory.
stream_size_type size()
Size of file in bytes, not including the header.
pipe_begin< serialization_bits::input_factory > serialization_input(serialization_reader &rd)
A pipelining node that reads items from a serialization_reader.
void propagate() override
Propagate stream metadata.
stream_size_type offset()
Number of bytes read, not including the header.
pipe_middle< tfactory< bits::item_type_t, Args< T > > > item_type()
Create item type defining identity pipe node.
node()
Default constructor, using a new node_token.
pipe_middle< split_factory< serialization_bits::buffer_input_t, node, serialization_bits::buffer_output_t > > serialization_buffer
A pipelining node that acts as a buffer for serializable items and creates a phase boundary.