openPMD-api
IOTask.hpp
1 /* Copyright 2017-2021 Fabian Koller
2  *
3  * This file is part of openPMD-api.
4  *
5  * openPMD-api is free software: you can redistribute it and/or modify
6  * it under the terms of of either the GNU General Public License or
7  * the GNU Lesser General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * openPMD-api is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License and the GNU Lesser General Public License
15  * for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * and the GNU Lesser General Public License along with openPMD-api.
19  * If not, see <http://www.gnu.org/licenses/>.
20  */
21 #pragma once
22 
23 #include "openPMD/ChunkInfo.hpp"
24 #include "openPMD/Dataset.hpp"
25 #include "openPMD/IterationEncoding.hpp"
26 #include "openPMD/Streaming.hpp"
27 #include "openPMD/auxiliary/Export.hpp"
28 #include "openPMD/auxiliary/Memory.hpp"
29 #include "openPMD/auxiliary/Variant.hpp"
30 #include "openPMD/backend/Attribute.hpp"
31 #include "openPMD/backend/ParsePreference.hpp"
32 
33 #include <cstddef>
34 #include <map>
35 #include <memory>
36 #include <string>
37 #include <utility>
38 #include <variant>
39 #include <vector>
40 
41 namespace openPMD
42 {
43 class Attributable;
44 class Writable;
45 
46 Writable *getWritable(Attributable *);
47 
51  CREATE_FILE,
52  CHECK_FILE,
53  OPEN_FILE,
54  CLOSE_FILE,
55  DELETE_FILE,
56 
57  CREATE_PATH,
58  CLOSE_PATH,
59  OPEN_PATH,
60  DELETE_PATH,
61  LIST_PATHS,
62 
63  CREATE_DATASET,
64  EXTEND_DATASET,
65  OPEN_DATASET,
66  DELETE_DATASET,
67  WRITE_DATASET,
68  READ_DATASET,
69  LIST_DATASETS,
70  GET_BUFFER_VIEW,
71 
72  DELETE_ATT,
73  WRITE_ATT,
74  READ_ATT,
75  LIST_ATTS,
76 
77  ADVANCE,
78  AVAILABLE_CHUNKS,
79  DEREGISTER,
80  TOUCH,
81  SET_WRITTEN
82 }; // note: if you change the enum members here, please update
83  // docs/source/dev/design.rst
84 
85 namespace internal
86 {
87  /*
88  * The returned strings are compile-time constants, so no worries about
89  * pointer validity.
90  */
91  OPENPMDAPI_EXPORT std::string operationAsString(Operation);
92 } // namespace internal
93 
94 struct OPENPMDAPI_EXPORT AbstractParameter
95 {
96  virtual ~AbstractParameter() = default;
97  AbstractParameter() = default;
98 
99  virtual std::unique_ptr<AbstractParameter> to_heap() && = 0;
100 
101 protected:
102  // avoid object slicing
103  // by allow only child classes to use these things for defining their own
104  // copy/move constructors/assignment operators
105  AbstractParameter(const AbstractParameter &) = default;
106  AbstractParameter &operator=(const AbstractParameter &) = default;
107  AbstractParameter(AbstractParameter &&) = default;
108  AbstractParameter &operator=(AbstractParameter &&) = default;
109 };
110 
120 template <Operation>
121 struct OPENPMDAPI_EXPORT Parameter : public AbstractParameter
122 {
123  Parameter() = delete;
124  Parameter(Parameter const &) = delete;
125  Parameter(Parameter &&) = delete;
126 };
127 
128 template <>
129 struct OPENPMDAPI_EXPORT Parameter<Operation::CREATE_FILE>
130  : public AbstractParameter
131 {
132  Parameter() = default;
133  Parameter(Parameter &&) = default;
134  Parameter(Parameter const &) = default;
135  Parameter &operator=(Parameter &&) = default;
136  Parameter &operator=(Parameter const &) = default;
137 
138  std::unique_ptr<AbstractParameter> to_heap() && override
139  {
140  return std::unique_ptr<AbstractParameter>(
141  new Parameter<Operation::CREATE_FILE>(std::move(*this)));
142  }
143 
144  std::string name = "";
145 };
146 
147 template <>
148 struct OPENPMDAPI_EXPORT Parameter<Operation::CHECK_FILE>
149  : public AbstractParameter
150 {
151  Parameter() = default;
152  Parameter(Parameter &&) = default;
153  Parameter(Parameter const &) = default;
154  Parameter &operator=(Parameter &&) = default;
155  Parameter &operator=(Parameter const &) = default;
156 
157  std::unique_ptr<AbstractParameter> to_heap() && override
158  {
159  return std::unique_ptr<AbstractParameter>(
160  new Parameter<Operation::CHECK_FILE>(std::move(*this)));
161  }
162 
163  std::string name = "";
164  enum class FileExists
165  {
166  DontKnow,
167  Yes,
168  No
169  };
170  std::shared_ptr<FileExists> fileExists =
171  std::make_shared<FileExists>(FileExists::DontKnow);
172 };
173 
174 template <>
175 struct OPENPMDAPI_EXPORT Parameter<Operation::OPEN_FILE>
176  : public AbstractParameter
177 {
178  Parameter() = default;
179  Parameter(Parameter &&) = default;
180  Parameter(Parameter const &) = default;
181  Parameter &operator=(Parameter &&) = default;
182  Parameter &operator=(Parameter const &) = default;
183 
184  std::unique_ptr<AbstractParameter> to_heap() && override
185  {
186  return std::unique_ptr<AbstractParameter>(
187  new Parameter<Operation::OPEN_FILE>(std::move(*this)));
188  }
189 
190  std::string name = "";
191  using ParsePreference = internal::ParsePreference;
192  std::shared_ptr<ParsePreference> out_parsePreference =
193  std::make_shared<ParsePreference>(ParsePreference::UpFront);
194 };
195 
196 template <>
197 struct OPENPMDAPI_EXPORT Parameter<Operation::CLOSE_FILE>
198  : public AbstractParameter
199 {
200  Parameter() = default;
201  Parameter(Parameter &&) = default;
202  Parameter(Parameter const &) = default;
203  Parameter &operator=(Parameter &&) = default;
204  Parameter &operator=(Parameter const &) = default;
205 
206  std::unique_ptr<AbstractParameter> to_heap() && override
207  {
208  return std::unique_ptr<AbstractParameter>(
209  new Parameter<Operation::CLOSE_FILE>(std::move(*this)));
210  }
211 };
212 
213 template <>
214 struct OPENPMDAPI_EXPORT Parameter<Operation::DELETE_FILE>
215  : public AbstractParameter
216 {
217  Parameter() = default;
218  Parameter(Parameter &&) = default;
219  Parameter(Parameter const &) = default;
220  Parameter &operator=(Parameter &&) = default;
221  Parameter &operator=(Parameter const &) = default;
222 
223  std::unique_ptr<AbstractParameter> to_heap() && override
224  {
225  return std::unique_ptr<AbstractParameter>(
226  new Parameter<Operation::DELETE_FILE>(std::move(*this)));
227  }
228 
229  std::string name = "";
230 };
231 
232 template <>
233 struct OPENPMDAPI_EXPORT Parameter<Operation::CREATE_PATH>
234  : public AbstractParameter
235 {
236  Parameter() = default;
237  Parameter(Parameter &&) = default;
238  Parameter(Parameter const &) = default;
239  Parameter &operator=(Parameter &&) = default;
240  Parameter &operator=(Parameter const &) = default;
241 
242  std::unique_ptr<AbstractParameter> to_heap() && override
243  {
244  return std::unique_ptr<AbstractParameter>(
245  new Parameter<Operation::CREATE_PATH>(std::move(*this)));
246  }
247 
248  std::string path = "";
249 };
250 
251 template <>
252 struct OPENPMDAPI_EXPORT Parameter<Operation::CLOSE_PATH>
253  : public AbstractParameter
254 {
255  Parameter() = default;
256  Parameter(Parameter &&) = default;
257  Parameter(Parameter const &) = default;
258  Parameter &operator=(Parameter &&) = default;
259  Parameter &operator=(Parameter const &) = default;
260 
261  std::unique_ptr<AbstractParameter> to_heap() && override
262  {
263  return std::unique_ptr<AbstractParameter>(
264  new Parameter<Operation::CLOSE_PATH>(std::move(*this)));
265  }
266 };
267 
268 template <>
269 struct OPENPMDAPI_EXPORT Parameter<Operation::OPEN_PATH>
270  : public AbstractParameter
271 {
272  Parameter() = default;
273  Parameter(Parameter &&) = default;
274  Parameter(Parameter const &) = default;
275  Parameter &operator=(Parameter &&) = default;
276  Parameter &operator=(Parameter const &) = default;
277 
278  std::unique_ptr<AbstractParameter> to_heap() && override
279  {
280  return std::unique_ptr<AbstractParameter>(
281  new Parameter<Operation::OPEN_PATH>(std::move(*this)));
282  }
283 
284  std::string path = "";
285 };
286 
287 template <>
288 struct OPENPMDAPI_EXPORT Parameter<Operation::DELETE_PATH>
289  : public AbstractParameter
290 {
291  Parameter() = default;
292  Parameter(Parameter &&) = default;
293  Parameter(Parameter const &) = default;
294  Parameter &operator=(Parameter &&) = default;
295  Parameter &operator=(Parameter const &) = default;
296 
297  std::unique_ptr<AbstractParameter> to_heap() && override
298  {
299  return std::unique_ptr<AbstractParameter>(
300  new Parameter<Operation::DELETE_PATH>(std::move(*this)));
301  }
302 
303  std::string path = "";
304 };
305 
306 template <>
307 struct OPENPMDAPI_EXPORT Parameter<Operation::LIST_PATHS>
308  : public AbstractParameter
309 {
310  Parameter() = default;
311  Parameter(Parameter &&) = default;
312  Parameter(Parameter const &) = default;
313  Parameter &operator=(Parameter &&) = default;
314  Parameter &operator=(Parameter const &) = default;
315 
316  std::unique_ptr<AbstractParameter> to_heap() && override
317  {
318  return std::unique_ptr<AbstractParameter>(
319  new Parameter<Operation::LIST_PATHS>(std::move(*this)));
320  }
321 
322  std::shared_ptr<std::vector<std::string>> paths =
323  std::make_shared<std::vector<std::string>>();
324 };
325 
326 template <>
327 struct OPENPMDAPI_EXPORT Parameter<Operation::CREATE_DATASET>
328  : public AbstractParameter
329 {
330  Parameter() = default;
331  Parameter(Parameter &&) = default;
332  Parameter(Parameter const &) = default;
333  Parameter &operator=(Parameter &&) = default;
334  Parameter &operator=(Parameter const &) = default;
335 
336  std::unique_ptr<AbstractParameter> to_heap() && override
337  {
338  return std::unique_ptr<AbstractParameter>(
339  new Parameter<Operation::CREATE_DATASET>(std::move(*this)));
340  }
341 
342  std::string name = "";
343  Extent extent = {};
344  Datatype dtype = Datatype::UNDEFINED;
345  std::string options = "{}";
346  std::optional<size_t> joinedDimension;
347 
354  template <typename TracingJSON>
355  static void warnUnusedParameters(
356  TracingJSON &,
357  std::string const &currentBackendName,
358  std::string const &warningMessage);
359 };
360 
361 template <>
362 struct OPENPMDAPI_EXPORT Parameter<Operation::EXTEND_DATASET>
363  : public AbstractParameter
364 {
365  Parameter() = default;
366  Parameter(Parameter &&) = default;
367  Parameter(Parameter const &) = default;
368  Parameter &operator=(Parameter &&) = default;
369  Parameter &operator=(Parameter const &) = default;
370 
371  std::unique_ptr<AbstractParameter> to_heap() && override
372  {
373  return std::unique_ptr<AbstractParameter>(
374  new Parameter<Operation::EXTEND_DATASET>(std::move(*this)));
375  }
376 
377  Extent extent = {};
378 };
379 
380 template <>
381 struct OPENPMDAPI_EXPORT Parameter<Operation::OPEN_DATASET>
382  : public AbstractParameter
383 {
384  Parameter() = default;
385  Parameter(Parameter &&) = default;
386  Parameter(Parameter const &) = default;
387  Parameter &operator=(Parameter &&) = default;
388  Parameter &operator=(Parameter const &) = default;
389 
390  std::unique_ptr<AbstractParameter> to_heap() && override
391  {
392  return std::unique_ptr<AbstractParameter>(
393  new Parameter<Operation::OPEN_DATASET>(std::move(*this)));
394  }
395 
396  std::string name = "";
397  std::shared_ptr<Datatype> dtype = std::make_shared<Datatype>();
398  std::shared_ptr<Extent> extent = std::make_shared<Extent>();
399 };
400 
401 template <>
402 struct OPENPMDAPI_EXPORT Parameter<Operation::DELETE_DATASET>
403  : public AbstractParameter
404 {
405  Parameter() = default;
406  Parameter(Parameter &&) = default;
407  Parameter(Parameter const &) = default;
408  Parameter &operator=(Parameter &&) = default;
409  Parameter &operator=(Parameter const &) = default;
410 
411  std::unique_ptr<AbstractParameter> to_heap() && override
412  {
413  return std::unique_ptr<AbstractParameter>(
414  new Parameter<Operation::DELETE_DATASET>(std::move(*this)));
415  }
416 
417  std::string name = "";
418 };
419 
420 template <>
421 struct OPENPMDAPI_EXPORT Parameter<Operation::WRITE_DATASET>
422  : public AbstractParameter
423 {
424  Parameter() = default;
425 
426  Parameter(Parameter &&) = default;
427  Parameter(Parameter const &) = delete;
428  Parameter &operator=(Parameter &&) = default;
429  Parameter &operator=(Parameter const &) = delete;
430 
431  std::unique_ptr<AbstractParameter> to_heap() && override
432  {
433  return std::unique_ptr<AbstractParameter>(
434  new Parameter<Operation::WRITE_DATASET>(std::move(*this)));
435  }
436 
437  Extent extent = {};
438  Offset offset = {};
439  Datatype dtype = Datatype::UNDEFINED;
441 };
442 
443 template <>
444 struct OPENPMDAPI_EXPORT Parameter<Operation::READ_DATASET>
445  : public AbstractParameter
446 {
447  Parameter() = default;
448  Parameter(Parameter &&) = default;
449  Parameter(Parameter const &) = default;
450  Parameter &operator=(Parameter &&) = default;
451  Parameter &operator=(Parameter const &) = default;
452 
453  std::unique_ptr<AbstractParameter> to_heap() && override
454  {
455  return std::unique_ptr<AbstractParameter>(
456  new Parameter<Operation::READ_DATASET>(std::move(*this)));
457  }
458 
459  Extent extent = {};
460  Offset offset = {};
461  Datatype dtype = Datatype::UNDEFINED;
462  std::shared_ptr<void> data = nullptr;
463 };
464 
465 template <>
466 struct OPENPMDAPI_EXPORT Parameter<Operation::LIST_DATASETS>
467  : public AbstractParameter
468 {
469  Parameter() = default;
470  Parameter(Parameter &&) = default;
471  Parameter(Parameter const &) = default;
472  Parameter &operator=(Parameter &&) = default;
473  Parameter &operator=(Parameter const &) = default;
474 
475  std::unique_ptr<AbstractParameter> to_heap() && override
476  {
477  return std::unique_ptr<AbstractParameter>(
478  new Parameter<Operation::LIST_DATASETS>(std::move(*this)));
479  }
480 
481  std::shared_ptr<std::vector<std::string>> datasets =
482  std::make_shared<std::vector<std::string>>();
483 };
484 
485 template <>
486 struct OPENPMDAPI_EXPORT Parameter<Operation::GET_BUFFER_VIEW>
487  : public AbstractParameter
488 {
489  Parameter() = default;
490  Parameter(Parameter &&) = default;
491  Parameter(Parameter const &) = default;
492  Parameter &operator=(Parameter &&) = default;
493  Parameter &operator=(Parameter const &) = default;
494 
495  std::unique_ptr<AbstractParameter> to_heap() && override
496  {
497  return std::unique_ptr<AbstractParameter>(
498  new Parameter<Operation::GET_BUFFER_VIEW>(std::move(*this)));
499  }
500 
501  // in parameters
502  Offset offset;
503  Extent extent;
504  Datatype dtype = Datatype::UNDEFINED;
505  bool update = false;
506  // out parameters
507  struct OutParameters
508  {
509  bool backendManagedBuffer = false;
510  unsigned viewIndex = 0;
511  void *ptr = nullptr;
512  };
513  std::shared_ptr<OutParameters> out = std::make_shared<OutParameters>();
514 };
515 
516 template <>
517 struct OPENPMDAPI_EXPORT Parameter<Operation::DELETE_ATT>
518  : public AbstractParameter
519 {
520  Parameter() = default;
521  Parameter(Parameter &&) = default;
522  Parameter(Parameter const &) = default;
523  Parameter &operator=(Parameter &&) = default;
524  Parameter &operator=(Parameter const &) = default;
525 
526  std::unique_ptr<AbstractParameter> to_heap() && override
527  {
528  return std::unique_ptr<AbstractParameter>(
529  new Parameter<Operation::DELETE_ATT>(std::move(*this)));
530  }
531 
532  std::string name = "";
533 };
534 
535 template <>
536 struct OPENPMDAPI_EXPORT Parameter<Operation::WRITE_ATT>
537  : public AbstractParameter
538 {
539  Parameter() = default;
540  Parameter(Parameter &&) = default;
541  Parameter(Parameter const &) = default;
542  Parameter &operator=(Parameter &&) = default;
543  Parameter &operator=(Parameter const &) = default;
544 
545  std::unique_ptr<AbstractParameter> to_heap() && override
546  {
547  return std::unique_ptr<AbstractParameter>(
548  new Parameter<Operation::WRITE_ATT>(std::move(*this)));
549  }
550 
551  std::string name = "";
552  Datatype dtype = Datatype::UNDEFINED;
553  /*
554  * If true, this attribute changes across IO steps.
555  * It should only be written in backends that support IO steps,
556  * otherwise writing should be skipped.
557  * The frontend is responsible for handling both situations.
558  */
559  enum class ChangesOverSteps
560  {
561  No,
562  Yes,
563  IfPossible
564  };
565  ChangesOverSteps changesOverSteps = ChangesOverSteps::No;
566  Attribute::resource resource;
567 };
568 
569 template <>
570 struct OPENPMDAPI_EXPORT Parameter<Operation::READ_ATT>
571  : public AbstractParameter
572 {
573  Parameter() = default;
574  Parameter(Parameter &&) = default;
575  Parameter(Parameter const &) = default;
576  Parameter &operator=(Parameter &&) = default;
577  Parameter &operator=(Parameter const &) = default;
578 
579  std::unique_ptr<AbstractParameter> to_heap() && override
580  {
581  return std::unique_ptr<AbstractParameter>(
582  new Parameter<Operation::READ_ATT>(std::move(*this)));
583  }
584 
585  std::string name = "";
586  std::shared_ptr<Datatype> dtype = std::make_shared<Datatype>();
587  std::shared_ptr<Attribute::resource> resource =
588  std::make_shared<Attribute::resource>();
589 };
590 
591 template <>
592 struct OPENPMDAPI_EXPORT Parameter<Operation::LIST_ATTS>
593  : public AbstractParameter
594 {
595  Parameter() = default;
596  Parameter(Parameter &&) = default;
597  Parameter(Parameter const &) = default;
598  Parameter &operator=(Parameter &&) = default;
599  Parameter &operator=(Parameter const &) = default;
600 
601  std::unique_ptr<AbstractParameter> to_heap() && override
602  {
603  return std::unique_ptr<AbstractParameter>(
604  new Parameter<Operation::LIST_ATTS>(std::move(*this)));
605  }
606 
607  std::shared_ptr<std::vector<std::string>> attributes =
608  std::make_shared<std::vector<std::string>>();
609 };
610 
611 template <>
612 struct OPENPMDAPI_EXPORT Parameter<Operation::ADVANCE>
613  : public AbstractParameter
614 {
615  Parameter() = default;
616  Parameter(Parameter &&) = default;
617  Parameter(Parameter const &) = default;
618  Parameter &operator=(Parameter &&) = default;
619  Parameter &operator=(Parameter const &) = default;
620 
621  std::unique_ptr<AbstractParameter> to_heap() && override
622  {
623  return std::unique_ptr<AbstractParameter>(
624  new Parameter<Operation::ADVANCE>(std::move(*this)));
625  }
626 
629  bool isThisStepMandatory = false;
631  std::shared_ptr<AdvanceStatus> status =
632  std::make_shared<AdvanceStatus>(AdvanceStatus::OK);
633 };
634 
635 template <>
636 struct OPENPMDAPI_EXPORT Parameter<Operation::AVAILABLE_CHUNKS>
637  : public AbstractParameter
638 {
639  Parameter() = default;
640  Parameter(Parameter &&) = default;
641  Parameter(Parameter const &) = default;
642  Parameter &operator=(Parameter &&) = default;
643  Parameter &operator=(Parameter const &) = default;
644 
645  std::unique_ptr<AbstractParameter> to_heap() && override
646  {
647  return std::unique_ptr<AbstractParameter>(
648  new Parameter<Operation::AVAILABLE_CHUNKS>(std::move(*this)));
649  }
650 
651  // output parameter
652  std::shared_ptr<ChunkTable> chunks = std::make_shared<ChunkTable>();
653 };
654 
655 template <>
656 struct OPENPMDAPI_EXPORT Parameter<Operation::DEREGISTER>
657  : public AbstractParameter
658 {
659  Parameter(void const *ptr_in) : former_parent(ptr_in)
660  {}
661 
662  Parameter(Parameter const &) = default;
663  Parameter(Parameter &&) = default;
664 
665  Parameter &operator=(Parameter const &) = default;
666  Parameter &operator=(Parameter &&) = default;
667 
668  std::unique_ptr<AbstractParameter> to_heap() && override
669  {
670  return std::make_unique<Parameter<Operation::DEREGISTER>>(
671  std::move(*this));
672  }
673 
674  // Just for verbose logging.
675  void const *former_parent = nullptr;
676 };
677 
678 template <>
679 struct OPENPMDAPI_EXPORT Parameter<Operation::TOUCH> : public AbstractParameter
680 {
681  explicit Parameter() = default;
682 
683  Parameter(Parameter const &) = default;
684  Parameter(Parameter &&) = default;
685 
686  Parameter &operator=(Parameter const &) = default;
687  Parameter &operator=(Parameter &&) = default;
688 
689  std::unique_ptr<AbstractParameter> to_heap() && override
690  {
691  return std::make_unique<Parameter<Operation::TOUCH>>(std::move(*this));
692  }
693 };
694 
695 template <>
696 struct OPENPMDAPI_EXPORT Parameter<Operation::SET_WRITTEN>
697  : public AbstractParameter
698 {
699  explicit Parameter() = default;
700 
701  Parameter(Parameter const &) = default;
702  Parameter(Parameter &&) = default;
703 
704  Parameter &operator=(Parameter const &) = default;
705  Parameter &operator=(Parameter &&) = default;
706 
707  std::unique_ptr<AbstractParameter> to_heap() && override
708  {
709  return std::make_unique<Parameter<Operation::SET_WRITTEN>>(
710  std::move(*this));
711  }
712 
713  bool target_status = false;
714 };
715 
724 class OPENPMDAPI_EXPORT IOTask
725 {
726 public:
735  template <Operation op>
736  explicit IOTask(Writable *w, Parameter<op> p)
737  : writable{w}, operation{op}, parameter{std::move(p).to_heap()}
738  {}
739 
740  template <Operation op>
741  explicit IOTask(Attributable *a, Parameter<op> p)
742  : writable{getWritable(a)}
743  , operation{op}
744  , parameter{std::move(p).to_heap()}
745  {}
746 
747  IOTask(IOTask const &other);
748  IOTask(IOTask &&other) noexcept;
749  IOTask &operator=(IOTask const &other);
750  IOTask &operator=(IOTask &&other) noexcept;
751 
752  Writable *writable;
753  Operation operation;
754  std::shared_ptr<AbstractParameter> parameter;
755 }; // IOTask
756 } // namespace openPMD
Layer to manage storage of attributes associated with file objects.
Definition: Attributable.hpp:155
Self-contained description of a single IO operation.
Definition: IOTask.hpp:725
IOTask(Writable *w, Parameter< op > p)
Constructor for self-contained description of single IO operation.
Definition: IOTask.hpp:736
Layer to mirror structure of logical data and persistent data in file.
Definition: Writable.hpp:75
Public definitions of openPMD-api.
Definition: Date.cpp:29
AdvanceMode
In step-based mode (i.e.
Definition: Streaming.hpp:35
@ OK
stream goes on
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:50
Definition: IOTask.hpp:95
AdvanceMode mode
input parameter
Definition: IOTask.hpp:628
static void warnUnusedParameters(TracingJSON &, std::string const &currentBackendName, std::string const &warningMessage)
Warn about unused JSON paramters.
Typesafe description of all required arguments for a specified Operation.
Definition: IOTask.hpp:122
Definition: Memory.hpp:175