23#include "openPMD/ChunkInfo.hpp"
24#include "openPMD/Dataset.hpp"
25#include "openPMD/Error.hpp"
26#include "openPMD/IterationEncoding.hpp"
27#include "openPMD/Streaming.hpp"
28#include "openPMD/auxiliary/Export.hpp"
29#include "openPMD/auxiliary/Memory.hpp"
30#include "openPMD/auxiliary/Variant.hpp"
31#include "openPMD/backend/Attribute.hpp"
32#include "openPMD/backend/ParsePreference.hpp"
98 OPENPMDAPI_EXPORT std::string operationAsString(Operation);
101struct OPENPMDAPI_EXPORT AbstractParameter
103 virtual ~AbstractParameter() =
default;
104 AbstractParameter() =
default;
106 virtual std::unique_ptr<AbstractParameter> to_heap() && = 0;
114 template <
typename TracingJSON>
117 std::string
const ¤tBackendName,
118 std::string
const &warningMessage);
125 I_dont_want_to_use_joined_dimensions{};
147struct OPENPMDAPI_EXPORT Parameter :
public AbstractParameter
149 Parameter() =
delete;
150 Parameter(Parameter
const &) =
delete;
151 Parameter(Parameter &&) =
delete;
155struct OPENPMDAPI_EXPORT
156 Parameter<Operation::CREATE_FILE> :
public AbstractParameter
158 Parameter() =
default;
159 Parameter(Parameter &&) =
default;
160 Parameter(Parameter
const &) =
default;
161 Parameter &operator=(Parameter &&) =
default;
162 Parameter &operator=(Parameter
const &) =
default;
164 std::unique_ptr<AbstractParameter> to_heap() &&
override
166 return std::unique_ptr<AbstractParameter>(
167 new Parameter<Operation::CREATE_FILE>(std::move(*
this)));
170 std::string name =
"";
174struct OPENPMDAPI_EXPORT
175 Parameter<Operation::CHECK_FILE> :
public AbstractParameter
177 Parameter() =
default;
178 Parameter(Parameter &&) =
default;
179 Parameter(Parameter
const &) =
default;
180 Parameter &operator=(Parameter &&) =
default;
181 Parameter &operator=(Parameter
const &) =
default;
183 std::unique_ptr<AbstractParameter> to_heap() &&
override
185 return std::unique_ptr<AbstractParameter>(
186 new Parameter<Operation::CHECK_FILE>(std::move(*
this)));
189 std::string name =
"";
190 enum class FileExists
196 std::shared_ptr<FileExists> fileExists =
197 std::make_shared<FileExists>(FileExists::DontKnow);
201struct OPENPMDAPI_EXPORT
202 Parameter<Operation::OPEN_FILE> :
public AbstractParameter
204 Parameter() =
default;
205 Parameter(Parameter &&) =
default;
206 Parameter(Parameter
const &) =
default;
207 Parameter &operator=(Parameter &&) =
default;
208 Parameter &operator=(Parameter
const &) =
default;
210 std::unique_ptr<AbstractParameter> to_heap() &&
override
212 return std::unique_ptr<AbstractParameter>(
213 new Parameter<Operation::OPEN_FILE>(std::move(*
this)));
229 std::string name =
"";
230 Reopen reopen = Reopen::NoReopen;
231 using ParsePreference = internal::ParsePreference;
232 std::shared_ptr<ParsePreference> out_parsePreference =
233 std::make_shared<ParsePreference>(ParsePreference::UpFront);
237struct OPENPMDAPI_EXPORT
238 Parameter<Operation::CLOSE_FILE> :
public AbstractParameter
240 Parameter() =
default;
241 Parameter(Parameter &&) =
default;
242 Parameter(Parameter
const &) =
default;
243 Parameter &operator=(Parameter &&) =
default;
244 Parameter &operator=(Parameter
const &) =
default;
246 std::unique_ptr<AbstractParameter> to_heap() &&
override
248 return std::unique_ptr<AbstractParameter>(
249 new Parameter<Operation::CLOSE_FILE>(std::move(*
this)));
254struct OPENPMDAPI_EXPORT
255 Parameter<Operation::DELETE_FILE> :
public AbstractParameter
257 Parameter() =
default;
258 Parameter(Parameter &&) =
default;
259 Parameter(Parameter
const &) =
default;
260 Parameter &operator=(Parameter &&) =
default;
261 Parameter &operator=(Parameter
const &) =
default;
263 std::unique_ptr<AbstractParameter> to_heap() &&
override
265 return std::unique_ptr<AbstractParameter>(
266 new Parameter<Operation::DELETE_FILE>(std::move(*
this)));
269 std::string name =
"";
273struct OPENPMDAPI_EXPORT
274 Parameter<Operation::CREATE_PATH> :
public AbstractParameter
276 Parameter() =
default;
277 Parameter(Parameter &&) =
default;
278 Parameter(Parameter
const &) =
default;
279 Parameter &operator=(Parameter &&) =
default;
280 Parameter &operator=(Parameter
const &) =
default;
282 std::unique_ptr<AbstractParameter> to_heap() &&
override
284 return std::unique_ptr<AbstractParameter>(
285 new Parameter<Operation::CREATE_PATH>(std::move(*
this)));
288 std::string path =
"";
292struct OPENPMDAPI_EXPORT
293 Parameter<Operation::CLOSE_PATH> :
public AbstractParameter
295 Parameter() =
default;
296 Parameter(Parameter &&) =
default;
297 Parameter(Parameter
const &) =
default;
298 Parameter &operator=(Parameter &&) =
default;
299 Parameter &operator=(Parameter
const &) =
default;
301 std::unique_ptr<AbstractParameter> to_heap() &&
override
303 return std::unique_ptr<AbstractParameter>(
304 new Parameter<Operation::CLOSE_PATH>(std::move(*
this)));
309struct OPENPMDAPI_EXPORT
310 Parameter<Operation::OPEN_PATH> :
public AbstractParameter
312 Parameter() =
default;
313 Parameter(Parameter &&) =
default;
314 Parameter(Parameter
const &) =
default;
315 Parameter &operator=(Parameter &&) =
default;
316 Parameter &operator=(Parameter
const &) =
default;
318 std::unique_ptr<AbstractParameter> to_heap() &&
override
320 return std::unique_ptr<AbstractParameter>(
321 new Parameter<Operation::OPEN_PATH>(std::move(*
this)));
324 std::string path =
"";
328struct OPENPMDAPI_EXPORT
329 Parameter<Operation::DELETE_PATH> :
public AbstractParameter
331 Parameter() =
default;
332 Parameter(Parameter &&) =
default;
333 Parameter(Parameter
const &) =
default;
334 Parameter &operator=(Parameter &&) =
default;
335 Parameter &operator=(Parameter
const &) =
default;
337 std::unique_ptr<AbstractParameter> to_heap() &&
override
339 return std::unique_ptr<AbstractParameter>(
340 new Parameter<Operation::DELETE_PATH>(std::move(*
this)));
343 std::string path =
"";
347struct OPENPMDAPI_EXPORT
348 Parameter<Operation::LIST_PATHS> :
public AbstractParameter
350 Parameter() =
default;
351 Parameter(Parameter &&) =
default;
352 Parameter(Parameter
const &) =
default;
353 Parameter &operator=(Parameter &&) =
default;
354 Parameter &operator=(Parameter
const &) =
default;
356 std::unique_ptr<AbstractParameter> to_heap() &&
override
358 return std::unique_ptr<AbstractParameter>(
359 new Parameter<Operation::LIST_PATHS>(std::move(*
this)));
362 std::shared_ptr<std::vector<std::string>> paths =
363 std::make_shared<std::vector<std::string>>();
367struct OPENPMDAPI_EXPORT
368 Parameter<Operation::CREATE_DATASET> :
public AbstractParameter
374 , joinedDimension(ds.joinedDimension())
381 Parameter(Parameter &&) =
default;
382 Parameter(Parameter
const &) =
default;
383 Parameter &operator=(Parameter &&) =
default;
384 Parameter &operator=(Parameter
const &) =
default;
386 std::unique_ptr<AbstractParameter> to_heap() &&
override
388 return std::unique_ptr<AbstractParameter>(
389 new Parameter<Operation::CREATE_DATASET>(std::move(*
this)));
392 std::string name =
"";
394 Datatype dtype = Datatype::UNDEFINED;
395 std::string options =
"{}";
396 std::optional<size_t> joinedDimension;
398 template <
typename TracingJSON>
399 TracingJSON compileJSONConfig(
402 std::string
const &backendName)
const;
406struct OPENPMDAPI_EXPORT
407 Parameter<Operation::EXTEND_DATASET> :
public AbstractParameter
409 Parameter(Extent e) : joinedDimension(Dataset::joinedDimension(e))
411 this->extent = std::move(e);
418 Parameter(Parameter &&) =
default;
419 Parameter(Parameter
const &) =
default;
420 Parameter &operator=(Parameter &&) =
default;
421 Parameter &operator=(Parameter
const &) =
default;
423 std::unique_ptr<AbstractParameter> to_heap() &&
override
425 return std::unique_ptr<AbstractParameter>(
426 new Parameter<Operation::EXTEND_DATASET>(std::move(*
this)));
430 std::optional<size_t> joinedDimension;
434struct OPENPMDAPI_EXPORT
435 Parameter<Operation::OPEN_DATASET> :
public AbstractParameter
437 Parameter() =
default;
438 Parameter(Parameter &&) =
default;
439 Parameter(Parameter
const &) =
default;
440 Parameter &operator=(Parameter &&) =
default;
441 Parameter &operator=(Parameter
const &) =
default;
443 std::unique_ptr<AbstractParameter> to_heap() &&
override
445 return std::unique_ptr<AbstractParameter>(
446 new Parameter<Operation::OPEN_DATASET>(std::move(*
this)));
449 template <
typename TracingJSON>
450 static TracingJSON compileJSONConfig(
453 std::string
const &backendName);
455 std::string name =
"";
456 std::shared_ptr<Datatype> dtype = std::make_shared<Datatype>();
457 std::shared_ptr<Extent> extent = std::make_shared<Extent>();
461struct OPENPMDAPI_EXPORT
462 Parameter<Operation::DELETE_DATASET> :
public AbstractParameter
464 Parameter() =
default;
465 Parameter(Parameter &&) =
default;
466 Parameter(Parameter
const &) =
default;
467 Parameter &operator=(Parameter &&) =
default;
468 Parameter &operator=(Parameter
const &) =
default;
470 std::unique_ptr<AbstractParameter> to_heap() &&
override
472 return std::unique_ptr<AbstractParameter>(
473 new Parameter<Operation::DELETE_DATASET>(std::move(*
this)));
476 std::string name =
"";
480struct OPENPMDAPI_EXPORT
481 Parameter<Operation::WRITE_DATASET> :
public AbstractParameter
483 Parameter() =
default;
485 Parameter(Parameter &&) =
default;
486 Parameter(Parameter
const &) =
delete;
487 Parameter &operator=(Parameter &&) =
default;
488 Parameter &operator=(Parameter
const &) =
delete;
490 std::unique_ptr<AbstractParameter> to_heap() &&
override
492 return std::unique_ptr<AbstractParameter>(
493 new Parameter<Operation::WRITE_DATASET>(std::move(*
this)));
498 Datatype dtype = Datatype::UNDEFINED;
503struct OPENPMDAPI_EXPORT
504 Parameter<Operation::READ_DATASET> :
public AbstractParameter
506 Parameter() =
default;
507 Parameter(Parameter &&) =
default;
508 Parameter(Parameter
const &) =
default;
509 Parameter &operator=(Parameter &&) =
default;
510 Parameter &operator=(Parameter
const &) =
default;
512 std::unique_ptr<AbstractParameter> to_heap() &&
override
514 return std::unique_ptr<AbstractParameter>(
515 new Parameter<Operation::READ_DATASET>(std::move(*
this)));
520 Datatype dtype = Datatype::UNDEFINED;
521 std::shared_ptr<void> data =
nullptr;
525struct OPENPMDAPI_EXPORT
526 Parameter<Operation::LIST_DATASETS> :
public AbstractParameter
528 Parameter() =
default;
529 Parameter(Parameter &&) =
default;
530 Parameter(Parameter
const &) =
default;
531 Parameter &operator=(Parameter &&) =
default;
532 Parameter &operator=(Parameter
const &) =
default;
534 std::unique_ptr<AbstractParameter> to_heap() &&
override
536 return std::unique_ptr<AbstractParameter>(
537 new Parameter<Operation::LIST_DATASETS>(std::move(*
this)));
540 std::shared_ptr<std::vector<std::string>> datasets =
541 std::make_shared<std::vector<std::string>>();
545struct OPENPMDAPI_EXPORT
554 std::unique_ptr<AbstractParameter> to_heap() &&
override
556 return std::unique_ptr<AbstractParameter>(
563 Datatype dtype = Datatype::UNDEFINED;
568 bool backendManagedBuffer =
false;
569 unsigned viewIndex = 0;
572 std::shared_ptr<OutParameters> out = std::make_shared<OutParameters>();
576struct OPENPMDAPI_EXPORT
577 Parameter<Operation::DELETE_ATT> :
public AbstractParameter
579 Parameter() =
default;
580 Parameter(Parameter &&) =
default;
581 Parameter(Parameter
const &) =
default;
582 Parameter &operator=(Parameter &&) =
default;
583 Parameter &operator=(Parameter
const &) =
default;
585 std::unique_ptr<AbstractParameter> to_heap() &&
override
587 return std::unique_ptr<AbstractParameter>(
588 new Parameter<Operation::DELETE_ATT>(std::move(*
this)));
591 std::string name =
"";
595struct OPENPMDAPI_EXPORT
596 Parameter<Operation::WRITE_ATT> :
public AbstractParameter
598 Parameter() =
default;
599 Parameter(Parameter &&) =
default;
600 Parameter(Parameter
const &) =
default;
601 Parameter &operator=(Parameter &&) =
default;
602 Parameter &operator=(Parameter
const &) =
default;
604 std::unique_ptr<AbstractParameter> to_heap() &&
override
606 return std::unique_ptr<AbstractParameter>(
607 new Parameter<Operation::WRITE_ATT>(std::move(*
this)));
610 std::string name =
"";
611 Datatype dtype = Datatype::UNDEFINED;
618 enum class ChangesOverSteps
624 ChangesOverSteps changesOverSteps = ChangesOverSteps::No;
627 template <
typename T>
628 void setResource(
T val);
629 template <
typename variant_t>
630 variant_t
const &resource()
const;
634struct OPENPMDAPI_EXPORT
635 Parameter<Operation::READ_ATT> :
public AbstractParameter
637 Parameter() =
default;
638 Parameter(Parameter &&) =
default;
639 Parameter(Parameter
const &) =
default;
640 Parameter &operator=(Parameter &&) =
default;
641 Parameter &operator=(Parameter
const &) =
default;
643 std::unique_ptr<AbstractParameter> to_heap() &&
override
645 return std::unique_ptr<AbstractParameter>(
646 new Parameter<Operation::READ_ATT>(std::move(*
this)));
649 std::string name =
"";
650 std::shared_ptr<Datatype> dtype = std::make_shared<Datatype>();
653 std::shared_ptr<std::any> m_resource = std::make_shared<std::any>();
654 template <
typename variant_t>
655 variant_t
const &resource()
const;
656 template <
typename T>
657 void setResource(
T val);
661struct OPENPMDAPI_EXPORT
662 Parameter<Operation::READ_ATT_ALLSTEPS> :
public AbstractParameter
664 Parameter() =
default;
665 Parameter(Parameter &&) =
default;
666 Parameter(Parameter
const &) =
default;
667 Parameter &operator=(Parameter &&) =
default;
668 Parameter &operator=(Parameter
const &) =
default;
670 std::unique_ptr<AbstractParameter> to_heap() &&
override
672 return std::unique_ptr<AbstractParameter>(
673 new Parameter<Operation::READ_ATT_ALLSTEPS>(std::move(*
this)));
676 std::string name =
"";
677 std::shared_ptr<Datatype> dtype = std::make_shared<Datatype>();
680 std::shared_ptr<std::any> m_resource = std::make_shared<std::any>();
681 template <
typename variant_t>
682 variant_t
const &resource()
const;
683 template <
typename variant_t>
684 variant_t &resource();
685 template <
typename T>
686 void setResource(std::vector<T> val);
690struct OPENPMDAPI_EXPORT
691 Parameter<Operation::LIST_ATTS> :
public AbstractParameter
693 Parameter() =
default;
694 Parameter(Parameter &&) =
default;
695 Parameter(Parameter
const &) =
default;
696 Parameter &operator=(Parameter &&) =
default;
697 Parameter &operator=(Parameter
const &) =
default;
699 std::unique_ptr<AbstractParameter> to_heap() &&
override
701 return std::unique_ptr<AbstractParameter>(
702 new Parameter<Operation::LIST_ATTS>(std::move(*
this)));
705 std::shared_ptr<std::vector<std::string>> attributes =
706 std::make_shared<std::vector<std::string>>();
710struct OPENPMDAPI_EXPORT
711 Parameter<Operation::ADVANCE> :
public AbstractParameter
713 Parameter() =
default;
714 Parameter(Parameter &&) =
default;
715 Parameter(Parameter
const &) =
default;
716 Parameter &operator=(Parameter &&) =
default;
717 Parameter &operator=(Parameter
const &) =
default;
719 std::unique_ptr<AbstractParameter> to_heap() &&
override
721 return std::unique_ptr<AbstractParameter>(
722 new Parameter<Operation::ADVANCE>(std::move(*
this)));
727 std::optional<size_t> step;
739 std::variant<AdvanceMode, StepSelection>
mode;
740 bool isThisStepMandatory =
false;
742 std::shared_ptr<AdvanceStatus> status =
747struct OPENPMDAPI_EXPORT
748 Parameter<Operation::AVAILABLE_CHUNKS> :
public AbstractParameter
750 Parameter() =
default;
751 Parameter(Parameter &&) =
default;
752 Parameter(Parameter
const &) =
default;
753 Parameter &operator=(Parameter &&) =
default;
754 Parameter &operator=(Parameter
const &) =
default;
756 std::unique_ptr<AbstractParameter> to_heap() &&
override
758 return std::unique_ptr<AbstractParameter>(
759 new Parameter<Operation::AVAILABLE_CHUNKS>(std::move(*
this)));
763 std::shared_ptr<ChunkTable> chunks = std::make_shared<ChunkTable>();
767struct OPENPMDAPI_EXPORT
768 Parameter<Operation::DEREGISTER> :
public AbstractParameter
770 Parameter(
void const *ptr_in) : former_parent(ptr_in)
773 Parameter(Parameter
const &) =
default;
774 Parameter(Parameter &&) =
default;
776 Parameter &operator=(Parameter
const &) =
default;
777 Parameter &operator=(Parameter &&) =
default;
779 std::unique_ptr<AbstractParameter> to_heap() &&
override
781 return std::make_unique<Parameter<Operation::DEREGISTER>>(
786 void const *former_parent =
nullptr;
790struct OPENPMDAPI_EXPORT Parameter<Operation::TOUCH> :
public AbstractParameter
792 explicit Parameter() =
default;
794 Parameter(Parameter
const &) =
default;
795 Parameter(Parameter &&) =
default;
797 Parameter &operator=(Parameter
const &) =
default;
798 Parameter &operator=(Parameter &&) =
default;
800 std::unique_ptr<AbstractParameter> to_heap() &&
override
802 return std::make_unique<Parameter<Operation::TOUCH>>(std::move(*
this));
807struct OPENPMDAPI_EXPORT
808 Parameter<Operation::SET_WRITTEN> :
public AbstractParameter
810 explicit Parameter() =
default;
812 Parameter(Parameter
const &) =
default;
813 Parameter(Parameter &&) =
default;
815 Parameter &operator=(Parameter
const &) =
default;
816 Parameter &operator=(Parameter &&) =
default;
818 std::unique_ptr<AbstractParameter> to_heap() &&
override
820 return std::make_unique<Parameter<Operation::SET_WRITTEN>>(
824 bool target_status =
false;
846 template <Operation op>
848 : writable{w}, operation{op}, parameter{
std::move(p).to_heap()}
851 template <Operation op>
853 : writable{getWritable(a)}
855 , parameter{
std::move(p).to_heap()}
858 IOTask(IOTask
const &other);
859 IOTask(IOTask &&other)
noexcept;
860 IOTask &operator=(IOTask
const &other);
861 IOTask &operator=(IOTask &&other)
noexcept;
865 std::shared_ptr<AbstractParameter> parameter;
Layer to manage storage of attributes associated with file objects.
Definition Attributable.hpp:222
Definition Dataset.hpp:38
std::string options
backend-dependent JSON configuration
Definition Dataset.hpp:96
Self-contained description of a single IO operation.
Definition IOTask.hpp:836
IOTask(Writable *w, Parameter< op > p)
Constructor for self-contained description of single IO operation.
Definition IOTask.hpp:847
Layer to mirror structure of logical data and persistent data in file.
Definition Writable.hpp:76
Class to handle default and dataset-specific JSON configurations.
Definition JSONMatcher.hpp:89
Public definitions of openPMD-api.
Definition Date.cpp:29
@ OK
stream goes on
Definition Streaming.hpp:33
@ T
time
Definition UnitDimension.hpp:41
Datatype
Concrete datatype of an object available at runtime.
Definition Datatype.hpp:51
OPENPMDAPI_EXPORT_ENUM_CLASS(Operation)
Type of IO operation between logical and persistent data.
Definition IOTask.hpp:56
Definition IOTask.hpp:123
Definition IOTask.hpp:102
static void warnUnusedParameters(TracingJSON &, std::string const ¤tBackendName, std::string const &warningMessage)
Warn about unused JSON paramters.
Definition IOTask.hpp:726
std::variant< AdvanceMode, StepSelection > mode
AdvanceMode: Is one of BeginStep/EndStep.
Definition IOTask.hpp:739
Definition IOTask.hpp:567
Typesafe description of all required arguments for a specified Operation.
Definition IOTask.hpp:148