/* * This file is part of rasdaman community. * * Rasdaman community is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Rasdaman community is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with rasdaman community. If not, see . * * Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 Peter Baumann / rasdaman GmbH. * * For more information please see * or contact Peter Baumann via . */ /////////////////////////////////////////////////////////////// // implementation - ComplexType1 /////////////////////////////////////////////////////////////// inline ComplexType1::ComplexType1() : GenericComplexType(ComplexType1::Name, 2 * sizeof(float)), reOffset(0), imOffset(sizeof(float)) { myType = COMPLEXTYPE1; myOId = OId(COMPLEXTYPE1, OId::ATOMICTYPEOID); } inline ComplexType1::ComplexType1(const OId& id) throw (r_Error) : GenericComplexType(id), reOffset(0), imOffset(sizeof(float)) { readFromDb(); } inline ComplexType1::ComplexType1(const ComplexType1& old) : GenericComplexType(old) { reOffset = old.reOffset; imOffset = old.imOffset; } inline ComplexType1& ComplexType1::operator =(const ComplexType1& old) { if(this == &old) return *this; AtomicType::operator =(old); reOffset = old.reOffset; imOffset = old.imOffset; return *this; } inline ComplexType1::~ComplexType1() {} inline void ComplexType1::printCell( ostream& stream, const char* cell ) const { stream << "( Re: " << *(float *)(cell + reOffset) << "\t"; stream << "Im: " << *(float *)(cell + imOffset) << " )\n"; } inline void ComplexType1::readFromDb() throw (r_Error) { size = 2 * sizeof(float); setName(ComplexType1::Name); myType = COMPLEXTYPE1; myOId = OId(COMPLEXTYPE1, OId::ATOMICTYPEOID); } inline unsigned int ComplexType1::getReOffset() const { return reOffset; } inline unsigned int ComplexType1::getImOffset() const { return imOffset; } // those would better throw an exception inline r_ULong* ComplexType1::convertToCULong(const char*, r_ULong*) const { return 0; } inline char* ComplexType1::makeFromCULong(char*, const r_ULong*) const { return 0; } inline r_Long* ComplexType1::convertToCLong(const char*, r_Long*) const { return 0; } inline char* ComplexType1::makeFromCLong(char*, const r_Long*) const { return 0; } inline double* ComplexType1::convertToCDouble(const char* cell, double* value) const { *value = *(float*)cell; return value; } inline char* ComplexType1::makeFromCDouble(char* cell, const double* value) const { double dummy = *value; if(dummy > FLT_MAX) dummy = FLT_MAX; if(dummy < -1.0f * FLT_MAX) dummy = -1.0f * FLT_MAX; *(float*)(cell) = dummy; return cell; } inline const char* ComplexType1::getTypeName() const { return "complex"; } /////////////////////////////////////////////////////////////// // implementation - ComplexType2 /////////////////////////////////////////////////////////////// inline ComplexType2::ComplexType2() : GenericComplexType(ComplexType2::Name, 2 * sizeof(double)), reOffset(0), imOffset(sizeof(double)) { myType = COMPLEXTYPE2; myOId = OId(COMPLEXTYPE2, OId::ATOMICTYPEOID); } inline ComplexType2::ComplexType2(const OId& id) throw (r_Error) : GenericComplexType(id), reOffset(0), imOffset(sizeof(double)) { readFromDb(); } inline ComplexType2::ComplexType2(const ComplexType2& old) : GenericComplexType(old) { reOffset = old.reOffset; imOffset = old.imOffset; } inline ComplexType2& ComplexType2::operator =(const ComplexType2& old) { if(this == &old) return *this; AtomicType::operator =(old); reOffset = old.reOffset; imOffset = old.imOffset; return *this; } inline ComplexType2::~ComplexType2() {} inline void ComplexType2::printCell( ostream& stream, const char* cell ) const { stream << "( Re: " << *(double *)(cell + reOffset) << "\t"; stream << "Im: " << *(double *)(cell + imOffset) << " )\n"; } inline void ComplexType2::readFromDb() throw (r_Error) { size = 2 * sizeof(double); setName(ComplexType2::Name); myType = COMPLEXTYPE2; myOId = OId(COMPLEXTYPE2, OId::ATOMICTYPEOID); } inline unsigned int ComplexType2::getReOffset() const { return reOffset; } inline unsigned int ComplexType2::getImOffset() const { return imOffset; } // those would better throw an exception inline r_ULong* ComplexType2::convertToCULong(const char*, r_ULong*) const { return 0; } inline char* ComplexType2::makeFromCULong(char*, const r_ULong*) const { return 0; } inline r_Long* ComplexType2::convertToCLong(const char*, r_Long*) const { return 0; } inline char* ComplexType2::makeFromCLong(char*, const r_Long*) const { return 0; } inline double* ComplexType2::convertToCDouble(const char* cell, double* value) const { *value = *(double*)cell; return value; } inline char* ComplexType2::makeFromCDouble(char* cell, const double* value) const { *(double*)(cell) = *value; return cell; } inline const char* ComplexType2::getTypeName() const { return "complexd"; }