00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef __PxxPrintData_h_
00011 #define __PxxPrintData_h_
00012
00013
00014 #include "Core/Array/Pattern/ArrayFunc.h"
00015 #include "Core/Array/Pattern/PxSystem.h"
00016 #include "Core/Array/Pattern/PxxStream.h"
00017
00018 namespace Impala
00019 {
00020 namespace Core
00021 {
00022 namespace Array
00023 {
00024 namespace Pattern
00025 {
00026
00027
00028 template<class ArrayT>
00029 void
00030 PxArrayPrintElem(ArrayT* array, typename ArrayT::StorType* ptr)
00031 {
00032 for (int i=0 ; i<array->ElemSize() ; i++) {
00033 if ((i == 0) && (array->ElemSize() > 1))
00034 PX_COUT << "(";
00035 PX_COUT << *ptr++;
00036 if (i+1 < array->ElemSize())
00037 PX_COUT << ",";
00038 if ((i+1 == array->ElemSize()) && (array->ElemSize() > 1))
00039 PX_COUT << ")";
00040 }
00041 }
00042
00043
00044 template<class ArrayT>
00045 void
00046 PxPrintData(ArrayT* array, bool printBorder, int bx, int by, int width, int height)
00047 {
00048 typedef typename ArrayT::StorType StorT;
00049
00050 PX_COUT << "Array Info(1): w = " << CxArrayW(array)
00051 << ", h = " << CxArrayH(array) << PX_ENDL;
00052 PX_COUT << "Array Info(2): cw = " << CxArrayCW(array)
00053 << ", ch = " << CxArrayCH(array) << PX_ENDL;
00054 PX_COUT << "Array Info(3): bw = " << CxArrayBW(array)
00055 << ", bh = " << CxArrayBH(array) << PX_ENDL;
00056 PX_COUT << "Array Info(4): pb = " << CxArrayPB(array)
00057 << ", cpb = " << CxArrayCPB(array)
00058 << ", cpe = " << CxArrayCPE(array) << PX_ENDL;
00059 PX_COUT << "Array Info(5): sizeofStorT = "
00060 << sizeof(StorT) << PX_ENDL;
00061
00062
00063
00064
00065
00066
00067 StorT* sPtr = (printBorder) ? CxArrayPB(array, bx, by)
00068 : CxArrayCPB(array, bx, by);
00069 for (int y=0 ; y<height ; y++) {
00070 PX_COUT << " Y = " << y << " :- ";
00071 for (int x=0 ; x<width ; x++) {
00072 int off = CxArrayInc(array, x, y);
00073 StorT* p = sPtr + off;
00074 PxArrayPrintElem(array, p);
00075 PX_COUT << ", ";
00076 }
00077 PX_COUT << PX_ENDL;
00078 }
00079 }
00080
00081
00082
00083
00084
00085 template<class ArrayT>
00086 void
00087 PxArrayPrintElemOnCPU(ArrayT* array, typename ArrayT::StorType* ptr, int cpu)
00088 {
00089 for (int i=0 ; i<array->ElemSize() ; i++) {
00090 if ((i == 0) && (array->ElemSize() > 1))
00091 PX_COUT_ON(cpu) << "(";
00092 PX_COUT_ON(cpu) << *ptr++;
00093 if (i+1 < array->ElemSize())
00094 PX_COUT_ON(cpu) << ",";
00095 if ((i+1 == array->ElemSize()) && (array->ElemSize() > 1))
00096 PX_COUT_ON(cpu) << ")";
00097 }
00098 }
00099
00100
00101 template<class ArrayT>
00102 void
00103 PxPrintDataOnCPU(ArrayT* array, bool printBorder, int bx, int by, int width, int height, int cpu)
00104 {
00105 typedef typename ArrayT::StorType StorT;
00106
00107 PX_COUT_ON(cpu) << "Array sizes (" << cpu << "): cw = "
00108 << CxArrayCW(array) << ", ch = "
00109 << CxArrayCH(array) << ", bw = "
00110 << CxArrayBW(array) << ", bh = "
00111 << CxArrayBH(array) << PX_ENDL;
00112 StorT* sPtr = (printBorder) ? CxArrayPB(array, bx, by)
00113 : CxArrayCPB(array, bx, by);
00114 for (int y=0 ; y<height ; y++) {
00115 PX_COUT_ON(cpu) << " Y = " << y << " :- ";
00116 for (int x=0 ; x<width ; x++) {
00117 int off = CxArrayInc(array, x, y);
00118 StorT* p = sPtr + off;
00119 PxArrayPrintElemOnCPU(array, p, cpu);
00120 PX_COUT_ON(cpu) << ", ";
00121 }
00122 PX_COUT_ON(cpu) << PX_ENDL;
00123 }
00124 }
00125
00126
00127
00128
00129
00130 template<class ArrayT>
00131 void
00132 PxArrayPrintElemOnAll(ArrayT* array, typename ArrayT::StorType* ptr)
00133 {
00134 for (int i=0 ; i<array->ElemSize() ; i++) {
00135 if ((i == 0) && (array->ElemSize() > 1))
00136 PX_COUT_ON_ALL << "(";
00137 PX_COUT_ON_ALL << *ptr++;
00138 if (i+1 < array->ElemSize())
00139 PX_COUT_ON_ALL << ",";
00140 if ((i+1 == array->ElemSize()) && (array->ElemSize() > 1))
00141 PX_COUT_ON_ALL << ")";
00142 }
00143 }
00144
00145
00146 template<class ArrayT>
00147 void
00148 PxPrintDataOnAll(ArrayT* array, bool printBorder, int bx, int by, int width, int height)
00149 {
00150 typedef typename ArrayT::StorType StorT;
00151
00152 PX_COUT_ON_ALL << "Array sizes (" << PxMyCPU() << "): cw = "
00153 << CxArrayCW(array) << ", ch = "
00154 << CxArrayCH(array) << ", bw = "
00155 << CxArrayBW(array) << ", bh = "
00156 << CxArrayBH(array) << PX_ENDL;
00157 StorT* sPtr = (printBorder) ? CxArrayPB(array, bx, by)
00158 : CxArrayCPB(array, bx, by);
00159 for (int y=0 ; y<height ; y++) {
00160 PX_COUT_ON_ALL << " Y = " << y << " :- ";
00161 for (int x=0 ; x<width ; x++) {
00162 int off = CxArrayInc(array, x, y);
00163 StorT* p = sPtr + off;
00164 PxArrayPrintElemOnAll(array, p);
00165 PX_COUT_ON_ALL << ", ";
00166 }
00167 PX_COUT_ON_ALL << PX_ENDL;
00168 }
00169 }
00170
00171
00172
00173
00174
00175 template<class ArrayT>
00176 inline void
00177 PxPrintData(ArrayT* array, bool printBorder)
00178 {
00179 int width = (printBorder) ? CxArrayW(array) : CxArrayCW(array);
00180 int height = (printBorder) ? CxArrayH(array) : CxArrayCH(array);
00181 PxPrintData(array, printBorder, 0, 0, width, height);
00182 }
00183
00184
00185 template<class ArrayT>
00186 inline void
00187 PxPrintDataOnCPU(ArrayT* array, bool printBorder, int cpu)
00188 {
00189 int width = (printBorder) ? CxArrayW(array) : CxArrayCW(array);
00190 int height = (printBorder) ? CxArrayH(array) : CxArrayCH(array);
00191 PxPrintDataOnCPU(array, printBorder, 0, 0, width, height, cpu);
00192 }
00193
00194
00195 template<class ArrayT>
00196 inline void
00197 PxPrintDataOnAll(ArrayT* array, bool printBorder)
00198 {
00199 int width = (printBorder) ? CxArrayW(array) : CxArrayCW(array);
00200 int height = (printBorder) ? CxArrayH(array) : CxArrayCH(array);
00201 PxPrintDataOnAll(array, printBorder, 0, 0, width, height);
00202 }
00203
00204
00205 }
00206 }
00207 }
00208 }
00209
00210 #endif