1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
/*
* 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 <http://www.gnu.org/licenses/>.
*
* Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 Peter Baumann /
rasdaman GmbH.
*
* For more information please see <http://www.rasdaman.org>
* or contact Peter Baumann via <baumann@rasdaman.com>.
/
/**
* 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
|