ISMRMRD
ISMRM Raw Data Format
serialization.h
Go to the documentation of this file.
1#ifndef ISMRMRDSERIALIZATION_H
2#define ISMRMRDSERIALIZATION_H
3
4#include <cstdint>
5#include <exception>
6#include <iostream>
7
8#include "ismrmrd/export.h"
9#include "ismrmrd/ismrmrd.h"
10#include "ismrmrd/waveform.h"
11#include "ismrmrd/xml.h"
12
26namespace ISMRMRD {
27
28enum ISMRMRD_MESSAGE_ID {
29 ISMRMRD_MESSAGE_UNPEEKED = 0,
30 ISMRMRD_MESSAGE_CONFIG_FILE = 1,
31 ISMRMRD_MESSAGE_CONFIG_TEXT = 2,
32 ISMRMRD_MESSAGE_HEADER = 3,
33 ISMRMRD_MESSAGE_CLOSE = 4,
34 ISMRMRD_MESSAGE_TEXT = 5,
35 ISMRMRD_MESSAGE_ACQUISITION = 1008,
36 ISMRMRD_MESSAGE_IMAGE = 1022,
37 ISMRMRD_MESSAGE_WAVEFORM = 1026
38};
39
40// A wrapper interface, which we can implement, e.g., for std::istream
42public:
43 virtual void read(char *buffer, size_t count) = 0;
44
45 virtual bool eof() = 0;
46};
47
48// A wrapper interface, which we can implement, e.g., for std::ostream
50public:
51 virtual void write(const char *buffer, size_t count) = 0;
52
53 virtual bool bad() = 0;
54};
55
56// We define a few wrapper structs here to make the serialization code a bit
57// more readable.
58struct ConfigFile {
59 char config[1024];
60};
61
62struct ConfigText {
63 std::string config_text;
64};
65
67 std::string message;
68};
69
70// serialize Acquisition to ostream
71EXPORTISMRMRD void serialize(const Acquisition &acq, WritableStreamView &ws);
72
73// serialize Image<T> to ostream
74template <typename T>
75EXPORTISMRMRD void serialize(const Image<T> &img, WritableStreamView &ws);
76
77// serialize Waveform to ostream
78EXPORTISMRMRD void serialize(const Waveform &wfm, WritableStreamView &ws);
79
80// serialize const length (1024) char array to ostream. Used for CONFIG FILE
81EXPORTISMRMRD void serialize(const ConfigFile &cfg, WritableStreamView &ws);
82
83// serialize a string
84EXPORTISMRMRD void serialize(const std::string &str, WritableStreamView &ws);
85
86// deserialize Acquisition from istream
87EXPORTISMRMRD void deserialize(Acquisition &acq, ReadableStreamView &rs);
88
89// deserialize Image<T> from istream
90template <typename T>
91EXPORTISMRMRD void deserialize(Image<T> &img, ReadableStreamView &rs);
92
93// deserialize Waveform from istream
94EXPORTISMRMRD void deserialize(Waveform &wfm, ReadableStreamView &rs);
95
96// deserialize const length (1024) char array from istream. Used for CONFIG FILE
97EXPORTISMRMRD void deserialize(ConfigFile &cfg, ReadableStreamView &rs);
98
99// deserialize a string
100EXPORTISMRMRD void deserialize(std::string &str, ReadableStreamView &rs);
101
102class ProtocolStreamClosed : public std::exception {};
103
104class EXPORTISMRMRD ProtocolSerializer {
105public:
107 void serialize(const ConfigFile &cf);
108 void serialize(const ConfigText &ct);
109 void serialize(const TextMessage &tm);
110 void serialize(const IsmrmrdHeader &hdr);
111 void serialize(const Acquisition &acq);
112 template <typename T>
113 void serialize(const Image<T> &img);
114 void serialize(const Waveform &wfm);
115 void close();
116
117protected:
118 void write_msg_id(uint16_t id);
120};
121
122class EXPORTISMRMRD ProtocolDeserializer {
123public:
125 void deserialize(ConfigFile &cf);
126 void deserialize(ConfigText &ct);
127 void deserialize(TextMessage &tm);
128 void deserialize(IsmrmrdHeader &hdr);
129 void deserialize(Acquisition &acq);
130 template <typename T>
131 void deserialize(Image<T> &img);
132 void deserialize(Waveform &wfm);
133
134 // Peek at the next data type in the stream
135 uint16_t peek();
136 int peek_image_data_type();
137
138protected:
140 uint16_t _peeked;
141 ImageHeader _peeked_image_header;
142};
143
144} // namespace ISMRMRD
145
146#endif // ISMRMRDSERIALIZATION_H
MR Acquisition type.
Definition: ismrmrd.h:604
Header for MR Image type.
Definition: ismrmrd.h:752
MR Image type.
Definition: ismrmrd.h:771
Definition: serialization.h:122
Definition: serialization.h:104
Definition: serialization.h:102
Definition: serialization.h:41
Definition: serialization.h:49
Definition: serialization.h:58
Definition: serialization.h:62
Definition: xml.h:492
Definition: serialization.h:66
Definition: waveform.h:95