本文整理汇总了C++中HFAEntry类的典型用法代码示例。如果您正苦于以下问题:C++ HFAEntry类的具体用法?C++ HFAEntry怎么用?C++ HFAEntry使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了HFAEntry类的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: HFAAllocateSpace
void HFAEntry::SetPosition()
{
/* -------------------------------------------------------------------- */
/* Establish the location of this entry, and it's data. */
/* -------------------------------------------------------------------- */
if( nFilePos == 0 )
{
nFilePos = HFAAllocateSpace( psHFA,
psHFA->nEntryHeaderLength
+ nDataSize );
if( nDataSize > 0 )
nDataPos = nFilePos + psHFA->nEntryHeaderLength;
}
/* -------------------------------------------------------------------- */
/* Force all children to set their position. */
/* -------------------------------------------------------------------- */
for( HFAEntry *poThisChild = poChild;
poThisChild != NULL;
poThisChild = poThisChild->poNext )
{
poThisChild->SetPosition();
}
}
示例2: GetPCT
CPLErr HFABand::GetPCT( int * pnColors,
double **ppadfRed,
double **ppadfGreen,
double **ppadfBlue )
{
*pnColors = 0;
*ppadfRed = NULL;
*ppadfGreen = NULL;
*ppadfBlue = NULL;
/* -------------------------------------------------------------------- */
/* If we haven't already tried to load the colors, do so now. */
/* -------------------------------------------------------------------- */
if( nPCTColors == -1 )
{
HFAEntry *poColumnEntry;
int i, iColumn;
nPCTColors = 0;
poColumnEntry = poNode->GetNamedChild("Descriptor_Table.Red");
if( poColumnEntry == NULL )
return( CE_Failure );
nPCTColors = poColumnEntry->GetIntField( "numRows" );
for( iColumn = 0; iColumn < 3; iColumn++ )
{
apadfPCT[iColumn] = (double *)CPLMalloc(sizeof(double)*nPCTColors);
if( iColumn == 0 )
poColumnEntry = poNode->GetNamedChild("Descriptor_Table.Red");
else if( iColumn == 1 )
poColumnEntry= poNode->GetNamedChild("Descriptor_Table.Green");
else if( iColumn == 2 )
poColumnEntry = poNode->GetNamedChild("Descriptor_Table.Blue");
VSIFSeek( psInfo->fp, poColumnEntry->GetIntField("columnDataPtr"),
SEEK_SET );
VSIFRead( apadfPCT[iColumn], sizeof(double), nPCTColors,
psInfo->fp);
for( i = 0; i < nPCTColors; i++ )
HFAStandard( 8, apadfPCT[iColumn] + i );
}
}
/* -------------------------------------------------------------------- */
/* Return the values. */
/* -------------------------------------------------------------------- */
if( nPCTColors == 0 )
return( CE_Failure );
*pnColors = nPCTColors;
*ppadfRed = apadfPCT[0];
*ppadfGreen = apadfPCT[1];
*ppadfBlue = apadfPCT[2];
return( CE_None );
}
示例3: EQUAL
std::vector<HFAEntry*> HFAEntry::FindChildren( const char *pszName,
const char *pszType )
{
std::vector<HFAEntry*> apoChildren;
HFAEntry *poEntry;
if( this == NULL )
return apoChildren;
for( poEntry = GetChild(); poEntry != NULL; poEntry = poEntry->GetNext() )
{
std::vector<HFAEntry*> apoEntryChildren;
size_t i;
if( (pszName == NULL || EQUAL(poEntry->GetName(),pszName))
&& (pszType == NULL || EQUAL(poEntry->GetType(),pszType)) )
apoChildren.push_back( poEntry );
apoEntryChildren = poEntry->FindChildren( pszName, pszType );
for( i = 0; i < apoEntryChildren.size(); i++ )
apoChildren.push_back( apoEntryChildren[i] );
}
return apoChildren;
}
示例4: return
const Eprj_Datum *HFAGetDatum( HFAHandle hHFA )
{
HFAEntry *poMIEntry;
Eprj_Datum *psDatum;
int i;
if( hHFA->nBands < 1 )
return NULL;
/* -------------------------------------------------------------------- */
/* Do we already have it? */
/* -------------------------------------------------------------------- */
if( hHFA->pDatum != NULL )
return( (Eprj_Datum *) hHFA->pDatum );
/* -------------------------------------------------------------------- */
/* Get the HFA node. */
/* -------------------------------------------------------------------- */
poMIEntry = hHFA->papoBand[0]->poNode->GetNamedChild( "Projection.Datum" );
if( poMIEntry == NULL )
return NULL;
/* -------------------------------------------------------------------- */
/* Allocate the structure. */
/* -------------------------------------------------------------------- */
psDatum = (Eprj_Datum *) CPLCalloc(sizeof(Eprj_Datum),1);
/* -------------------------------------------------------------------- */
/* Fetch the fields. */
/* -------------------------------------------------------------------- */
psDatum->datumname = CPLStrdup(poMIEntry->GetStringField("datumname"));
psDatum->type = (Eprj_DatumType) poMIEntry->GetIntField("type");
for( i = 0; i < 7; i++ )
{
char szFieldName[30];
sprintf( szFieldName, "params[%d]", i );
psDatum->params[i] = poMIEntry->GetDoubleField(szFieldName);
}
psDatum->gridname = CPLStrdup(poMIEntry->GetStringField("gridname"));
hHFA->pDatum = (void *) psDatum;
return psDatum;
}
示例5: return
CPLErr HFABand::LoadBlockInfo()
{
int iBlock;
HFAEntry *poDMS;
if( panBlockStart != NULL )
return( CE_None );
poDMS = poNode->GetNamedChild( "RasterDMS" );
if( poDMS == NULL )
{
CPLError( CE_Failure, CPLE_AppDefined,
"Can't find RasterDMS field in Eimg_Layer with block list.\n");
return CE_Failure;
}
panBlockStart = (int *) CPLMalloc(sizeof(int) * nBlocks);
panBlockSize = (int *) CPLMalloc(sizeof(int) * nBlocks);
panBlockFlag = (int *) CPLMalloc(sizeof(int) * nBlocks);
for( iBlock = 0; iBlock < nBlocks; iBlock++ )
{
char szVarName[64];
int nLogvalid, nCompressType;
sprintf( szVarName, "blockinfo[%d].offset", iBlock );
panBlockStart[iBlock] = poDMS->GetIntField( szVarName );
sprintf( szVarName, "blockinfo[%d].size", iBlock );
panBlockSize[iBlock] = poDMS->GetIntField( szVarName );
sprintf( szVarName, "blockinfo[%d].logvalid", iBlock );
nLogvalid = poDMS->GetIntField( szVarName );
sprintf( szVarName, "blockinfo[%d].compressionType", iBlock );
nCompressType = poDMS->GetIntField( szVarName );
panBlockFlag[iBlock] = 0;
if( nLogvalid )
panBlockFlag[iBlock] |= BFLG_VALID;
if( nCompressType != 0 )
panBlockFlag[iBlock] |= BFLG_COMPRESSED;
}
return( CE_None );
}
示例6: CPLError
std::vector<HFAEntry*> HFAEntry::FindChildren( const char *pszName,
const char *pszType,
int nRecLevel,
int* pbErrorDetected )
{
std::vector<HFAEntry*> apoChildren;
if( *pbErrorDetected )
return apoChildren;
if( nRecLevel == 50 )
{
CPLError(CE_Failure, CPLE_AppDefined,
"Bad entry structure: recursion detected !");
*pbErrorDetected = TRUE;
return apoChildren;
}
for( HFAEntry *poEntry = GetChild();
poEntry != NULL;
poEntry = poEntry->GetNext() )
{
std::vector<HFAEntry*> apoEntryChildren;
if( (pszName == NULL || EQUAL(poEntry->GetName(), pszName))
&& (pszType == NULL || EQUAL(poEntry->GetType(), pszType)) )
apoChildren.push_back( poEntry );
apoEntryChildren =
poEntry->FindChildren(pszName, pszType, nRecLevel + 1,
pbErrorDetected);
if( *pbErrorDetected )
return apoChildren;
for( size_t i = 0; i < apoEntryChildren.size(); i++ )
apoChildren.push_back( apoEntryChildren[i] );
}
return apoChildren;
}
示例7: HFAGetDataRange
CPLErr HFAGetDataRange( HFAHandle hHFA, int nBand,
double * pdfMin, double *pdfMax )
{
HFAEntry *poBinInfo;
if( nBand < 1 || nBand > hHFA->nBands )
return CE_Failure;
poBinInfo = hHFA->papoBand[nBand-1]->poNode->GetNamedChild("Statistics" );
if( poBinInfo == NULL )
return( CE_Failure );
*pdfMin = poBinInfo->GetDoubleField( "minimum" );
*pdfMax = poBinInfo->GetDoubleField( "maximum" );
if( *pdfMax > *pdfMin )
return CE_None;
else
return CE_Failure;
}
示例8: strlen
HFAEntry *HFAEntry::GetNamedChild( const char * pszName )
{
int nNameLen;
HFAEntry *poEntry;
/* -------------------------------------------------------------------- */
/* Establish how much of this name path is for the next child. */
/* Up to the '.' or end of estring. */
/* -------------------------------------------------------------------- */
for( nNameLen = 0;
pszName[nNameLen] != '.'
&& pszName[nNameLen] != '\0'
&& pszName[nNameLen] != ':';
nNameLen++ ) {}
/* -------------------------------------------------------------------- */
/* Scan children looking for this name. */
/* -------------------------------------------------------------------- */
for( poEntry = GetChild(); poEntry != NULL; poEntry = poEntry->GetNext() )
{
if( EQUALN(poEntry->GetName(),pszName,nNameLen)
&& (int) strlen(poEntry->GetName()) == nNameLen )
{
if( pszName[nNameLen] == '.' )
{
HFAEntry *poResult;
poResult = poEntry->GetNamedChild( pszName+nNameLen+1 );
if( poResult != NULL )
return poResult;
}
else
return poEntry;
}
}
return NULL;
}
示例9: strlen
HFAEntry *HFAEntry::GetNamedChild( const char * pszName )
{
int nNameLen;
HFAEntry *poEntry;
/* -------------------------------------------------------------------- */
/* Establish how much of this name path is for the next child. */
/* Up to the '.' or end of estring. */
/* -------------------------------------------------------------------- */
for( nNameLen = 0;
pszName[nNameLen] != '.'
&& pszName[nNameLen] != '\0'
&& pszName[nNameLen] != ':';
nNameLen++ ) {}
/* -------------------------------------------------------------------- */
/* Scan children looking for this name. */
/* -------------------------------------------------------------------- */
for( poEntry = GetChild(); poEntry != NULL; poEntry = poEntry->GetNext() )
{
if( EQUALN(poEntry->GetName(),pszName,nNameLen)
&& (int) strlen(poEntry->GetName()) == nNameLen )
{
break;
}
}
/* -------------------------------------------------------------------- */
/* Is there a remainder to process? */
/* -------------------------------------------------------------------- */
if( poEntry != NULL && pszName[nNameLen] == '.' )
return( poEntry->GetNamedChild( pszName+nNameLen+1 ) );
else
return( poEntry );
}
示例10: HFAOpen
HFAHandle HFAOpen( const char * pszFilename, const char * pszAccess )
{
FILE *fp;
char szHeader[16];
HFAInfo_t *psInfo;
GUInt32 nHeaderPos;
HFAEntry *poNode;
/* -------------------------------------------------------------------- */
/* Open the file. */
/* -------------------------------------------------------------------- */
if( EQUAL(pszAccess,"r") || EQUAL(pszAccess,"rb" ) )
fp = VSIFOpen( pszFilename, "rb" );
else
fp = VSIFOpen( pszFilename, "r+b" );
/* should this be changed to use some sort of CPLFOpen() which will
set the error? */
if( fp == NULL )
{
CPLError( CE_Failure, CPLE_OpenFailed,
"File open of %s failed.",
pszFilename );
return NULL;
}
/* -------------------------------------------------------------------- */
/* Read and verify the header. */
/* -------------------------------------------------------------------- */
if( VSIFRead( szHeader, 16, 1, fp ) < 1 )
{
CPLError( CE_Failure, CPLE_AppDefined,
"Attempt to read 16 byte header failed for\n%s.",
pszFilename );
return NULL;
}
if( !EQUALN(szHeader,"EHFA_HEADER_TAG",15) )
{
CPLError( CE_Failure, CPLE_AppDefined,
"File %s is not an Imagine HFA file ... header wrong.",
pszFilename );
return NULL;
}
/* -------------------------------------------------------------------- */
/* Create the HFAInfo_t */
/* -------------------------------------------------------------------- */
psInfo = (HFAInfo_t *) CPLCalloc(sizeof(HFAInfo_t),1);
psInfo->fp = fp;
/* -------------------------------------------------------------------- */
/* Where is the header? */
/* -------------------------------------------------------------------- */
VSIFRead( &nHeaderPos, sizeof(GInt32), 1, fp );
HFAStandard( 4, &nHeaderPos );
/* -------------------------------------------------------------------- */
/* Read the header. */
/* -------------------------------------------------------------------- */
VSIFSeek( fp, nHeaderPos, SEEK_SET );
VSIFRead( &(psInfo->nVersion), sizeof(GInt32), 1, fp );
HFAStandard( 4, &(psInfo->nVersion) );
VSIFRead( szHeader, 4, 1, fp ); /* skip freeList */
VSIFRead( &(psInfo->nRootPos), sizeof(GInt32), 1, fp );
HFAStandard( 4, &(psInfo->nRootPos) );
VSIFRead( &(psInfo->nEntryHeaderLength), sizeof(GInt16), 1, fp );
HFAStandard( 2, &(psInfo->nEntryHeaderLength) );
VSIFRead( &(psInfo->nDictionaryPos), sizeof(GInt32), 1, fp );
HFAStandard( 4, &(psInfo->nDictionaryPos) );
/* -------------------------------------------------------------------- */
/* Instantiate the root entry. */
/* -------------------------------------------------------------------- */
psInfo->poRoot = new HFAEntry( psInfo, psInfo->nRootPos, NULL, NULL );
/* -------------------------------------------------------------------- */
/* Read the dictionary */
/* -------------------------------------------------------------------- */
psInfo->pszDictionary = HFAGetDictionary( psInfo );
psInfo->poDictionary = new HFADictionary( psInfo->pszDictionary );
/* -------------------------------------------------------------------- */
/* Find the first band node. */
/* -------------------------------------------------------------------- */
psInfo->nBands = 0;
poNode = psInfo->poRoot->GetChild();
while( poNode != NULL )
{
if( EQUAL(poNode->GetType(),"Eimg_Layer") )
//.........这里部分代码省略.........
示例11: main
//.........这里部分代码省略.........
/* -------------------------------------------------------------------- */
/* Dump indirectly collected data about bands. */
/* -------------------------------------------------------------------- */
HFAGetRasterInfo( hHFA, &nXSize, &nYSize, &nBands );
if( nRastReport )
{
printf( "Raster Size = %d x %d\n", nXSize, nYSize );
for( i = 1; i <= nBands; i++ )
{
int nDataType, nColors, nOverviews, iOverview;
double *padfRed, *padfGreen, *padfBlue, *padfAlpha, *padfBins;
int nBlockXSize, nBlockYSize, nCompressionType;
HFAGetBandInfo( hHFA, i, &nDataType, &nBlockXSize, &nBlockYSize,
&nCompressionType );
nOverviews = HFAGetOverviewCount( hHFA, i );
printf( "Band %d: %dx%d tiles, type = %d\n",
i, nBlockXSize, nBlockYSize, nDataType );
for( iOverview=0; iOverview < nOverviews; iOverview++ )
{
HFAGetOverviewInfo( hHFA, i, iOverview,
&nXSize, &nYSize,
&nBlockXSize, &nBlockYSize, NULL );
printf( " Overview: %dx%d (blocksize %dx%d)\n",
nXSize, nYSize, nBlockXSize, nBlockYSize );
}
if( HFAGetPCT( hHFA, i, &nColors, &padfRed, &padfGreen,
&padfBlue, &padfAlpha, &padfBins )
== CE_None )
{
int j;
for( j = 0; j < nColors; j++ )
{
printf( "PCT[%d] = %f,%f,%f %f\n",
(padfBins != NULL) ? (int) padfBins[j] : j,
padfRed[j], padfGreen[j],
padfBlue[j], padfAlpha[j]);
}
}
/* -------------------------------------------------------------------- */
/* Report statistics. We need to dig directly into the C++ API. */
/* -------------------------------------------------------------------- */
HFABand *poBand = hHFA->papoBand[i-1];
HFAEntry *poStats = poBand->poNode->GetNamedChild( "Statistics" );
if( poStats != NULL )
{
printf( " Min: %g Max: %g Mean: %g\n",
poStats->GetDoubleField( "minimum" ),
poStats->GetDoubleField( "maximum" ),
poStats->GetDoubleField( "mean" ) );
printf( " Median: %g Mode: %g Stddev: %g\n",
poStats->GetDoubleField( "median" ),
poStats->GetDoubleField( "mode" ),
poStats->GetDoubleField( "stddev" ) );
}
else
printf( " No Statistics found.\n" );
}
/* -------------------------------------------------------------------- */
/* Dump the map info structure. */
/* -------------------------------------------------------------------- */
psMapInfo = HFAGetMapInfo( hHFA );
if( psMapInfo != NULL )
{
printf( "MapInfo.proName = %s\n", psMapInfo->proName );
printf( "MapInfo.upperLeftCenter.x = %.2f\n",
psMapInfo->upperLeftCenter.x );
printf( "MapInfo.upperLeftCenter.y = %.2f\n",
psMapInfo->upperLeftCenter.y );
}
else
{
printf( "No Map Info found\n" );
}
}
psProParameters = HFAGetProParameters( hHFA );
psDatum = HFAGetDatum( hHFA );
HFAClose( hHFA );
#ifdef DBMALLOC
malloc_dump(1);
#endif
exit( 0 );
}
示例12: SetPosition
CPLErr HFAEntry::FlushToDisk()
{
CPLErr eErr = CE_None;
/* -------------------------------------------------------------------- */
/* If we are the root node, call SetPosition() on the whole */
/* tree to ensure that all entries have an allocated position. */
/* -------------------------------------------------------------------- */
if( poParent == NULL )
SetPosition();
/* ==================================================================== */
/* Only write this node out if it is dirty. */
/* ==================================================================== */
if( bDirty )
{
/* -------------------------------------------------------------------- */
/* Ensure we know where the relative entries are located. */
/* -------------------------------------------------------------------- */
if( poNext != NULL )
nNextPos = poNext->nFilePos;
if( poChild != NULL )
nChildPos = poChild->nFilePos;
/* -------------------------------------------------------------------- */
/* Write the Ehfa_Entry fields. */
/* -------------------------------------------------------------------- */
GUInt32 nLong;
//VSIFFlushL( psHFA->fp );
if( VSIFSeekL( psHFA->fp, nFilePos, SEEK_SET ) != 0 )
{
CPLError( CE_Failure, CPLE_FileIO,
"Failed to seek to %d for writing, out of disk space?",
nFilePos );
return CE_Failure;
}
nLong = nNextPos;
HFAStandard( 4, &nLong );
VSIFWriteL( &nLong, 4, 1, psHFA->fp );
if( poPrev != NULL )
nLong = poPrev->nFilePos;
else
nLong = 0;
HFAStandard( 4, &nLong );
VSIFWriteL( &nLong, 4, 1, psHFA->fp );
if( poParent != NULL )
nLong = poParent->nFilePos;
else
nLong = 0;
HFAStandard( 4, &nLong );
VSIFWriteL( &nLong, 4, 1, psHFA->fp );
nLong = nChildPos;
HFAStandard( 4, &nLong );
VSIFWriteL( &nLong, 4, 1, psHFA->fp );
nLong = nDataPos;
HFAStandard( 4, &nLong );
VSIFWriteL( &nLong, 4, 1, psHFA->fp );
nLong = nDataSize;
HFAStandard( 4, &nLong );
VSIFWriteL( &nLong, 4, 1, psHFA->fp );
VSIFWriteL( szName, 1, 64, psHFA->fp );
VSIFWriteL( szType, 1, 32, psHFA->fp );
nLong = 0; /* Should we keep the time, or set it more reasonably? */
if( VSIFWriteL( &nLong, 4, 1, psHFA->fp ) != 1 )
{
CPLError( CE_Failure, CPLE_FileIO,
"Failed to write HFAEntry %s(%s), out of disk space?",
szName, szType );
return CE_Failure;
}
/* -------------------------------------------------------------------- */
/* Write out the data. */
/* -------------------------------------------------------------------- */
//VSIFFlushL( psHFA->fp );
if( nDataSize > 0 && pabyData != NULL )
{
if( VSIFSeekL( psHFA->fp, nDataPos, SEEK_SET ) != 0
|| VSIFWriteL( pabyData, nDataSize, 1, psHFA->fp ) != 1 )
{
CPLError( CE_Failure, CPLE_FileIO,
"Failed to write %d bytes HFAEntry %s(%s) data,\n"
"out of disk space?",
nDataSize, szName, szType );
return CE_Failure;
}
}
//.........这里部分代码省略.........