Files
OpenSpace/modules/globebrowsing/ext/gdal/include/rawdataset.h
Alexander Bock 512e35bea6 Feature/globe speedup (#862)
* Updated GDAL version to 2.4.1
 * Add vtune performance commands
 * Add Nvtools performance commands
 * Add warning if GDAL dataset could not be loaded
2019-05-17 18:24:14 +02:00

193 lines
7.1 KiB
C++

/******************************************************************************
* $Id: rawdataset.h b2723bb9ee29fb36de5c3afec9e9a6b757ef743c 2018-05-10 21:21:26 +0200 Even Rouault $
*
* Project: Raw Translator
* Purpose: Implementation of RawDataset class. Intended to be subclassed
* by other raw formats.
* Author: Frank Warmerdam, warmerdam@pobox.com
*
******************************************************************************
* Copyright (c) 1999, Frank Warmerdam
* Copyright (c) 2008-2014, Even Rouault <even dot rouault at mines-paris dot org>
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
****************************************************************************/
#ifndef GDAL_FRMTS_RAW_RAWDATASET_H_INCLUDED
#define GDAL_FRMTS_RAW_RAWDATASET_H_INCLUDED
#include "gdal_pam.h"
/************************************************************************/
/* ==================================================================== */
/* RawDataset */
/* ==================================================================== */
/************************************************************************/
class RawRasterBand;
/**
* \brief Abstract Base Class dedicated to define new raw dataset types.
*/
class CPL_DLL RawDataset : public GDALPamDataset
{
friend class RawRasterBand;
protected:
CPLErr IRasterIO( GDALRWFlag, int, int, int, int,
void *, int, int, GDALDataType,
int, int *,
GSpacing nPixelSpace, GSpacing nLineSpace,
GSpacing nBandSpace,
GDALRasterIOExtraArg* psExtraArg ) override;
public:
RawDataset();
virtual ~RawDataset() = 0;
private:
CPL_DISALLOW_COPY_ASSIGN(RawDataset)
};
/************************************************************************/
/* ==================================================================== */
/* RawRasterBand */
/* ==================================================================== */
/************************************************************************/
/**
* \brief Abstract Base Class dedicated to define raw datasets.
* \note It is not defined an Abstract Base Class, but it is advised to
* consider it as such and not use it directly in client's code.
*/
class CPL_DLL RawRasterBand : public GDALPamRasterBand
{
protected:
friend class RawDataset;
VSILFILE *fpRawL{};
vsi_l_offset nImgOffset{};
int nPixelOffset{};
int nLineOffset{};
int nLineSize{};
int bNativeOrder{};
int nLoadedScanline{};
void *pLineBuffer{};
void *pLineStart{};
int bDirty{};
GDALColorTable *poCT{};
GDALColorInterp eInterp{};
char **papszCategoryNames{};
int bOwnsFP{};
int Seek( vsi_l_offset, int );
size_t Read( void *, size_t, size_t );
size_t Write( void *, size_t, size_t );
CPLErr AccessBlock( vsi_l_offset nBlockOff, size_t nBlockSize,
void * pData );
int IsSignificantNumberOfLinesLoaded( int nLineOff, int nLines );
void Initialize();
CPLErr IRasterIO( GDALRWFlag, int, int, int, int,
void *, int, int, GDALDataType,
GSpacing nPixelSpace, GSpacing nLineSpace,
GDALRasterIOExtraArg* psExtraArg ) override;
int CanUseDirectIO(int nXOff, int nYOff, int nXSize, int nYSize,
GDALDataType eBufType);
public:
enum class OwnFP
{
NO,
YES
};
RawRasterBand( GDALDataset *poDS, int nBand, VSILFILE* fpRaw,
vsi_l_offset nImgOffset, int nPixelOffset,
int nLineOffset,
GDALDataType eDataType, int bNativeOrder,
OwnFP bOwnsFP );
RawRasterBand( VSILFILE* fpRaw,
vsi_l_offset nImgOffset, int nPixelOffset,
int nLineOffset,
GDALDataType eDataType, int bNativeOrder,
int nXSize, int nYSize,
OwnFP bOwnsFP );
virtual ~RawRasterBand() /* = 0 */ ;
CPLErr IReadBlock( int, int, void * ) override;
CPLErr IWriteBlock( int, int, void * ) override;
GDALColorTable *GetColorTable() override;
GDALColorInterp GetColorInterpretation() override;
CPLErr SetColorTable( GDALColorTable * ) override;
CPLErr SetColorInterpretation( GDALColorInterp ) override;
char **GetCategoryNames() override;
CPLErr SetCategoryNames( char ** ) override;
CPLErr FlushCache() override;
CPLVirtualMem *GetVirtualMemAuto( GDALRWFlag eRWFlag,
int *pnPixelSpace,
GIntBig *pnLineSpace,
char **papszOptions ) override;
CPLErr AccessLine( int iLine );
void SetAccess( GDALAccess eAccess );
// this is deprecated.
void StoreNoDataValue( double );
// Query methods for internal data.
vsi_l_offset GetImgOffset() const { return nImgOffset; }
int GetPixelOffset() const { return nPixelOffset; }
int GetLineOffset() const { return nLineOffset; }
int GetNativeOrder() const { return bNativeOrder; }
VSILFILE *GetFPL() const { return fpRawL; }
int GetOwnsFP() const { return bOwnsFP; }
private:
CPL_DISALLOW_COPY_ASSIGN(RawRasterBand)
};
#ifdef GDAL_COMPILATION
bool RAWDatasetCheckMemoryUsage(int nXSize, int nYSize, int nBands,
int nDTSize,
int nPixelOffset,
int nLineOffset,
vsi_l_offset nHeaderSize,
vsi_l_offset nBandOffset,
VSILFILE* fp);
#endif
#endif // GDAL_FRMTS_RAW_RAWDATASET_H_INCLUDED