21#ifndef _cmnDataFunctionsMatrixHelpers_h
22#define _cmnDataFunctionsMatrixHelpers_h
24template <
class _matrixType>
26 const _matrixType & source)
29 data.resize(source.size());
30 typedef _matrixType MatrixType;
31 typedef typename MatrixType::iterator
iterator;
37 iterSource != endSource;
38 ++iterSource, ++iterData) {
43template <
class _matrixType>
46 std::stringstream stringStream;
47 const size_t rows = data.rows();
48 const size_t cols = data.cols();
50 for (
size_t row = 0; row <
rows; ++row) {
55 for (
size_t col = 0; col <
cols; ++col) {
59 stringStream << cmnData<typename _matrixType::value_type>::HumanReadable(data.at(row, col));
64 return stringStream.str();
67template <
class _matrixType>
69 std::ostream & outputStream,
78 outputStream << delimiter;
84template <
class _matrixType>
86 std::istream & inputStream,
90 typedef typename _matrixType::iterator
iterator;
95 cmnDataDeSerializeTextDelimiter(inputStream, delimiter,
"std::matrix");
101template <
class _matrixType>
103 std::istream & inputStream,
104 const char delimiter)
110 cmnDataDeSerializeTextDelimiter(inputStream, delimiter,
"vctFixedSizeMatrixBase");
113 if (data.size() > 0) {
114 cmnDataDeSerializeTextDelimiter(inputStream, delimiter,
"vctFixedSizeMatrixBase");
119template <
class _matrixType>
121 std::istream & inputStream,
122 const char delimiter)
128 cmnDataDeSerializeTextDelimiter(inputStream, delimiter,
"vctFixedSizeMatrixBase");
130 if ((data.rows() !=
rows) || (data.cols() !=
cols)) {
131 cmnThrow(
"cmnDataDeSerializeText: matrix size doesn't match");
134 if (data.size() > 0) {
135 cmnDataDeSerializeTextDelimiter(inputStream, delimiter,
"vctFixedSizeMatrixBase");
140template <
class _matrixType>
142 const char delimiter,
143 const std::string & userDescription,
144 const bool serializeSize)
146 std::string prefix = (userDescription ==
"") ?
"m[" : (userDescription +
"[");
147 std::stringstream indexSuffix;
148 std::stringstream description;
149 const size_t rows = data.rows();
150 const size_t cols = data.cols();
152 description << cmnData<size_t>::SerializeDescription(
rows, delimiter, (userDescription ==
"") ?
"v.rows" : (userDescription +
".rows"))
157 for (row = 0; row <
rows; ++row) {
158 for (col = 0; col <
cols; ++col) {
159 if ((row + col) != 0 || serializeSize) {
160 description << delimiter;
163 indexSuffix.str(std::string());
164 indexSuffix << row <<
"," << col <<
"]";
165 description << cmnData<typename _matrixType::value_type>::SerializeDescription(data.Element(row, col), delimiter, prefix + indexSuffix.str());
168 return description.str();
171template <
class _matrixType>
173 std::ostream & outputStream)
179 for (; iter !=
end; ++iter) {
184template <
class _matrixType>
186 std::istream & inputStream,
192 typedef typename _matrixType::iterator
iterator;
195 for (; iter !=
end; ++iter) {
200template <
class _matrixType>
202 std::istream & inputStream,
215template <
class _matrixType>
217 std::istream & inputStream,
226 if ((data.rows() !=
rows)
227 || (data.cols() !=
cols)) {
228 cmnThrow(
"cmnDataDeSerializeBinary: matrix size doesn't match");
234template <
class _matrixType>
237 size_t result = includeSize ? 2 : 0;
238 typedef typename _matrixType::value_type
value_type;
245 for (; iter !=
end; ++iter) {
251template <
class _matrixType>
253 size_t & elementRow,
size_t & elementCol,
size_t & inElementIndex)
255 typedef typename _matrixType::value_type
value_type;
260 if (scalarNumberPerElement == 0) {
263 if (index < scalarNumber) {
264 elementIndex = index / scalarNumberPerElement;
265 inElementIndex = index % scalarNumberPerElement;
266 elementRow = elementIndex / data.cols();
267 elementCol = elementIndex % data.cols();
273 bool indexFound =
false;
274 size_t scalarCounter = 0;
275 size_t lastScalarInElement = 0;
276 size_t firstScalarInElement = 0;
277 size_t numberOfScalarsInElement = 0;
280 elementRow = elementIndex / data.cols();
281 elementCol = elementIndex % data.cols(); ;
283 firstScalarInElement = scalarCounter;
284 lastScalarInElement = scalarCounter + numberOfScalarsInElement - 1;
285 scalarCounter = lastScalarInElement + 1;
287 indexFound = ((index >= firstScalarInElement) && (index <= lastScalarInElement));
288 }
while ((!indexFound)
289 && (elementIndex < data.size()));
292 inElementIndex = index - firstScalarInElement;
298template <
class _matrixType>
301 const std::string & userDescription,
302 const bool includeSize)
305 size_t elementRow, elementCol, inElementIndex;
306 size_t realIndex = index;
307 std::stringstream suffix;
318 suffix <<
"[" << elementRow <<
',' << elementCol <<
"]";
321 cmnThrow(std::out_of_range(
"cmnDataScalarDescription: matrix index out of range"));
325template <
class _matrixType>
329 size_t elementRow, elementCol, inElementIndex;
330 size_t realIndex = index;
333 return static_cast<double>(data.rows());
336 return static_cast<double>(data.cols());
343 cmnThrow(std::out_of_range(
"cmnDataScalar: matrix index out of range"));
Definition cmnDataFunctions.h:51
static void Copy(DataType &data, const DataType &source)
static size_t DeSerializeBinary(DataType &data, const char *buffer, size_t bufferSize, const cmnDataFormat &CMN_UNUSED(localFormat), const cmnDataFormat &CMN_UNUSED(remoteFormat))
static std::string SerializeDescription(const DataType &data, const char delimiter, const std::string &userDescription="")
static bool ScalarNumberIsFixed(const DataType &data)
static size_t SerializeBinary(const DataType &data, char *buffer, size_t bufferSize)
static std::string static ScalarDescription(const DataType &data, const size_t index, const std::string &userDescription="") CISST_THROW(std double static Scalar(const DataType &data, const size_t index) CISST_THROW(std size_t ScalarNumber(const DataType &data)
Definition cmnDataFunctions.h:162
size_t CISST_EXPORT cmnDataDeSerializeBinary_size_t(size_t &data, const char *buffer, size_t bufferSize, const cmnDataFormat &localFormat, const cmnDataFormat &remoteFormat)
std::string cmnDataMatrixSerializeDescription(const _matrixType &data, const char delimiter, const std::string &userDescription, const bool serializeSize)
Definition cmnDataFunctionsMatrixHelpers.h:141
void cmnDataMatrixSerializeText(const _matrixType &data, std::ostream &outputStream, const char delimiter) CISST_THROW(std
Definition cmnDataFunctionsMatrixHelpers.h:68
double cmnDataMatrixScalar(const _matrixType &data, const size_t index, const bool includeSize) CISST_THROW(std
Definition cmnDataFunctionsMatrixHelpers.h:326
size_t cmnDataMatrixScalarNumber(const _matrixType &data, const bool includeSize)
Definition cmnDataFunctionsMatrixHelpers.h:235
void cmnDataMatrixDeSerializeTextResize(_matrixType &data, std::istream &inputStream, const char delimiter) CISST_THROW(std
Definition cmnDataFunctionsMatrixHelpers.h:102
std::string cmnDataMatrixHumanReadable(const _matrixType &data)
Definition cmnDataFunctionsMatrixHelpers.h:44
void cmnDataMatrixDeSerializeBinaryCheckSize(_matrixType &data, std::istream &inputStream, const cmnDataFormat &localFormat, const cmnDataFormat &remoteFormat) CISST_THROW(std
Definition cmnDataFunctionsMatrixHelpers.h:216
void cmnDataMatrixDeSerializeTextCheckSize(_matrixType &data, std::istream &inputStream, const char delimiter) CISST_THROW(std
Definition cmnDataFunctionsMatrixHelpers.h:120
void cmnDataMatrixSerializeBinary(const _matrixType &data, std::ostream &outputStream) CISST_THROW(std
Definition cmnDataFunctionsMatrixHelpers.h:172
bool cmnDataMatrixScalarFindInMatrixIndex(const _matrixType &data, const size_t index, size_t &elementRow, size_t &elementCol, size_t &inElementIndex)
Definition cmnDataFunctionsMatrixHelpers.h:252
std::string cmnDataMatrixScalarDescription(const _matrixType &data, const size_t index, const std::string &userDescription, const bool includeSize) CISST_THROW(std
Definition cmnDataFunctionsMatrixHelpers.h:299
void cmnDataMatrixCopy(_matrixType &data, const _matrixType &source)
Definition cmnDataFunctionsMatrixHelpers.h:25
void cmnDataMatrixDeSerializeBinaryResize(_matrixType &data, std::istream &inputStream, const cmnDataFormat &localFormat, const cmnDataFormat &remoteFormat) CISST_THROW(std
Definition cmnDataFunctionsMatrixHelpers.h:201
void cmnDataMatrixDeSerializeBinary(_matrixType &data, std::istream &inputStream, const cmnDataFormat &localFormat, const cmnDataFormat &remoteFormat) CISST_THROW(std
Definition cmnDataFunctionsMatrixHelpers.h:185
void cmnDataMatrixDeSerializeText(_matrixType &data, std::istream &inputStream, const char delimiter)
Definition cmnDataFunctionsMatrixHelpers.h:85
#define CISST_THROW(exceptionParameter)
Somewhat portable compilation warning message. This works with very recent versions of gcc (4....
Definition cmnPortability.h:559
void cmnThrow(const _exceptionType &except, cmnLogLevel lod=CMN_LOG_LEVEL_INIT_ERROR)
Definition cmnThrow.h:76
size_type cols() const
Definition vctDynamicConstMatrixBase.h:243
const_iterator end(void) const
Definition vctDynamicConstMatrixBase.h:209
OwnerType::const_iterator const_iterator
Definition vctDynamicConstMatrixBase.h:95
OwnerType::iterator iterator
Definition vctDynamicConstMatrixBase.h:92
size_type rows() const
Definition vctDynamicConstMatrixBase.h:238
const_iterator begin(void) const
Definition vctDynamicConstMatrixBase.h:203