|
From: <le...@us...> - 2006-11-29 20:13:09
|
Revision: 25
http://svn.sourceforge.net/qcell/?rev=25&view=rev
Author: lessm
Date: 2006-11-29 12:12:56 -0800 (Wed, 29 Nov 2006)
Log Message:
-----------
- Neighbourhood class new method add
- CalculationData class added
- binary data type not supported yet
Modified Paths:
--------------
trunk/qcell/baseheaders/Neighbourhood.h
trunk/qcell/basesources/Neighbourhood.cpp
Added Paths:
-----------
trunk/qcell/baseheaders/CalculationData.h
trunk/qcell/basesources/CalculationData.cpp
Added: trunk/qcell/baseheaders/CalculationData.h
===================================================================
--- trunk/qcell/baseheaders/CalculationData.h (rev 0)
+++ trunk/qcell/baseheaders/CalculationData.h 2006-11-29 20:12:56 UTC (rev 25)
@@ -0,0 +1,74 @@
+#ifndef _CALCULATION_DATA
+#define _CALCULATION_DATA
+
+#include <string.h>
+#include <QString>
+#include <QByteArray>
+
+class CalculationData
+{
+public:
+ enum DATA_TYPES
+ {
+ BOOL,
+ CHAR,
+ SHORT,
+ INT,
+ FLOAT,
+ DOUBLE,
+ NONE
+ };
+
+private:
+ DATA_TYPES dataType;
+ int sizeX, sizeY, sizeZ, sizeT;
+ int dimension, size;
+ char *data;
+
+protected:
+ bool resize(const char *dataPointer=NULL);
+ void * getAddressAt(int x, int y, int z, int t);
+
+public:
+
+ CalculationData();
+ ~CalculationData();
+
+ int getValueAt_i(int x);
+ int getValueAt_i(int x, int y);
+ int getValueAt_i(int x, int y, int z);
+ int getValueAt_i(int x, int y, int z, int t);
+
+ void setValueAt_i(int val, int x);
+ void setValueAt_i(int val, int x, int y);
+ void setValueAt_i(int val, int x, int y, int z);
+ void setValueAt_i(int val, int x, int y, int z, int t);
+
+ double getValueAt_d(int x);
+ double getValueAt_d(int x, int y);
+ double getValueAt_d(int x, int y, int z);
+ double getValueAt_d(int x, int y, int z, int t);
+
+ void setValueAt_d(double val, int x);
+ void setValueAt_d(double val, int x, int y);
+ void setValueAt_d(double val, int x, int y, int z);
+ void setValueAt_d(double val, int x, int y, int z, int t);
+
+ void setDataType(DATA_TYPES type = DATA_TYPES::CHAR);
+
+ bool resize(int x, const char *dataPointer=NULL);
+ bool resize(int x, int y, const char *dataPointer=NULL);
+ bool resize(int x, int y, int z, const char *dataPointer=NULL);
+ bool resize(int x, int y, int z, int t, const char *dataPointer=NULL);
+
+ int getSizeX(void);
+ int getSizeY(void);
+ int getSizeZ(void);
+ int getSizeT(void);
+ int getSizeInByte(void);
+
+ const char *getDataPointer(void);
+ void fill(const char *dataPointer);
+};
+
+#endif
\ No newline at end of file
Modified: trunk/qcell/baseheaders/Neighbourhood.h
===================================================================
--- trunk/qcell/baseheaders/Neighbourhood.h 2006-11-29 17:31:34 UTC (rev 24)
+++ trunk/qcell/baseheaders/Neighbourhood.h 2006-11-29 20:12:56 UTC (rev 25)
@@ -12,13 +12,14 @@
double dValue;
int iValue;
bool bValue;
+ int offset;
};
class Neighbourhood
{
private:
- int dimensions;
+ int dimension;
QVector<NContainer> neighbourVector;
protected:
@@ -37,20 +38,20 @@
void setNeighbourAt(int index, int x, int y, int z, int t);
void clearNeighbourhood(void);
- int getDimensions(void);
- void setDimensions(int dimensions);
+ int getDimension(void);
bool fromXmlString(QString *xmlString);
bool fromDomElement(QDomElement *xmlElement);
QString toXmlString();
int getNeighbourNumber(void);
bool getBoolValueOf(int index);
- int getIntValueOf(int index);
+ int getInValueOf(int index);
double getDoubleValueOf(int index);
+ void calculateOffsets(int sizeX, int sizeY, int sizeZ, int sizeT);
+
};
-#endif
-
+#endif
\ No newline at end of file
Added: trunk/qcell/basesources/CalculationData.cpp
===================================================================
--- trunk/qcell/basesources/CalculationData.cpp (rev 0)
+++ trunk/qcell/basesources/CalculationData.cpp 2006-11-29 20:12:56 UTC (rev 25)
@@ -0,0 +1,537 @@
+#include "../baseheaders/CalculationData.h"
+
+bool CalculationData::resize(const char *dataPointer)
+{
+ if(data)
+ delete data;
+
+ data = new char[getSizeInByte()];
+ if(!data)
+ return 0;
+
+ if(dataPointer)
+ fill(dataPointer);
+ return 1;
+}
+
+void * CalculationData::getAddressAt(int x, int y, int z, int t)
+{
+ int dSize;
+ if(dataType==CalculationData::DATA_TYPES::NONE)
+ return NULL;
+ switch(dataType)
+ {
+ case CalculationData::DATA_TYPES::BOOL:
+ size = 0;
+ break;
+
+ case CalculationData::DATA_TYPES::CHAR:
+ dSize = 1;
+ break;
+
+ case CalculationData::DATA_TYPES::INT:
+ dSize = sizeof(int);
+ break;
+
+ case CalculationData::DATA_TYPES::SHORT:
+ dSize = sizeof(short);
+ break;
+
+ case CalculationData::DATA_TYPES::DOUBLE:
+ dSize = sizeof(double);
+ break;
+ case CalculationData::DATA_TYPES::FLOAT:
+ dSize = sizeof(float);
+ break;
+ }
+
+ return data + dSize * (x + y * sizeX + z * sizeX * sizeY + t * sizeX * sizeY * sizeZ);
+}
+
+CalculationData::CalculationData()
+{
+ dataType = CalculationData::DATA_TYPES::NONE;
+ sizeX = sizeY = sizeZ = sizeT = 0;
+ dimension = -1;
+ size = -1;
+ data = NULL;
+}
+
+CalculationData::~CalculationData()
+{
+ dataType = CalculationData::DATA_TYPES::NONE;
+ sizeX = sizeY = sizeZ = sizeT = 0;
+ dimension = -1;
+ size = -1;
+ if(data)
+ {
+ delete data;
+ data = NULL;
+ }
+}
+
+int CalculationData::getValueAt_i(int x)
+{
+ switch(dataType)
+ {
+ case CalculationData::DATA_TYPES::BOOL:
+ size = 0;
+ break;
+
+ case CalculationData::DATA_TYPES::CHAR:
+ return *((char *)getAddressAt(x, 0, 0, 0));
+
+ case CalculationData::DATA_TYPES::INT:
+ return *((int *)(getAddressAt(x, 0, 0, 0)));
+
+ case CalculationData::DATA_TYPES::SHORT:
+ return *((short *)(getAddressAt(x, 0, 0, 0)));
+ }
+ return -1;
+}
+
+int CalculationData::getValueAt_i(int x, int y)
+{
+ switch(dataType)
+ {
+ case CalculationData::DATA_TYPES::BOOL:
+ size = 0;
+ break;
+
+ case CalculationData::DATA_TYPES::CHAR:
+ return *((char *)getAddressAt(x, y, 0, 0));
+
+ case CalculationData::DATA_TYPES::INT:
+ return *((int *)(getAddressAt(x, y, 0, 0)));
+
+ case CalculationData::DATA_TYPES::SHORT:
+ return *((short *)(getAddressAt(x, y, 0, 0)));
+ }
+ return -1;
+}
+
+int CalculationData::getValueAt_i(int x, int y, int z)
+{
+ switch(dataType)
+ {
+ case CalculationData::DATA_TYPES::BOOL:
+ size = 0;
+ break;
+
+ case CalculationData::DATA_TYPES::CHAR:
+ return *((char *)getAddressAt(x, y, z, 0));
+
+ case CalculationData::DATA_TYPES::INT:
+ return *((int *)(getAddressAt(x, y, z, 0)));
+
+ case CalculationData::DATA_TYPES::SHORT:
+ return *((short *)(getAddressAt(x, y, z, 0)));
+ }
+ return -1;
+}
+
+int CalculationData::getValueAt_i(int x, int y, int z, int t)
+{
+ switch(dataType)
+ {
+ case CalculationData::DATA_TYPES::BOOL:
+ size = 0;
+ break;
+
+ case CalculationData::DATA_TYPES::CHAR:
+ return *((char *)getAddressAt(x, y, z, t));
+
+ case CalculationData::DATA_TYPES::INT:
+ return *((int *)(getAddressAt(x, y, z, t)));
+
+ case CalculationData::DATA_TYPES::SHORT:
+ return *((short *)(getAddressAt(x, y, z, t)));
+ }
+ return -1;
+}
+
+void CalculationData::setValueAt_i(int val, int x)
+{
+ switch(dataType)
+ {
+ case CalculationData::DATA_TYPES::BOOL:
+ size = 0;
+ break;
+
+ case CalculationData::DATA_TYPES::CHAR:
+ *((char *)getAddressAt(x, 0, 0, 0)) = (char)val;
+ break;
+
+ case CalculationData::DATA_TYPES::INT:
+ *((int *)(getAddressAt(x, 0, 0, 0))) = val;
+ break;
+
+ case CalculationData::DATA_TYPES::SHORT:
+ *((short *)(getAddressAt(x, 0, 0, 0))) = (short)val;
+ break;
+ }
+}
+
+void CalculationData::setValueAt_i(int val, int x, int y)
+{
+ switch(dataType)
+ {
+ case CalculationData::DATA_TYPES::BOOL:
+ size = 0;
+ break;
+
+ case CalculationData::DATA_TYPES::CHAR:
+ *((char *)getAddressAt(x, y, 0, 0)) = (char)val;
+ break;
+
+ case CalculationData::DATA_TYPES::INT:
+ *((int *)(getAddressAt(x, y, 0, 0))) = val;
+ break;
+
+ case CalculationData::DATA_TYPES::SHORT:
+ *((short *)(getAddressAt(x, y, 0, 0))) = (short)val;
+ break;
+ }
+}
+
+void CalculationData::setValueAt_i(int val, int x, int y, int z)
+{
+ switch(dataType)
+ {
+ case CalculationData::DATA_TYPES::BOOL:
+ size = 0;
+ break;
+
+ case CalculationData::DATA_TYPES::CHAR:
+ *((char *)getAddressAt(x, y, z, 0)) = (char)val;
+ break;
+
+ case CalculationData::DATA_TYPES::INT:
+ *((int *)(getAddressAt(x, y, z, 0))) = val;
+ break;
+
+ case CalculationData::DATA_TYPES::SHORT:
+ *((short *)(getAddressAt(x, y, z, 0))) = (short)val;
+ break;
+ }
+}
+
+void CalculationData::setValueAt_i(int val, int x, int y, int z, int t)
+{
+ switch(dataType)
+ {
+ case CalculationData::DATA_TYPES::BOOL:
+ size = 0;
+ break;
+
+ case CalculationData::DATA_TYPES::CHAR:
+ *((char *)getAddressAt(x, y, z, t)) = (char)val;
+ break;
+
+ case CalculationData::DATA_TYPES::INT:
+ *((int *)(getAddressAt(x, y, z, t))) = val;
+ break;
+
+ case CalculationData::DATA_TYPES::SHORT:
+ *((short *)(getAddressAt(x, y, z, t))) = (short)val;
+ break;
+ }
+}
+
+double CalculationData::getValueAt_d(int x)
+{
+ switch(dataType)
+ {
+ case CalculationData::DATA_TYPES::DOUBLE:
+ return *((double *)(getAddressAt(x, 0, 0, 0)));
+
+ case CalculationData::DATA_TYPES::FLOAT:
+ return *((float *)(getAddressAt(x, 0, 0, 0)));
+ }
+ return -1;
+}
+
+double CalculationData::getValueAt_d(int x, int y)
+{
+ switch(dataType)
+ {
+ case CalculationData::DATA_TYPES::DOUBLE:
+ return *((double *)(getAddressAt(x, y, 0, 0)));
+
+ case CalculationData::DATA_TYPES::FLOAT:
+ return *((float *)(getAddressAt(x, y, 0, 0)));
+ }
+ return -1;
+}
+
+double CalculationData::getValueAt_d(int x, int y, int z)
+{
+ switch(dataType)
+ {
+ case CalculationData::DATA_TYPES::DOUBLE:
+ return *((double *)(getAddressAt(x, y, z, 0)));
+
+ case CalculationData::DATA_TYPES::FLOAT:
+ return *((float *)(getAddressAt(x, y, z, 0)));
+ }
+ return -1;
+}
+
+double CalculationData::getValueAt_d(int x, int y, int z, int t)
+{
+ switch(dataType)
+ {
+ case CalculationData::DATA_TYPES::DOUBLE:
+ return *((double *)(getAddressAt(x, y, z, t)));
+
+ case CalculationData::DATA_TYPES::FLOAT:
+ return *((float *)(getAddressAt(x, y, z, t)));
+ }
+ return -1;
+}
+
+void CalculationData::setValueAt_d(double val, int x)
+{
+ switch(dataType)
+ {
+ case CalculationData::DATA_TYPES::DOUBLE:
+ *((double *)(getAddressAt(x, 0, 0, 0))) = val;
+ break;
+
+ case CalculationData::DATA_TYPES::FLOAT:
+ *((float *)(getAddressAt(x, 0, 0, 0))) = (float)val;
+ break;
+ }
+}
+
+void CalculationData::setValueAt_d(double val, int x, int y)
+{
+ switch(dataType)
+ {
+ case CalculationData::DATA_TYPES::DOUBLE:
+ *((double *)(getAddressAt(x, y, 0, 0))) = val;
+ break;
+
+ case CalculationData::DATA_TYPES::FLOAT:
+ *((float *)(getAddressAt(x, y, 0, 0))) = (float)val;
+ break;
+ }
+}
+
+void CalculationData::setValueAt_d(double val, int x, int y, int z)
+{
+ switch(dataType)
+ {
+ case CalculationData::DATA_TYPES::DOUBLE:
+ *((double *)(getAddressAt(x, y, z, 0))) = val;
+ break;
+
+ case CalculationData::DATA_TYPES::FLOAT:
+ *((float *)(getAddressAt(x, y, z, 0))) = (float)val;
+ break;
+ }
+}
+
+void CalculationData::setValueAt_d(double val, int x, int y, int z, int t)
+{
+ switch(dataType)
+ {
+ case CalculationData::DATA_TYPES::DOUBLE:
+ *((double *)(getAddressAt(x, y, z, t))) = val;
+ break;
+
+ case CalculationData::DATA_TYPES::FLOAT:
+ *((float *)(getAddressAt(x, y, z, t))) = (float)val;
+ break;
+ }
+}
+
+void CalculationData::setDataType(DATA_TYPES type)
+{
+ dataType = type;
+ size = -1;
+ switch(dataType)
+ {
+ case CalculationData::DATA_TYPES::BOOL:
+ size = 0;
+ break;
+
+ case CalculationData::DATA_TYPES::CHAR:
+ size = 1;
+ break;
+
+ case CalculationData::DATA_TYPES::DOUBLE:
+ size = sizeof(double);
+ break;
+
+ case CalculationData::DATA_TYPES::FLOAT:
+ size = sizeof(float);
+ break;
+
+ case CalculationData::DATA_TYPES::INT:
+ size = sizeof(int);
+ break;
+
+ case CalculationData::DATA_TYPES::SHORT:
+ size = sizeof(short);
+ break;
+ }
+}
+
+bool CalculationData::resize(int x, const char *dataPointer)
+{
+ sizeX = x;
+ sizeY = 0;
+ sizeZ = 0;
+ sizeT = 0;
+ dimension = 1;
+ return resize(dataPointer);
+}
+
+bool CalculationData::resize(int x, int y, const char *dataPointer)
+{
+ sizeX = x;
+ sizeY = y;
+ sizeZ = 0;
+ sizeT = 0;
+ dimension = 2;
+ return resize(dataPointer);
+}
+
+bool CalculationData::resize(int x, int y, int z, const char *dataPointer)
+{
+ sizeX = x;
+ sizeY = y;
+ sizeZ = z;
+ sizeT = 0;
+ dimension = 3;
+ return resize(dataPointer);
+}
+
+bool CalculationData::resize(int x, int y, int z, int t, const char *dataPointer)
+{
+ sizeX = x;
+ sizeY = y;
+ sizeZ = z;
+ sizeT = t;
+ dimension = 4;
+ return resize(dataPointer);
+}
+
+int CalculationData::getSizeX(void)
+{
+ return sizeX;
+}
+
+int CalculationData::getSizeY(void)
+{
+ return sizeY;
+}
+
+int CalculationData::getSizeZ(void)
+{
+ return sizeZ;
+}
+
+int CalculationData::getSizeT(void)
+{
+ return sizeT;
+}
+
+int CalculationData::getSizeInByte(void)
+{
+ switch(dataType)
+ {
+ case CalculationData::DATA_TYPES::BOOL:
+ switch(dimension)
+ {
+ case 1:
+ return sizeX / 8 + ((sizeX % 8)>0);
+ case 2:
+ return (sizeX * sizeY) / 8 + (((sizeX * sizeY) % 8)>0);
+ case 3:
+ return (sizeX * sizeY * sizeZ) / 8 + (((sizeX * sizeY * sizeZ) % 8)>0);
+ case 4:
+ return (sizeX * sizeY * sizeZ * sizeT) / 8 + (((sizeX * sizeY * sizeZ * sizeT) % 8)>0);
+ }
+
+ case CalculationData::DATA_TYPES::CHAR:
+ switch(dimension)
+ {
+ case 1:
+ return sizeX;
+ case 2:
+ return sizeX * sizeY;
+ case 3:
+ return sizeX * sizeY * sizeZ;
+ case 4:
+ return sizeX * sizeY * sizeZ * sizeT;
+ }
+
+ case CalculationData::DATA_TYPES::DOUBLE:
+ switch(dimension)
+ {
+ case 1:
+ return sizeX * sizeof(double);
+ case 2:
+ return sizeX * sizeY * sizeof(double);
+ case 3:
+ return sizeX * sizeY * sizeZ * sizeof(double);
+ case 4:
+ return sizeX * sizeY * sizeZ * sizeT * sizeof(double);
+ }
+
+ case CalculationData::DATA_TYPES::FLOAT:
+ switch(dimension)
+ {
+ case 1:
+ return sizeX * sizeof(float);
+ case 2:
+ return sizeX * sizeY * sizeof(float);
+ case 3:
+ return sizeX * sizeY * sizeZ * sizeof(float);
+ case 4:
+ return sizeX * sizeY * sizeZ * sizeT * sizeof(float);
+ }
+
+ case CalculationData::DATA_TYPES::INT:
+ switch(dimension)
+ {
+ case 1:
+ return sizeX * sizeof(int);
+ case 2:
+ return sizeX * sizeY * sizeof(int);
+ case 3:
+ return sizeX * sizeY * sizeZ * sizeof(int);
+ case 4:
+ return sizeX * sizeY * sizeZ * sizeT * sizeof(int);
+ }
+
+ case CalculationData::DATA_TYPES::SHORT:
+ switch(dimension)
+ {
+ case 1:
+ return sizeX * sizeof(short);
+ case 2:
+ return sizeX * sizeY * sizeof(short);
+ case 3:
+ return sizeX * sizeY * sizeZ * sizeof(short);
+ case 4:
+ return sizeX * sizeY * sizeZ * sizeT * sizeof(short);
+ }
+ }
+ return 0;
+}
+
+const char *CalculationData::getDataPointer(void)
+{
+ return data;
+}
+
+void CalculationData::fill(const char *dataPointer)
+{
+ if(data!=NULL)
+ {
+ memcpy(data, dataPointer, getSizeInByte());
+ }
+}
\ No newline at end of file
Modified: trunk/qcell/basesources/Neighbourhood.cpp
===================================================================
--- trunk/qcell/basesources/Neighbourhood.cpp 2006-11-29 17:31:34 UTC (rev 24)
+++ trunk/qcell/basesources/Neighbourhood.cpp 2006-11-29 20:12:56 UTC (rev 25)
@@ -92,16 +92,11 @@
neighbourVector.clear();
}
-int Neighbourhood::getDimensions(void)
+int Neighbourhood::getDimension(void)
{
- return dimensions;
+ return dimension;
}
-void Neighbourhood::setDimensions(int dimensions)
-{
- this.dimensions = dimensions;
-}
-
bool Neighbourhood::fromXmlString(QString *xmlString)
{
QDomDocument doc;
@@ -222,7 +217,7 @@
return neighbourVector[index].bValue;
}
-int Neighbourhood::getIntValueOf(int index)
+int Neighbourhood::getInValueOf(int index)
{
return neighbourVector[index].iValue;
}
@@ -231,3 +226,11 @@
{
return neighbourVector[index].dValue;
}
+
+void Neighbourhood::calculateOffsets(int sizeX, int sizeY, int sizeZ, int sizeT, int dataSize)
+{
+ for(int i=0;i<neighbourVector.size();i++)
+ {
+ neighbourVector[i].offset = dataSize * (neighbourVector[i].x + neighbourVector[i].y * sizeX + neighbourVector[i].z * sizeX * sizeY + neighbourVector[i].t * sizeX * sizeY * sizeZ);
+ }
+}
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|