/* * 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 . / /** * FILE: vff.hh * * MODULE: conversion * * CLASSES: r_Conv_VFF * * COMMENTS: * * Provides interface to convert data to VFF and back. * */ #ifndef _R_CONV_VFF_HH_ #define _R_CONV_VFF_HH_ #include "conversion/convertor.hh" //@ManMemo: Module {\bf conversion} /*@Doc: VFF convertor class. Supported parameters are \begin{tabular}{rcl} dorder && string && data order to read/write in 3D mode; permutations of "xyz"\\ dimorder && string && dimension order for vectors (size, origin, ...)\\ vffendian && int && default endianness, 0 for big endian, 1 for little\\ \end{tabular} */ class r_Conv_VFF : public r_Convertor { public: /// constructor using an r_Type object r_Conv_VFF( const char *src, const r_Minterval &interv, const r_Type *tp ) throw(r_Error); /// constructor using a convert_type_e shortcut r_Conv_VFF( const char *src, const r_Minterval &interv, int tp ) throw(r_Error); /// destructor ~r_Conv_VFF( void ); /// convert to VFF virtual r_convDesc &convertTo( const char *options=NULL ) throw(r_Error); /// convert from VFF virtual r_convDesc &convertFrom( const char *options=NULL ) throw(r_Error); /// cloning virtual r_Convertor *clone( void ) const; /// identification virtual const char *get_name( void ) const; virtual r_Data_Format get_data_format( void ) const; private: /// shared init code void initVFF( void ); /// skip whitespace when parsing the header static void skip_white( const char *&str ); /// read a floating point vector from the header and return pointer to rest static const char *read_vector( r_Dimension dim, const char *str, double *&vec ); /// read a string from the header and return pointer to rest static const char *read_string( const char *str, char *dest, bool allowSpace=0 ); /// write an interval to a stream static void write_interval( const char *keyname, std::ostream &str, const r_Minterval &iv, const unsigned int *order, r_Range inc=0 ); /// write an origin to a stream static void write_origin( const char *keyname, std::ostream &str, const r_Minterval &iv, const unsigned int *order ); /// get the VFF-endian id for the host machine's static const char *get_endian_id( void ); /// parse data order string, revert to default if failed static int parse_data_order( r_Dimension dim, const char *dstr, unsigned int *order ); /// get default data order for a dimensionality static const char *get_default_order( r_Dimension dim ); /// get default dimension order for a dimensionality static const char *get_default_dim_order( r_Dimension dim ); /// get dimension order in newly allocated array unsigned int *get_dimension_order( r_Dimension dim ) const; /// get the default endianness const char *get_default_endianness( void ) const; /// data order parameter char *dorderParam; /// dimension order parameter char *dimOrderParam; /// default endianness parameter int dfltEndianness; /// identifier (ncaa) in header static const char *fileMagic; /// keyword names static const char *keywords[]; /// special key values static const char *kval_Raster; static const char *kval_Slice; static const char *kval_LEndian; static const char *kval_BEndian; /// default data order for 2D/3D static const char *dfltDataOrder2; static const char *dfltDataOrder3; /// default dimension order fo 2D/3D static const char *dfltDimOrder2; static const char *dfltDimOrder3; /// end-of-header marker static const char endOfHeader; /// name of convertTo() method static const char *method_convTo; /// name of convertFrom() method static const char *method_convFrom; }; #endif