/*
* 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 .
*/
/*************************************************************
*
*
* PURPOSE:
*
*
* COMMENTS:
*
************************************************************/
static const char rcsid[] = "@(#)qlparser, QtMintervalData: $Header: /home/rasdev/CVS-repository/rasdaman/qlparser/qtmintervaldata.cc,v 1.10 2005/09/03 20:17:55 rasdev Exp $";
using namespace std;
using namespace std;
#include "qlparser/qtmintervaldata.hh"
#include
#include
QtMintervalData::QtMintervalData( const r_Minterval& minterval, vector* initTrimFlags )
: mintervalData(minterval), QtData(), trimFlags( initTrimFlags )
{
if( !trimFlags )
{
trimFlags = new vector( minterval.dimension() );
for( int i=0; isize(); i++ )
(*trimFlags)[i] = true;
}
}
QtMintervalData::~QtMintervalData()
{
if( trimFlags ) {delete trimFlags; trimFlags=NULL; }
}
QtDataType
QtMintervalData::getDataType() const
{
return QT_MINTERVAL;
}
bool
QtMintervalData::equal( const QtData* obj ) const
{
bool returnValue = false; // not equal by initialization
if( obj->getDataType() == QT_MINTERVAL )
{
QtMintervalData* mint = (QtMintervalData*)obj;
// 1. check domains
returnValue = (mintervalData == mint->getMintervalData());
// 2. check projection flags !!!
if( returnValue && trimFlags && mint->getTrimFlags() )
for( int i=0; igetTrimFlags()))[i]))
{
returnValue = false;
break;
}
}
return returnValue;
}
std::string
QtMintervalData::getSpelling() const
{
std::string result;
// buffer
int bufferLen = mintervalData.dimension() * 50; // on the save side for two integers per dimension plus colon and brackets
char* buffer = new char[ bufferLen ];
// replaced deprecated ostrstream -- PB 2005-jan-14
// ostrstream bufferStream( buffer, bufferLen );
ostringstream bufferStream( buffer );
if( trimFlags )
{
bufferStream << "[" << std::flush;
for( int i=0; i 0 ) bufferStream << "'" << std::flush;
if( (*trimFlags)[i] )
bufferStream << mintervalData[i] << std::flush;
else
bufferStream << mintervalData[i].low() << std::flush;
}
bufferStream << "]" << std::ends;
}
else
bufferStream << mintervalData << std::ends;
result.append( std::string( buffer ) );
delete[] buffer;
buffer = NULL;
return result;
}
char* QtMintervalData::getTypeStructure() const
{
return strdup("minterval");
}
void
QtMintervalData::printStatus( std::ostream& stream ) const
{
stream << "minterval, value: " << std::flush;
if( trimFlags )
{
stream << "[" << std::flush;
for( int i=0; i 0 ) stream << "," << std::flush;
if( (*trimFlags)[i] )
stream << mintervalData[i] << std::flush;
else
stream << mintervalData[i].low() << std::flush;
}
stream << "]" << std::flush;
}
else
stream << mintervalData << std::flush;
QtData::printStatus( stream );
}