24 #ifndef _cmnDataFunctionsMatrixHelpers_h
25 #define _cmnDataFunctionsMatrixHelpers_h
27 template <
class _matrixType>
29 const _matrixType & source)
32 data.resize(source.size());
33 typedef _matrixType MatrixType;
34 typedef typename MatrixType::iterator iterator;
35 typedef typename MatrixType::const_iterator const_iterator;
36 const const_iterator endSource = source.end();
37 const_iterator iterSource = source.begin();
38 iterator iterData = data.begin();
40 iterSource != endSource;
41 ++iterSource, ++iterData) {
46 template <
class _matrixType>
49 std::stringstream stringStream;
50 const size_t rows = data.rows();
51 const size_t cols = data.cols();
53 for (
size_t row = 0; row < rows; ++row) {
58 for (
size_t col = 0; col < cols; ++col) {
62 stringStream << cmnData<typename _matrixType::value_type>::HumanReadable(data.at(row, col));
67 return stringStream.str();
70 template <
class _matrixType>
72 std::ostream & outputStream,
74 throw (std::runtime_error)
76 typedef typename _matrixType::const_iterator const_iterator;
77 const const_iterator begin = data.begin();
78 const const_iterator end = data.end();
79 for (const_iterator iter = begin; iter != end; ++iter) {
81 outputStream << delimiter;
87 template <
class _matrixType>
89 std::istream & inputStream,
93 typedef typename _matrixType::iterator iterator;
94 const iterator begin = data.begin();
95 const iterator end = data.end();
96 for (iterator iter = begin; iter != end; ++iter) {
104 template <
class _matrixType>
106 std::istream & inputStream,
107 const char delimiter)
108 throw (std::runtime_error)
115 data.resize(rows, cols);
116 if (data.size() > 0) {
122 template <
class _matrixType>
124 std::istream & inputStream,
125 const char delimiter)
126 throw (std::runtime_error)
133 if ((data.rows() != rows) || (data.cols() != cols)) {
134 cmnThrow(
"cmnDataDeSerializeText: matrix size doesn't match");
137 if (data.size() > 0) {
143 template <
class _matrixType>
145 const char delimiter,
146 const std::string & userDescription,
147 const bool serializeSize)
149 std::string prefix = (userDescription ==
"") ?
"m[" : (userDescription +
"[");
150 std::stringstream indexSuffix;
151 std::stringstream description;
152 const size_t rows = data.rows();
153 const size_t cols = data.cols();
155 description << cmnData<size_t>::SerializeDescription(rows, delimiter, (userDescription ==
"") ?
"v.rows" : (userDescription +
".rows"))
160 for (row = 0; row < rows; ++row) {
161 for (col = 0; col < cols; ++col) {
162 if ((row + col) != 0 || serializeSize) {
163 description << delimiter;
166 indexSuffix.str(std::string());
167 indexSuffix << row <<
"," << col <<
"]";
168 description << cmnData<typename _matrixType::value_type>::SerializeDescription(data.Element(row, col), delimiter, prefix + indexSuffix.str());
171 return description.str();
174 template <
class _matrixType>
176 std::ostream & outputStream)
177 throw (std::runtime_error)
179 typedef typename _matrixType::const_iterator const_iterator;
180 const const_iterator end = data.end();
181 const_iterator iter = data.begin();
182 for (; iter != end; ++iter) {
187 template <
class _matrixType>
189 std::istream & inputStream,
192 throw (std::runtime_error)
195 typedef typename _matrixType::iterator iterator;
196 const iterator end = data.end();
197 iterator iter = data.begin();
198 for (; iter != end; ++iter) {
203 template <
class _matrixType>
205 std::istream & inputStream,
208 throw (std::runtime_error)
214 data.resize(rows, cols);
218 template <
class _matrixType>
220 std::istream & inputStream,
223 throw (std::runtime_error)
229 if ((data.rows() != rows)
230 || (data.cols() != cols)) {
231 cmnThrow(
"cmnDataDeSerializeBinary: matrix size doesn't match");
237 template <
class _matrixType>
240 size_t result = includeSize ? 2 : 0;
241 typedef typename _matrixType::value_type value_type;
245 typedef typename _matrixType::const_iterator const_iterator;
246 const const_iterator end = data.end();
247 const_iterator iter = data.begin();
248 for (; iter != end; ++iter) {
254 template <
class _matrixType>
256 size_t & elementRow,
size_t & elementCol,
size_t & inElementIndex)
258 typedef typename _matrixType::value_type value_type;
263 if (scalarNumberPerElement == 0) {
266 if (index < scalarNumber) {
267 elementIndex = index / scalarNumberPerElement;
268 inElementIndex = index % scalarNumberPerElement;
269 elementRow = elementIndex / data.cols();
270 elementCol = elementIndex % data.cols();
276 bool indexFound =
false;
277 size_t scalarCounter = 0;
278 size_t lastScalarInElement = 0;
279 size_t firstScalarInElement = 0;
280 size_t numberOfScalarsInElement = 0;
283 elementRow = elementIndex / data.cols();
284 elementCol = elementIndex % data.cols(); ;
286 firstScalarInElement = scalarCounter;
287 lastScalarInElement = scalarCounter + numberOfScalarsInElement - 1;
288 scalarCounter = lastScalarInElement + 1;
290 indexFound = ((index >= firstScalarInElement) && (index <= lastScalarInElement));
291 }
while ((!indexFound)
292 && (elementIndex < data.size()));
295 inElementIndex = index - firstScalarInElement;
301 template <
class _matrixType>
304 const std::string & userDescription,
305 const bool includeSize)
306 throw (std::out_of_range)
308 size_t elementRow, elementCol, inElementIndex;
309 size_t realIndex = index;
310 std::stringstream suffix;
321 suffix <<
"[" << elementRow <<
',' << elementCol <<
"]";
324 cmnThrow(std::out_of_range(
"cmnDataScalarDescription: matrix index out of range"));
328 template <
class _matrixType>
330 throw (std::out_of_range)
332 size_t elementRow, elementCol, inElementIndex;
333 size_t realIndex = index;
336 return static_cast<double>(data.rows());
339 return static_cast<double>(data.cols());
346 cmnThrow(std::out_of_range(
"cmnDataScalar: matrix index out of range"));
351 #endif // _cmnDataFunctionsMatrixHelpers_h
void cmnDataMatrixSerializeText(const _matrixType &data, std::ostream &outputStream, const char delimiter)
Definition: cmnDataFunctionsMatrixHelpers.h:71
double cmnDataMatrixScalar(const _matrixType &data, const size_t index, const bool includeSize)
Definition: cmnDataFunctionsMatrixHelpers.h:329
void cmnDataMatrixDeSerializeBinary(_matrixType &data, std::istream &inputStream, const cmnDataFormat &localFormat, const cmnDataFormat &remoteFormat)
Definition: cmnDataFunctionsMatrixHelpers.h:188
size_t CISST_EXPORT cmnDataDeSerializeBinary_size_t(size_t &data, const char *buffer, size_t bufferSize, const cmnDataFormat &localFormat, const cmnDataFormat &remoteFormat)
static void SerializeBinary(const DataType &data, std::ostream &outputStream)
void cmnDataMatrixDeSerializeBinaryCheckSize(_matrixType &data, std::istream &inputStream, const cmnDataFormat &localFormat, const cmnDataFormat &remoteFormat)
Definition: cmnDataFunctionsMatrixHelpers.h:219
static void SerializeText(const DataType &data, std::ostream &outputStream, const char delimiter= ',')
void cmnDataMatrixDeSerializeText(_matrixType &data, std::istream &inputStream, const char delimiter)
Definition: cmnDataFunctionsMatrixHelpers.h:88
bool cmnDataMatrixScalarFindInMatrixIndex(const _matrixType &data, const size_t index, size_t &elementRow, size_t &elementCol, size_t &inElementIndex)
Definition: cmnDataFunctionsMatrixHelpers.h:255
void cmnDataMatrixSerializeBinary(const _matrixType &data, std::ostream &outputStream)
Definition: cmnDataFunctionsMatrixHelpers.h:175
void cmnDataMatrixDeSerializeTextCheckSize(_matrixType &data, std::istream &inputStream, const char delimiter)
Definition: cmnDataFunctionsMatrixHelpers.h:123
std::string cmnDataMatrixHumanReadable(const _matrixType &data)
Definition: cmnDataFunctionsMatrixHelpers.h:47
static size_t ScalarNumber(const DataType &data)
static double Scalar(const DataType &data, const size_t index)
Definition: cmnDataFunctions.h:53
static std::string ScalarDescription(const DataType &data, const size_t index, const std::string &userDescription="")
#define cmnThrow(a)
Definition: MinimalCmn.h:4
void cmnDataMatrixDeSerializeTextResize(_matrixType &data, std::istream &inputStream, const char delimiter)
Definition: cmnDataFunctionsMatrixHelpers.h:105
void cmnDataMatrixDeSerializeBinaryResize(_matrixType &data, std::istream &inputStream, const cmnDataFormat &localFormat, const cmnDataFormat &remoteFormat)
Definition: cmnDataFunctionsMatrixHelpers.h:204
std::string cmnDataMatrixSerializeDescription(const _matrixType &data, const char delimiter, const std::string &userDescription, const bool serializeSize)
Definition: cmnDataFunctionsMatrixHelpers.h:144
static void DeSerializeText(DataType &data, std::istream &inputStream, const char delimiter= ',')
void cmnDataMatrixCopy(_matrixType &data, const _matrixType &source)
Definition: cmnDataFunctionsMatrixHelpers.h:28
static void DeSerializeBinary(DataType &data, std::istream &inputStream, const cmnDataFormat &localFormat, const cmnDataFormat &remoteFormat)
std::string cmnDataMatrixScalarDescription(const _matrixType &data, const size_t index, const std::string &userDescription, const bool includeSize)
Definition: cmnDataFunctionsMatrixHelpers.h:302
static void Copy(DataType &data, const DataType &source)
size_t cmnDataMatrixScalarNumber(const _matrixType &data, const bool includeSize)
Definition: cmnDataFunctionsMatrixHelpers.h:238
void CISST_EXPORT cmnDataDeSerializeTextDelimiter(std::istream &inputStream, const char delimiter, const char *className)