00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef __OCTAVEIO_H
00014 #define __OCTAVEIO_H
00015
00016 #include <iostream>
00017 #include <fstream>
00018 #include <octave/config.h>
00019 #include <octave/Matrix.h>
00020
00021
00022
00024
00025
00026
00027 inline void operator<<(const char * s, const Matrix &i)
00028 {
00029 std::ofstream fout(s);
00030 if(!fout.is_open()){
00031 std::cerr << "Can't open : " << s << std::endl;
00032 exit(1);
00033 }
00034 fout << i.rows() << ' ' << i.cols() << std::endl;
00035 fout << i;
00036 fout.close();
00037 }
00038
00039 inline void operator<<(const std::string &str, const Matrix &i)
00040 {
00041 operator<<(str.c_str(), i);
00042 }
00043
00044 inline void operator>>(const char * s, Matrix &i)
00045 {
00046 std::ifstream fin(s);
00047 if(!fin.is_open()){
00048 std::cerr << "Can't open : " << s << std::endl;
00049 exit(1);
00050 }
00051 int rows, cols;
00052 fin >> rows >> cols;
00053 if(rows!=i.rows() || cols!=i.cols()) i.resize(rows,cols);
00054 fin >> i;
00055 fin.close();
00056 }
00057
00058
00059
00060 inline void operator>>(const std::string &str, Matrix &i)
00061 {
00062 operator>>(str.c_str(), i);
00063 }
00064
00066
00067
00068
00069 inline void operator<<(const char * s, const DiagMatrix &i)
00070 {
00071 std::ofstream fout(s);
00072 if(!fout.is_open()){
00073 std::cerr << "Can't open : " << s << std::endl;
00074 exit(1);
00075 }
00076 fout << i.rows() << ' ' << i.cols() << std::endl;
00077 fout << (ColumnVector)i;
00078 fout.close();
00079 }
00080
00081 inline void operator<<(const std::string &str, const DiagMatrix &i)
00082 {
00083 operator<<(str.c_str(), i);
00084 }
00085
00086 inline void operator>>(const char * s, DiagMatrix &i)
00087 {
00088 std::ifstream fin(s);
00089 if(!fin.is_open()){
00090 std::cerr << "Can't open : " << s << std::endl;
00091 exit(1);
00092 }
00093 int rows, cols;
00094 fin >> rows >> cols;
00095 if(rows!=i.rows() || cols!=i.cols()) i.resize(rows,cols);
00096 ColumnVector c;
00097 fin >> c;
00098 i = (DiagMatrix)c;
00099 fin.close();
00100 }
00101
00102
00103
00104 inline void operator>>(const std::string &str, DiagMatrix &i)
00105 {
00106 operator>>(str.c_str(), i);
00107 }
00108
00110
00111
00112
00114 inline void operator<<(const char * s, const RowVector &i)
00115 {
00116 std::ofstream fout(s);
00117 if(!fout.is_open()){
00118 std::cerr << "Can't open : " << s << std::endl;
00119 exit(1);
00120 }
00121 fout << i.length() << std::endl;
00122 fout << i;
00123 fout.close();
00124 }
00125
00127 inline void operator<<(const std::string &str, const RowVector &i)
00128 {
00129 operator<<(str.c_str(), i);
00130 }
00131
00133 inline void operator>>(const char * s, RowVector &i)
00134 {
00135 std::ifstream fin(s);
00136 if(!fin.is_open()){
00137 std::cerr << "Can't open : " << s << std::endl;
00138 exit(1);
00139 }
00140 int length;
00141 fin >> length;
00142 if(length!=i.length()) i.resize(length);
00143 fin >> i;
00144 fin.close();
00145 }
00146
00148 inline void operator>>(const std::string &str, RowVector &i)
00149 {
00150 operator>>(str.c_str(), i);
00151 }
00152
00154
00155
00156
00158 inline void operator<<(const char * s, const ColumnVector &i)
00159 {
00160 std::ofstream fout(s);
00161 if(!fout.is_open()){
00162 std::cerr << "Can't open : " << s << std::endl;
00163 exit(1);
00164 }
00165 fout << i.length() << std::endl;
00166 fout << i;
00167 fout.close();
00168 }
00169
00171 inline void operator<<(const std::string &str, const ColumnVector &i)
00172 {
00173 operator<<(str.c_str(), i);
00174 }
00175
00177 inline void operator>>(const char * s, ColumnVector &i)
00178 {
00179 std::ifstream fin(s);
00180 if(!fin.is_open()){
00181 std::cerr << "Can't open : " << s << std::endl;
00182 exit(1);
00183 }
00184 int length;
00185 fin >> length;
00186 if(length!=i.length()) i.resize(length);
00187 fin >> i;
00188 fin.close();
00189 }
00190
00192 inline void operator>>(const std::string &str, ColumnVector &i)
00193 {
00194 operator>>(str.c_str(), i);
00195 }
00196
00197 #endif
00198
00199