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. |