Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046 #include <new>
00047
00048 #include "FloatMatrix.h"
00049
00050 #include "Helpers/helpers.h"
00051
00052 #include <stdio.h>
00053 #include <stdlib.h>
00054 #include <string.h>
00055
00056
00057
00058
00059
00060
00061
00062 CFloatMatrix::CFloatMatrix()
00063 {
00064 columns = 0;
00065 rows = 0;
00066 data = 0;
00067 m_bOwnMemory = false;
00068 }
00069
00070 CFloatMatrix::CFloatMatrix(int nColumns, int nRows, bool bHeaderOnly)
00071 {
00072 columns = nColumns;
00073 rows = nRows;
00074
00075 if (bHeaderOnly)
00076 {
00077 data = 0;
00078 m_bOwnMemory = false;
00079 }
00080 else
00081 {
00082 data = new float[columns * rows];
00083 m_bOwnMemory = true;
00084 }
00085 }
00086
00087 CFloatMatrix::CFloatMatrix(const CFloatMatrix &matrix, bool bHeaderOnly)
00088 {
00089 columns = matrix.columns;
00090 rows = matrix.rows;
00091
00092 if (bHeaderOnly)
00093 {
00094 data = 0;
00095 m_bOwnMemory = false;
00096 }
00097 else
00098 {
00099 data = new float[columns * rows];
00100 m_bOwnMemory = true;
00101 }
00102 }
00103
00104 CFloatMatrix::CFloatMatrix(const CFloatMatrix *pMatrix, bool bHeaderOnly)
00105 {
00106 columns = pMatrix->columns;
00107 rows = pMatrix->rows;
00108
00109 if (bHeaderOnly)
00110 {
00111 data = 0;
00112 m_bOwnMemory = false;
00113 }
00114 else
00115 {
00116 data = new float[columns * rows];
00117 m_bOwnMemory = true;
00118 }
00119 }
00120
00121 CFloatMatrix::~CFloatMatrix()
00122 {
00123 FreeMemory();
00124 }
00125
00126
00127
00128
00129
00130
00131 void CFloatMatrix::FreeMemory()
00132 {
00133 if (data)
00134 {
00135 if (m_bOwnMemory)
00136 delete [] data;
00137
00138 data = 0;
00139 m_bOwnMemory = false;
00140 }
00141 }
00142
00143 bool CFloatMatrix::LoadFromFile(const char *pFileName)
00144 {
00145
00146 FILE *f = fopen(pFileName, "rb");
00147 if (!f)
00148 return false;
00149
00150 char header[30];
00151 header[29] = '\0';
00152
00153 if (fread(header, 29, 1, f) != 1)
00154 {
00155 fclose(f);
00156 return false;
00157 }
00158
00159 if (strstr(header, "MATRIX") != header)
00160 {
00161 fclose(f);
00162 return false;
00163 }
00164
00165 const int nColumns = atoi(header + 7);
00166 const int nRows = atoi(header + 18);
00167
00168 if (nColumns <= 0 || nRows <= 0)
00169 {
00170 fclose(f);
00171 return false;
00172 }
00173
00174
00175 columns = nColumns;
00176 rows = nRows;
00177 if (data && m_bOwnMemory)
00178 delete [] data;
00179
00180 data = new float[columns * rows];
00181 m_bOwnMemory = true;
00182
00183 if (fread(data, columns * rows * sizeof(float), 1, f) != 1)
00184 {
00185 fclose(f);
00186 return false;
00187 }
00188
00189 fclose(f);
00190
00191 #ifdef IVT_BIG_ENDIAN
00192 const int nWords = columns * rows;
00193 for (int i = 0; i < nWords; i++)
00194 data[i] = invert_byte_order_float(data[i]);
00195 #endif
00196
00197 return true;
00198 }
00199
00200 bool CFloatMatrix::SaveToFile(const char *pFileName)
00201 {
00202 if (!data || !rows || !columns)
00203 return false;
00204
00205 FILE *f = fopen(pFileName, "wb");
00206 if (!f)
00207 return false;
00208
00209 #ifdef IVT_BIG_ENDIAN
00210 const int nWords = columns * rows;
00211 int i;
00212 for (i = 0; i < nWords; i++)
00213 data[i] = invert_byte_order_float(data[i]);
00214 #endif
00215
00216 fprintf(f, "MATRIX %.10i %.10i ", columns, rows);
00217 if (fwrite(data, columns * rows * sizeof(float), 1, f) != 1)
00218 {
00219 fclose(f);
00220 return false;
00221 }
00222 fclose(f);
00223
00224 #ifdef IVT_BIG_ENDIAN
00225 for (i = 0; i < nWords; i++)
00226 data[i] = invert_byte_order_float(data[i]);
00227 #endif
00228
00229 return true;
00230 }
asr_ivt
Author(s): Allgeyer Tobias, Hutmacher Robin, Kleinert Daniel, Meißner Pascal, Scholz Jonas, Stöckle Patrick
autogenerated on Thu Jun 6 2019 21:46:57