From 8f27e65bddd7d4b8515ce620fb485fdd78fcdf89 Mon Sep 17 00:00:00 2001 From: Constantin Jucovschi Date: Fri, 24 Apr 2009 07:20:22 -0400 Subject: Initial commit --- raslib/type.hh | 167 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 167 insertions(+) create mode 100644 raslib/type.hh (limited to 'raslib/type.hh') diff --git a/raslib/type.hh b/raslib/type.hh new file mode 100644 index 0000000..da2272c --- /dev/null +++ b/raslib/type.hh @@ -0,0 +1,167 @@ +/* +* 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 . +/ +/** + * INCLUDE: type.hh + * + * MODULE: raslib + * CLASS: r_Type + * + * COMMENTS: + * +*/ + +#ifndef _D_TYPE_ +#define _D_TYPE_ + +#include "raslib/metaobject.hh" +#include "raslib/mddtypes.hh" + +class r_Primitive_Type; +class r_Structure_Type; +class r_Marray_Type; +class r_Sinterval_Type; +class r_Minterval_Type; +class r_Point_Type; +class r_Oid_Type; +class r_Base_Type; +class r_Collection_Type; + +//@ManMemo: Module: {\bf raslib} + +/** + This class the superclass for all types in the ODMG conformant + representation of the RasDaMan type system. +*/ + +class r_Type : public r_Meta_Object +{ +public: + /// typedef for the enum specifying a primitive type, structure type, marray type, + /// interval type, minterval type, point type or oid type + enum r_Type_Id { ULONG, USHORT, BOOL, LONG, SHORT, OCTET, + DOUBLE, FLOAT, CHAR, COMPLEXTYPE1, COMPLEXTYPE2, + STRUCTURETYPE, MARRAYTYPE, COLLECTIONTYPE, + SINTERVALTYPE, MINTERVALTYPE, POINTTYPE, OIDTYPE, + UNKNOWNTYPE }; + /// default constructor. + r_Type(); + /// constructor getting name of type. + r_Type( const char* newTypeName); + /// copy constructor + r_Type( const r_Type& oldObj ); + /// assignment operator. + const r_Type& operator=( const r_Type& oldObj ); + /// destructor. + virtual ~r_Type(); + + /// clone operation + virtual r_Type* clone() const = 0; + + /// retrieve id of the type. + virtual r_Type::r_Type_Id type_id() const = 0; + + /// check, if type is primitive or structured. + virtual bool isStructType() const; + + /// check, if type is a base type ( primitive type or structure type). + virtual bool isBaseType() const; + + /// check, if type is a base type ( primitive type or structure type). + virtual bool isComplexType() const; + + /// check, if type is a marray type. + virtual bool isMarrayType() const; + + /// check, if type is a primitive type. + virtual bool isPrimitiveType() const; + + /// check, if type is a Sinterval + virtual bool isSintervalType() const; + + /// check, if type is a Minterval + virtual bool isMintervalType() const; + + /// check, if type is a Colelction type + virtual bool isCollectionType() const; + + /// check, if type is a Point + virtual bool isPointType() const; + + /// check, if type is a oid + virtual bool isOidType() const; + + /// build type schema from string representation + static r_Type* get_any_type( const char* type_string ); + + /// converts array of cells from NT byte order to Unix byte order. + virtual void convertToLittleEndian(char* cells, r_Area noCells) const = 0; + + /// converts array of cells from Unix byte order to NT byte order. + virtual void convertToBigEndian(char* cells, r_Area noCells) const = 0; + + /// token enumeration for parser + enum DLTOKEN { DLMARRAY, DLSET, DLSTRUCT, DLCOMMA, + DLLEP, DLREP, DLLAP, DLRAP, DLLCP, DLRCP, + DLIDENTIFIER, DLCHAR, DLOCTET, DLSHORT, DLUSHORT, + DLLONG, DLULONG, DLFLOAT, DLDOUBLE, DLBOOL, DLCOMPLEXTYPE1, DLCOMPLEXTYPE2, + DLINTERVAL, DLMINTERVAL, DLPOINT, DLOID, DLUNKNOWN }; + + +private: + + //@Man: Methodes and structures for dl parser: + //@{ + /// + + /// + static DLTOKEN getNextToken( char* &pos, char* &identifier ); + /// + static r_Collection_Type* getCollectionType( char* &pos ); + /// + static r_Type* getType( char* &pos ); + /// + static r_Marray_Type* getMarrayType( char* &pos ); + /// + static r_Base_Type* getBaseType( char* &pos, int offset=0 ); + /// + static r_Primitive_Type* getPrimitiveType( char* &pos ); + /// + static r_Structure_Type* getStructureType( char* &pos, int offset=0 ); + /// + static r_Sinterval_Type* getSintervalType( char* &pos ); + /// + static r_Minterval_Type* getMintervalType( char* &pos ); + /// + static r_Point_Type* getPointType( char* &pos ); + /// + static r_Oid_Type* getOidType( char* &pos ); + + /// + //@} + + +}; + +extern std::ostream& operator<<( std::ostream& s, r_Type::r_Type_Id t ); + +#endif -- cgit