00001
00002 #ifndef _3DARRAY_H
00003 #define _3DARRAY_H
00004
00005 #include "myendian.h"
00006 #include "remotesocket.h"
00007
00008 template <class Etype>
00009 inline int RemoteSocket::SendArray3D(Etype ***a, int n1, int n2, int n3)
00010 {
00011 static int elemsize = sizeof(Etype);
00012 int rowsize = elemsize*n3;
00013 int totsize = rowsize*n1*n2;
00014 unsigned char *data;
00015 ALLOC1D(&data, totsize);
00016 int ptr = 0;
00017
00018 for (int i = 0; i < n1; i++)
00019 for (int j = 0; j < n2; j++)
00020 {
00021 memcpy(&data[ptr], &a[i][j][0], rowsize);
00022 ptr += rowsize;
00023 }
00024
00025 setByteOrder(data, totsize, elemsize);
00026 SendBytes(totsize, data);
00027 FREE1D(&data, totsize);
00028
00029 return 0;
00030 }
00031
00032 template <class Etype>
00033 inline int RemoteSocket::RecvArray3D(Etype ***a, int n1, int n2, int n3)
00034 {
00035 static int elemsize = sizeof(Etype);
00036 int rowsize = elemsize*n3;
00037 int totsize = rowsize*n1*n2;
00038 unsigned char *data;
00039 ALLOC1D(&data, totsize);
00040 int ptr = 0;
00041
00042 RecvBytes(totsize, data);
00043 setByteOrder(data, totsize, elemsize);
00044
00045 for (int i = 0; i < n1; i++)
00046 for (int j = 0; j < n2; j++)
00047 {
00048 memcpy(&a[i][j][0], &data[ptr], rowsize);
00049 ptr += rowsize;
00050 }
00051
00052 FREE1D(&data, totsize);
00053
00054 return 0;
00055 }
00056
00057 #endif // _3DARRAY_H
00058