00001
00002
00003
00004
00005
00006
00007 #ifndef synaps_inout_maple_H_
00008 #define synaps_inout_maple_H_
00009
00010 #include <iostream>
00011 #include <complex>
00012 #include <synaps/init.h>
00013
00014 __BEGIN_NAMESPACE_SYNAPS
00015
00017 namespace maple
00018 {
00019
00021 class ostream {
00022 public:
00023 ostream(std::ostream& os): chl(os) { };
00024 std::ostream & chl;
00025 };
00026
00028 template<class OSTREAM, class X>
00029 OSTREAM& print(OSTREAM & os, const X & x) {os.chl<<x; return(os);}
00030
00032 template<class OSTREAM, class C>
00033 OSTREAM & print(OSTREAM& os, const std::complex<C> & c) {
00034 print(os, c.real());
00035 if(c.imag() !=0) {
00036 os<<"+I* ";
00037 print(os,c.imag());
00038 }
00039 return(os);
00040 }
00041
00042 }
00043
00044 namespace maple {
00045 namespace VECTOR
00046 {
00047 template<class OSTREAM, class R>
00048 OSTREAM& print(OSTREAM& os, const R &V)
00049 {
00050 os << "linalg[vector]([";
00051 maple::print(os,V[0]);
00052 for(unsigned int i = 1; i < V.size(); i++) {
00053 os<<","; maple::print(os,V[i]);
00054 }
00055 os <<"])";
00056 return os;
00057 }
00058 }
00059 }
00060
00061 template<class C,class R> struct VectDse;
00062
00063 namespace maple
00064 {
00066 template<class OSTREAM, class C,class R>
00067 OSTREAM& print (OSTREAM& os, const VectDse<C,R> &V)
00068 {
00069 return maple::VECTOR::print(os, V);
00070 }
00071 }
00072
00073 namespace maple
00074 {
00075 namespace MATRIX
00076 {
00077 template <class OSTREAM, class R>
00078 inline OSTREAM & print(OSTREAM & os,const R & M)
00079 {
00080 using namespace maple;
00081 typedef typename R::size_type size_type;
00082 if(M.nbrow()) {
00083 os << "linalg[matrix](" << M.nbrow()<< "," << M.nbcol() << ", [";
00084 for(size_type i = 0; i < M.nbrow()-1; i++) {
00085 os << "[" ;
00086 for(size_type j = 0; j < M.nbcol()-1; j++)
00087 os << M(i, j) << ",";
00088 os << M(i, M.nbcol()-1) << "], ";
00089 }
00090 os << "[" ;
00091 for(size_type j = 0; j < M.nbcol()-1; j++) os<<M(M.nbrow()-1, j)<<',';
00092 os << M(M.nbrow()-1, M.nbcol()-1) << "] ])";
00093 }
00094 return os;
00095 }
00096 }
00097 }
00098
00099
00100 template<class C, class R> struct MatrDse;
00101
00103 template<class C,class R>
00104 maple::ostream& operator<< (maple::ostream& os, const MatrDse<C,R> &M) {
00105 return maple::MATRIX::print(os,M);
00106 }
00107
00108 template<class R> struct MatrStr;
00109
00111 template<class R>
00112 maple::ostream& operator<< (maple::ostream& os, const MatrStr<R> &M) {
00113 return maple::MATRIX::print(os,M);
00114 }
00115
00116 template<class C,class R> struct MatrSps;
00117
00119 template<class C, class R>
00120 maple::ostream& operator<< (maple::ostream& os, const MatrSps<C,R> &M) {
00121 return maple::MATRIX::print(os,M);
00122 }
00123
00124 maple::ostream& operator<< (maple::ostream& os, std::ostream& s(std::ostream &))
00125 {
00126 maple::print(os,";"); maple::print(os,s); return os;
00127 }
00128
00129 template<class T>
00130 maple::ostream & operator<< (maple::ostream& os, T t)
00131 {
00132 using namespace maple;
00133 print(os,t); return(os);
00134 }
00135
00137 maple::ostream cmaple(std::cout);
00138
00139 __END_NAMESPACE_SYNAPS
00140
00141 #endif //synaps_inout_maple_H_