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