/*
* 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: mddtypes.hh
*
* MODULE: raslib
*
* PURPOSE:
* The file cotains MDD type definitions.
*
* COMMENTS:
* - always append new data formats to remain compatible with earlier compiled code
*
*/
#ifndef _D_MDDTYPES_
#define _D_MDDTYPES_
#ifdef __VISUALC__
#include
#else
#include
#endif
//typedef unsigned int uint32;
//typedef int int32;
//@Man: r_Bytes
//@Type: typedef
//@Args: as unsigned int
//@Memo: Module: {\bf raslib}.
typedef unsigned int r_Bytes;
/**
{\tt typedef unsigned int r_Bytes;}
The typedef \Ref{r_Bytes} is used as type for the number of bytes in an tile or mdd or type.
*/
//@Man: r_Ptr
//@Type: typedef
//@Args: as unsigned long
//@Memo: Module: {\bf raslib}.
typedef unsigned long r_Ptr;
/**
{\tt typedef unsigned long r_Ptr;}
The typedef \Ref{r_Ptr} was introduced to handle correctly convertions from
pointers to integer variables on 64bit architectures.
*/
//@Man: r_Area
//@Type: typedef
//@Args: as unsigned int
//@Memo: Module: {\bf raslib}.
typedef unsigned int r_Area;
/**
{\tt typedef unsigned int r_Area;}
The typedef \Ref{r_Area} is used as type for the number of cells in an mdd object or tile.
*/
//@Man: r_Range
//@Type: typedef
//@Args: as int
//@Memo: Module: {\bf raslib}.
typedef int r_Range;
/**
{\tt typedef int r_Range;}
The typedef \Ref{r_Range} is used as type for the point set
of one dimension of a spatial domain. This means that lower
and upper bounds of \Ref{r_Sinterval}, the projection value,
and the cooridnate values of \Ref{r_Point} are of this type.
*/
//@Man: r_Dimension
//@Type: typedef
//@Args: as unsigned int
//@Memo: Module: {\bf raslib}.
typedef unsigned int r_Dimension;
/**
{\tt typedef unsigned int r_Dimension;}
This is used as type for the number of dimensions in
\Ref{r_Point} and \Ref{r_Minterval}.
*/
//@Man: r_Data_Format
//@Type: enum
//@Args:
//@Memo: Module: {\bf raslib}.
enum r_Data_Format
{
r_Array,
r_TIFF,
r_JPEG,
r_HDF,
r_CSV,
r_PNG,
r_ZLib,
r_Auto_Compression,
r_BMP,
r_RLE,
r_Wavelet_Haar,
r_Wavelet_Daubechies, // = Daubechies 4 tap
r_Sep_ZLib,
r_Sep_RLE,
r_Wavelet_Daub6,
r_Wavelet_Daub8,
r_Wavelet_Daub10,
r_Wavelet_Daub12,
r_Wavelet_Daub14,
r_Wavelet_Daub16,
r_Wavelet_Daub18,
r_Wavelet_Daub20,
r_Wavelet_Least8,
r_Wavelet_Least10,
r_Wavelet_Least12,
r_Wavelet_Least14,
r_Wavelet_Least16,
r_Wavelet_Least18,
r_Wavelet_Least20,
r_Wavelet_Coiflet6,
r_Wavelet_Coiflet12,
r_Wavelet_Coiflet18,
r_Wavelet_Coiflet24,
r_Wavelet_Coiflet30,
r_VFF,
r_Wavelet_QHaar,
r_PPM,
r_TOR,
r_DEM,
r_Pack_Bits,
r_ECW,
r_TMC,
r_NTF,
r_Data_Format_NUMBER
};
/**
{\tt enum r_Data_Format}
\begin{tabular}{lll}
{\ttr_Array} && no compression, row-major memory representation\\
{\ttr_TIFF} && TIFF format (see \Ref{r_Conv_TIFF})\\
{\ttr_JPEG} && JPEG format (see \Ref{r_Conv_JPEG})\\
{\ttr_HDF} && HDF format (see \Ref{r_Conv_HDF})\\
{\ttr_PNG} && PNG format (see \Ref{r_Conv_PNG})\\
{\ttr_BMP} && BMP format (see \Ref{r_Conv_BMP})\\
{\ttr_VFF} && VFF format (see \Ref{r_Conv_VFF})\\
{\ttr_PPM} && PPM format (see \Ref{r_Conv_PPM})\\
{\ttr_TOR} && TOR format (see \Ref{r_Conv_TOR})\\
{\ttr_DEM} && DEM format (see \Ref{r_Conv_DEM})\\
{\ttr_ECW} && ECW format (see \Ref{r_Conv_ECW})\\
{\ttr_NTF} && NITF format (see \Ref{r_Conv_NTF})\\
{\ttr_Auto_Compression} && automatic compression\\
{\ttr_ZLib} && ZLIB compresion (see \Ref{r_Tile_Comp_RLE})\\
{\ttr_Pack_Bits} && Packbits rle compresion (see \Ref{r_Tile_Comp_Packbits})\\
{\ttr RLE} && RLE compression (see \Ref{r_Tile_Comp_RLE})\\
{\ttr_Wavelet_Haar} && Haar Wavelet compression (see \Ref{r_Haar_Wavelet_Compression})\\
{\ttr_Wavelet_Daubechies} && Daubechies 4-tap Wavelet compression (see \Ref{r_Daubechies_Wavelet_Compression})\\
{\ttr_Sep_ZLib} && ZLIB compression, compress base types separately (see \Ref{r_Tile_Separate_ZLIB})\\
{\ttr_Sep_RLE} && RLE compression, compress base types separately (see \Ref{r_Tile_Separate_RLE})\\
{\ttr_Wavelet_Daub} && Daubechies n-tap Wavelet compression, n=6,8,...,18,20 (see \Ref{r_Ortho_Wavelet_Factory})\\
{\ttr_Wavelet_Least} && Least asymmetric n-tap Wavelet comp., n=8,10,...,18,20 (see \Ref{r_Ortho_Wavelet_Factory})\\
{\ttr_Wavelet_Coiflet} && Coiflet n-tap Wavelet compression, n=6,12,18,24,30 (see \Ref{r_Ortho_Wavelet_Factory})\\
{\ttr_Wavelet_QHaar} && Lossy Haar Wavelet compression (see \Ref{r_Haar_QWavelet_Compression})\\
\end{tabular}
*/
//@ManMemo: Module: {\bf raslib}
/**
The names of all data types, to avoid redundant storage and inconsistencies.
The variable name convention is the prefix format_name_ followed by the name
of the data format in lower case without the r_ prefix, i.e. for r_Wavelet_Haar
format_name_wavelet_haar.
In addition there's an array of names all_data_format_names where the data format
can be used as index to get the name.
*/
extern const char *format_name_array;
extern const char *format_name_tiff;
extern const char *format_name_jpeg;
extern const char *format_name_hdf;
extern const char *format_name_png;
extern const char *format_name_zlib;
extern const char *format_name_auto_compression;
extern const char *format_name_bmp;
extern const char *format_name_ppm;
extern const char *format_name_rle;
extern const char *format_name_wavelet_haar;
extern const char *format_name_wavelet_daubechies;
extern const char *format_name_sep_zlib;
extern const char *format_name_sep_rle;
extern const char *format_name_wavelet_daub6;
extern const char *format_name_wavelet_daub8;
extern const char *format_name_wavelet_daub10;
extern const char *format_name_wavelet_daub12;
extern const char *format_name_wavelet_daub14;
extern const char *format_name_wavelet_daub16;
extern const char *format_name_wavelet_daub18;
extern const char *format_name_wavelet_daub20;
extern const char *format_name_wavelet_least8;
extern const char *format_name_wavelet_least10;
extern const char *format_name_wavelet_least12;
extern const char *format_name_wavelet_least14;
extern const char *format_name_wavelet_least16;
extern const char *format_name_wavelet_least18;
extern const char *format_name_wavelet_least20;
extern const char *format_name_wavelet_coiflet6;
extern const char *format_name_wavelet_coiflet12;
extern const char *format_name_wavelet_coiflet18;
extern const char *format_name_wavelet_coiflet24;
extern const char *format_name_wavelet_coiflet30;
extern const char *format_name_vff;
extern const char *format_name_tor;
extern const char *format_name_dem;
extern const char *format_name_pack_bits;
extern const char *format_name_wavelet_qhaar;
extern const char *format_name_tmc;
extern const char *format_name_ntf;
extern const char *all_data_format_names[r_Data_Format_NUMBER];
//@ManMemo: Module: {\bf raslib}
/**
Get a data format name for a data format
*/
const char *get_name_from_data_format( r_Data_Format fmt );
//@ManMemo: Module: {\bf raslib}
/**
Get a data format for a data format name
*/
r_Data_Format get_data_format_from_name ( const char *name );
//@ManMemo: Module: {\bf raslib}
/**
Output stream operator for objects of type {\tt const} \Ref{r_Data_Format}.
*/
extern std::ostream& operator<<( std::ostream& s, const r_Data_Format& d );
//@ManMemo: Module: {\bf raslib}
/**
Output stream operator for objects of type \Ref{r_Data_Format}.
*/
extern std::ostream& operator<<( std::ostream& s, r_Data_Format& d );
//@Man: r_Scale_Function
//@Type: enum
//@Args:
//@Memo: Module: {\bf raslib}.
enum r_Scale_Function {
r_SubSampling,
r_BitAggregation,
r_Scale_Function_NUMBER
};
extern const char *scale_function_name_subsampling;
extern const char *scale_function_name_bitaggregation;
extern const char *all_scale_function_names[r_Scale_Function_NUMBER];
//@ManMemo: Module: {\bf raslib}
/**
Get a scale function name for a scale function
*/
const char *get_name_from_scale_function(r_Scale_Function func);
//@ManMemo: Module: {\bf raslib}
/**
Get a scale function from a scale function name
*/
r_Scale_Function get_scale_function_from_name(const char *name);
//@ManMemo: Module: {\bf raslib}
/**
Output stream operator for objects of type {\tt const} \Ref{r_Scale_Function}.
*/
extern std::ostream& operator<<( std::ostream& s, const r_Scale_Function& d );
//@Man: r_Index_Type
//@Type: enum
//@Args:
//@Memo: Module: {\bf raslib}.
enum r_Index_Type
{
r_Invalid_Index = -1,
r_Auto_Index = 0,
r_Directory_Index = 1,
r_Reg_Directory_Index = 2,
r_RPlus_Tree_Index = 3,
r_Reg_RPlus_Tree_Index = 4,
r_Tile_Container_Index = 5,
r_Reg_Computed_Index = 6,
r_Index_Type_NUMBER = 7
};
extern std::ostream& operator<<(std::ostream& in, r_Index_Type type);
//@ManMemo: Module: {\bf raslib}
/**
The names of all index type, to avoid redundant storage and inconsistencies.
The variable name convention is the prefix index_name_ followed by the name
of the index type in lower case without the r_ prefix, i.e. for r_Auto_Index
index_name_auto.
In addition there's an array of names all_index_type_names where the index type
can be used as index to get the name.
*/
extern const char *index_name_auto;
extern const char *index_name_directory;
extern const char *index_name_regdirectory;
extern const char *index_name_rplustree;
extern const char *index_name_regrplustree;
extern const char *index_name_tilecontainer;
extern const char *index_name_regcomputed;
extern const char *all_index_type_names[r_Index_Type_NUMBER];
//@ManMemo: Module: {\bf raslib}
/**
Get a index type name for a index type
*/
const char *get_name_from_index_type( r_Index_Type it );
//@ManMemo: Module: {\bf raslib}
/**
Get a index type for a index type name
*/
r_Index_Type get_index_type_from_name ( const char *name );
//@Man: r_Tiling_Scheme
//@Type: enum
//@Args:
//@Memo: Module: {\bf raslib}.
enum r_Tiling_Scheme
{
r_NoTiling = 0,
r_RegularTiling = 1,
r_StatisticalTiling = 2,
r_InterestTiling = 3,
r_AlignedTiling = 4,
r_DirectionalTiling = 5,
r_SizeTiling = 6,
r_Tiling_Scheme_NUMBER = 7
};
/**
Tiling of the object:
\begin{tabular}{lll}
NoTiling && no tiling is done unless the object is too big;
in that case, tiling is done along the first direction only;
for objects which are to be accessed always as a whole \\
{\bf Aligned} && aligned tiling, needs tileConfig \\
LowVariationAreas && according to areas of low cell value variation \\
BasedTilesStat && based on statistics regarding access to this MDD object
\end{tabular}
In addition, it is possible to have a tiling according to areas of
interest, {\bf AreasInterest} mode.
The {\tt AreasInterest} mode is indicated by a non - null value of the
{\tt areasInterestPath} attribute.
This mode is not an alternative mode in {\tt TilingScheme} because it is
compatible with the other modes. For instance, an aligned tiling may be
adopted outside the areas of interest.
*/
//@ManMemo: Module: {\bf raslib}
/**
The names of all tiling schems, to avoid redundant storage and inconsistencies.
The variable name convention is the prefix tiling_name_ followed by the name
of the tiling scheme in lower case without the r_ prefix, i.e. for r_SizeTiling
tiling_name_sizetiling.
In addition there's an array of names all_tiling_scheme_names where the tile scheme
can be used as index to get the name.
*/
extern const char *tiling_name_notiling;
extern const char *tiling_name_regulartiling;
extern const char *tiling_name_statisticaltiling;
extern const char *tiling_name_interesttiling;
extern const char *tiling_name_alignedtiling;
extern const char *tiling_name_directionaltiling;
extern const char *tiling_name_sizetiling;
extern const char *all_tiling_scheme_names[r_Tiling_Scheme_NUMBER];
//@ManMemo: Module: {\bf raslib}
/**
Get a tiling scheme name for a tiling scheme
*/
const char *get_name_from_tiling_scheme( r_Tiling_Scheme ts );
//@ManMemo: Module: {\bf raslib}
/**
Get a tiling scheme for a tiling scheme name
*/
r_Tiling_Scheme get_tiling_scheme_from_name ( const char *name );
//@ManMemo: Module: {\bf raslib}
/**
Output stream operator for objects of type {\tt const} \Ref{r_Tiling_Scheme}.
*/
extern std::ostream& operator<<(std::ostream& in, r_Tiling_Scheme type);
//@Man: r_Clustering_Scheme
//@Type: enum
//@Args:
//@Memo: Module: {\bf raslib}.
enum r_Clustering_Scheme
{
r_Insertion_Order_Clustering = 1,
r_Coords_Order_Clustering = 2,
r_Index_Cluster_Clustering = 3,
r_Based_Cluster_Stat_Clustering = 4
};
/**
Clustering of the Tiles according to:
\begin{tabular}{lll}
{\bf InsertionOrder } && the order of insertion of the tiles \\
CoordsOrder && the coordinates of the tiles \\
IndexCluster && the index structure \\
BasedClusterStat && statistics about access to the object
\end{tabular}
There is the additional {\bf PathCluster} mode, where clustering is
done according to a path of access to areas of interest.
The {\tt PathCluster} mode is indicated by setting the {\tt pathCluster}
attribute and a non - null value of the {\tt areasInterest}.
This mode is not an alternative mode in {\tt ClusteringScheme} because
it is compatible with the other modes.
*/
extern std::ostream& operator<<(std::ostream& in, r_Clustering_Scheme type);
#ifdef __VISUALC__
extern int strcasecmp( const char *str1, const char *str2 );
#endif
#endif