group_particles
Loading...
Searching...
No Matches
callback_utils_chunk.hpp
Go to the documentation of this file.
1
6#ifndef CALLBACK_UTILS_CHUNK_HPP
7#define CALLBACK_UTILS_CHUNK_HPP
8
9#include <string>
10
11#include "callback.hpp"
12
13namespace CallbackUtils {
14
17namespace chunk {
18
21 template<typename AFields>
22 class SingleGrp :
23 virtual public Callback<AFields>
24 {// {{{
25 const std::string grp_fname;
26 public :
29 SingleGrp (const std::string &grp_fname_) :
30 grp_fname(grp_fname_)
31 { }
32
33 bool grp_chunk (size_t chunk_idx, std::string &fname) const override final
34 {
35 fname = grp_fname;
36 return !chunk_idx;
37 }
38 };// }}}
39
42 template<typename AFields>
43 class SinglePrt :
44 virtual public Callback<AFields>
45 {// {{{
46 const std::string prt_fname;
47 public :
50 SinglePrt (const std::string &prt_fname_) :
51 prt_fname(prt_fname_)
52 { }
53 bool prt_chunk (size_t chunk_idx, std::string &fname) const override final
54 {
55 fname = prt_fname;
56 return !chunk_idx;
57 }
58 };// }}}
59
62 template<typename AFields>
63 class MultiGrp :
64 virtual public Callback<AFields>
65 {// {{{
66 const std::string grp_fname;
67 const size_t min_idx, max_idx;
68 public :
75 MultiGrp (const std::string &grp_fname_, size_t max_idx_, size_t min_idx_=0UL) :
76 grp_fname(grp_fname_), min_idx(min_idx_), max_idx(max_idx_)
77 { }
78
79 bool grp_chunk (size_t chunk_idx, std::string &fname) const override final
80 {
81 char buf[grp_fname.size()+10];
82 std::sprintf(buf, grp_fname.c_str(), min_idx+chunk_idx);
83 fname = std::string(buf);
84 return min_idx+chunk_idx <= max_idx;
85 }
86 };// }}}
87
90 template<typename AFields>
91 class MultiPrt :
92 virtual public Callback<AFields>
93 {// {{{
94 const std::string prt_fname;
95 const size_t min_idx, max_idx;
96 public :
103 MultiPrt (const std::string &prt_fname_, size_t max_idx_, size_t min_idx_=0UL) :
104 prt_fname(prt_fname_), min_idx(min_idx_), max_idx(max_idx_)
105 { }
106
107 bool prt_chunk (size_t chunk_idx, std::string &fname) const override final
108 {
109 char buf[prt_fname.size()+10];
110 std::sprintf(buf, prt_fname.c_str(), min_idx+chunk_idx);
111 fname = std::string(buf);
112 return min_idx+chunk_idx <= max_idx;
113 }
114 };// }}}
115
118 template<typename AFields>
119 struct Single :
120 virtual public Callback<AFields>,
121 public SingleGrp<AFields>, public SinglePrt<AFields>
122 {// {{{
125 Single (const std::string &grp_fname,
126 const std::string &prt_fname) :
127 SingleGrp<AFields>(grp_fname), SinglePrt<AFields>(prt_fname) { }
128 };// }}}
129
132 template<typename AFields>
133 struct Multi :
134 virtual public Callback<AFields>,
135 public MultiGrp<AFields>, public MultiPrt<AFields>
136 {// {{{
139 Multi (const std::string &grp_fname, size_t grp_max_idx,
140 const std::string &prt_fname, size_t prt_max_idx) :
141 MultiGrp<AFields>(grp_fname, grp_max_idx),
142 MultiPrt<AFields>(prt_fname, prt_max_idx) { }
143 };// }}}
144
145} // namespace chunk
146
147} // namespace CallbackUtils
148
149#endif // CALLBACK_UTILS_CHUNK_HPP
Contains the abstract base class that the user should subclass from in order to define the desired fu...
there are multiple group chunks.
Definition callback_utils_chunk.hpp:65
MultiGrp(const std::string &grp_fname_, size_t max_idx_, size_t min_idx_=0UL)
Definition callback_utils_chunk.hpp:75
there are multiple particle chunks.
Definition callback_utils_chunk.hpp:93
MultiPrt(const std::string &prt_fname_, size_t max_idx_, size_t min_idx_=0UL)
Definition callback_utils_chunk.hpp:103
there is a single file containing all groups.
Definition callback_utils_chunk.hpp:24
SingleGrp(const std::string &grp_fname_)
Definition callback_utils_chunk.hpp:29
there is a single file containing all particles.
Definition callback_utils_chunk.hpp:45
SinglePrt(const std::string &prt_fname_)
Definition callback_utils_chunk.hpp:50
contains classes that implement parts of the Callback base.
Definition callback_utils.hpp:35
The abstract base class the user should inherit from.
Definition callback.hpp:32
wrapper for the common case that there are multiple group chunks and multiple particle chunks
Definition callback_utils_chunk.hpp:136
Multi(const std::string &grp_fname, size_t grp_max_idx, const std::string &prt_fname, size_t prt_max_idx)
Definition callback_utils_chunk.hpp:139
wrapper for the common case that there is one group chunk and one particle chunk
Definition callback_utils_chunk.hpp:122
Single(const std::string &grp_fname, const std::string &prt_fname)
Definition callback_utils_chunk.hpp:125