本文整理汇总了C++中DDFSubfieldDefn::GetDataLength方法的典型用法代码示例。如果您正苦于以下问题:C++ DDFSubfieldDefn::GetDataLength方法的具体用法?C++ DDFSubfieldDefn::GetDataLength怎么用?C++ DDFSubfieldDefn::GetDataLength使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DDFSubfieldDefn
的用法示例。
在下文中一共展示了DDFSubfieldDefn::GetDataLength方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GetRepeatCount
const char *DDFField::GetInstanceData( int nInstance,
int *pnInstanceSize )
{
int nRepeatCount = GetRepeatCount();
const char *pachWrkData;
if( nInstance < 0 || nInstance >= nRepeatCount )
return NULL;
/* -------------------------------------------------------------------- */
/* Special case for fields without subfields (like "0001"). We */
/* don't currently handle repeating simple fields. */
/* -------------------------------------------------------------------- */
if( poDefn->GetSubfieldCount() == 0 )
{
pachWrkData = GetData();
if( pnInstanceSize != 0 )
*pnInstanceSize = GetDataSize();
return pachWrkData;
}
/* -------------------------------------------------------------------- */
/* Get a pointer to the start of the existing data for this */
/* iteration of the field. */
/* -------------------------------------------------------------------- */
int nBytesRemaining1 = 0, nBytesRemaining2 = 0;
DDFSubfieldDefn *poFirstSubfield;
poFirstSubfield = poDefn->GetSubfield(0);
pachWrkData = GetSubfieldData(poFirstSubfield, &nBytesRemaining1,
nInstance);
/* -------------------------------------------------------------------- */
/* Figure out the size of the entire field instance, including */
/* unit terminators, but not any trailing field terminator. */
/* -------------------------------------------------------------------- */
if( pnInstanceSize != NULL )
{
DDFSubfieldDefn *poLastSubfield;
int nLastSubfieldWidth;
const char *pachLastData;
poLastSubfield = poDefn->GetSubfield(poDefn->GetSubfieldCount()-1);
pachLastData = GetSubfieldData( poLastSubfield, &nBytesRemaining2,
nInstance );
poLastSubfield->GetDataLength( pachLastData, nBytesRemaining2,
&nLastSubfieldWidth );
if((pachLastData[nLastSubfieldWidth-1] == 0) && (pachLastData[nLastSubfieldWidth - 2] == DDF_FIELD_TERMINATOR))
nLastSubfieldWidth -= 2;
*pnInstanceSize =
nBytesRemaining1 - (nBytesRemaining2 - nLastSubfieldWidth);
}
return pachWrkData;
}
示例2: while
const char *DDFField::GetSubfieldData( DDFSubfieldDefn *poSFDefn,
int *pnMaxBytes, int iSubfieldIndex )
{
int iOffset = 0;
if( poSFDefn == NULL )
return NULL;
if( iSubfieldIndex > 0 && poDefn->GetFixedWidth() > 0 )
{
iOffset = poDefn->GetFixedWidth() * iSubfieldIndex;
iSubfieldIndex = 0;
}
while( iSubfieldIndex >= 0 )
{
for( int iSF = 0; iSF < poDefn->GetSubfieldCount(); iSF++ )
{
int nBytesConsumed;
DDFSubfieldDefn * poThisSFDefn = poDefn->GetSubfield( iSF );
if( nDataSize < iOffset )
{
CPLError(CE_Failure, CPLE_AppDefined,
"Invalid data size for subfield %s of %s",
poThisSFDefn->GetName(), poDefn->GetName());
return NULL;
}
if( poThisSFDefn == poSFDefn && iSubfieldIndex == 0 )
{
if( pnMaxBytes != NULL )
*pnMaxBytes = nDataSize - iOffset;
return pachData + iOffset;
}
poThisSFDefn->GetDataLength( pachData+iOffset, nDataSize - iOffset,
&nBytesConsumed);
iOffset += nBytesConsumed;
}
iSubfieldIndex--;
}
// We didn't find our target subfield or instance!
return NULL;
}
示例3: main
//.........这里部分代码省略.........
const char* pachData = poField->GetData();
int nDataSize = poField->GetDataSize();
if( nRepeatCount == 1 && poDefn->GetSubfieldCount() == 0 )
{
printf(" value=\"0x");
for( int i = 0; i < nDataSize - 1; i++ )
printf( "%02X", pachData[i] );
printf("\">\n");
}
else
printf(">\n");
for( nLoopCount = 0; nLoopCount < nRepeatCount; nLoopCount++ )
{
for( int iSubField = 0; iSubField < poDefn->GetSubfieldCount(); iSubField++ )
{
int nBytesConsumed;
DDFSubfieldDefn* poSubFieldDefn = poDefn->GetSubfield(iSubField);
const char* pszSubFieldName = poSubFieldDefn->GetName();
printf(" <DDFSubfield name=\"%s\" ", pszSubFieldName);
DDFDataType eType = poSubFieldDefn->GetType();
const char* pachSubdata = pachData + iOffset;
int nMaxBytes = nDataSize - iOffset;
if( eType == DDFFloat )
printf("type=\"float\">%f",
poSubFieldDefn->ExtractFloatData( pachSubdata, nMaxBytes, NULL ) );
else if( eType == DDFInt )
printf("type=\"integer\">%d",
poSubFieldDefn->ExtractIntData( pachSubdata, nMaxBytes, NULL ) );
else if( eType == DDFBinaryString )
{
int nBytes, i;
GByte *pabyBString = (GByte *)
poSubFieldDefn->ExtractStringData( pachSubdata, nMaxBytes, &nBytes );
printf( "type=\"binary\">0x" );
for( i = 0; i < nBytes; i++ )
printf( "%02X", pabyBString[i] );
}
else
{
GByte* pabyString = (GByte *)poSubFieldDefn->ExtractStringData( pachSubdata, nMaxBytes, NULL );
int bBinary = FALSE;
int i;
for( i = 0; pabyString[i] != '\0'; i ++ )
{
if( pabyString[i] < 32 || pabyString[i] > 127 )
{
bBinary = TRUE;
break;
}
}
if( bBinary )
{
printf( "type=\"binary\">0x" );
for( i = 0; pabyString[i] != '\0'; i ++ )
printf( "%02X", pabyString[i] );
}
else
{
char* pszEscaped = CPLEscapeString((const char*)pabyString, -1, CPLES_XML);
printf("type=\"string\">%s", pszEscaped);
CPLFree(pszEscaped);
}
}
printf("</DDFSubfield>\n");
poSubFieldDefn->GetDataLength( pachSubdata, nMaxBytes, &nBytesConsumed );
iOffset += nBytesConsumed;
}
}
printf(" </DDFField>\n");
}
printf("</DDFRecord>\n");
}
printf("</DDFModule>\n");
}
else
{
oModule.Dump( stdout );
long nStartLoc;
nStartLoc = VSIFTellL( oModule.GetFP() );
for( poRecord = oModule.ReadRecord();
poRecord != NULL; poRecord = oModule.ReadRecord() )
{
printf( "File Offset: %ld\n", nStartLoc );
poRecord->Dump( stdout );
nStartLoc = VSIFTellL( oModule.GetFP() );
}
}
oModule.Close();
#ifdef DBMALLOC
malloc_dump(1);
#endif
}