www.pudn.com > mitab.rar > ogrfielddefn.cpp
/******************************************************************************
* $Id: ogrfielddefn.cpp,v 1.9 2003/05/28 19:16:42 warmerda Exp $
*
* Project: OpenGIS Simple Features Reference Implementation
* Purpose: The OGRFieldDefn class implementation.
* Author: Frank Warmerdam, warmerda@home.com
*
******************************************************************************
* Copyright (c) 1999, Les Technologies SoftMap Inc.
*
* 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.
******************************************************************************
*
* $Log: ogrfielddefn.cpp,v $
* Revision 1.9 2003/05/28 19:16:42 warmerda
* fixed up argument names and stuff for docs
*
* Revision 1.8 2003/04/03 23:39:11 danmo
* Small updates to C API docs (Normand S.)
*
* Revision 1.7 2003/03/31 15:55:42 danmo
* Added C API function docs
*
* Revision 1.6 2002/09/26 18:12:38 warmerda
* added C support
*
* Revision 1.5 2001/07/18 05:03:05 warmerda
* added CPL_CVSID
*
* Revision 1.4 1999/11/18 19:02:19 warmerda
* expanded tabs
*
* Revision 1.3 1999/11/04 21:07:09 warmerda
* Added the Set() method.
*
* Revision 1.2 1999/07/05 17:19:52 warmerda
* added docs
*
* Revision 1.1 1999/06/11 19:21:02 warmerda
* New
*/
#include "ogr_feature.h"
#include "ogr_api.h"
#include "ogr_p.h"
CPL_CVSID("$Id: ogrfielddefn.cpp,v 1.9 2003/05/28 19:16:42 warmerda Exp $");
/************************************************************************/
/* OGRFieldDefn() */
/************************************************************************/
/**
* Constructor.
*
* @param pszNameIn the name of the new field.
* @param eTypeIn the type of the new field.
*/
OGRFieldDefn::OGRFieldDefn( const char * pszNameIn, OGRFieldType eTypeIn )
{
Initialize( pszNameIn, eTypeIn );
}
/************************************************************************/
/* OGRFieldDefn() */
/************************************************************************/
/**
* Constructor.
*
* Create by cloning an existing field definition.
*
* @param poPrototype the field definition to clone.
*/
OGRFieldDefn::OGRFieldDefn( OGRFieldDefn *poPrototype )
{
Initialize( poPrototype->GetNameRef(), poPrototype->GetType() );
SetJustify( poPrototype->GetJustify() );
SetWidth( poPrototype->GetWidth() );
SetPrecision( poPrototype->GetPrecision() );
// SetDefault( poPrototype->GetDefaultRef() );
}
/************************************************************************/
/* OGR_Fld_Create() */
/************************************************************************/
/**
* Create a new field definition.
*
* This function is the same as the CPP method OGRFieldDefn::OGRFieldDefn().
*
* @param pszName the name of the new field definition.
* @param eType the type of the new field definition.
* @return handle to the new field definition.
*/
OGRFieldDefnH OGR_Fld_Create( const char *pszName, OGRFieldType eType )
{
return (OGRFieldDefnH) (new OGRFieldDefn(pszName,eType));
}
/************************************************************************/
/* Initialize() */
/************************************************************************/
void OGRFieldDefn::Initialize( const char * pszNameIn, OGRFieldType eTypeIn )
{
pszName = CPLStrdup( pszNameIn );
eType = eTypeIn;
eJustify = OJUndefined;
nWidth = 0; // should these be defined in some particular way
nPrecision = 0; // for numbers?
memset( &uDefault, 0, sizeof(OGRField) );
}
/************************************************************************/
/* ~OGRFieldDefn() */
/************************************************************************/
OGRFieldDefn::~OGRFieldDefn()
{
CPLFree( pszName );
}
/************************************************************************/
/* OGR_Fld_Destroy() */
/************************************************************************/
/**
* Destroy a field definition.
*
* @param hDefn handle to the field definition to destroy.
*/
void OGR_Fld_Destroy( OGRFieldDefnH hDefn )
{
delete (OGRFieldDefn *) hDefn;
}
/************************************************************************/
/* SetName() */
/************************************************************************/
/**
* Reset the name of this field.
*
* This method is the same as the C function OGR_Fld_SetName().
*
* @param pszNameIn the new name to apply.
*/
void OGRFieldDefn::SetName( const char * pszNameIn )
{
CPLFree( pszName );
pszName = CPLStrdup( pszNameIn );
}
/************************************************************************/
/* OGR_Fld_SetName() */
/************************************************************************/
/**
* Reset the name of this field.
*
* This function is the same as the CPP method OGRFieldDefn::SetName().
*
* @param hDefn handle to the field definition to apply the new name to.
* @param pszName the new name to apply.
*/
void OGR_Fld_SetName( OGRFieldDefnH hDefn, const char *pszName )
{
((OGRFieldDefn *) hDefn)->SetName( pszName );
}
/************************************************************************/
/* GetNameRef() */
/************************************************************************/
/**
* \fn const char *OGRFieldDefn::GetNameRef();
*
* Fetch name of this field.
*
* This method is the same as the C function OGR_Fld_GetNameRef().
*
* @return pointer to an internal name string that should not be freed or
* modified.
*/
/************************************************************************/
/* OGR_Fld_GetNameRef() */
/************************************************************************/
/**
* Fetch name of this field.
*
* This function is the same as the CPP method OGRFieldDefn::GetNameRef().
*
* @param hDefn handle to the field definition.
* @return the name of the field definition.
*
*/
const char *OGR_Fld_GetNameRef( OGRFieldDefnH hDefn )
{
return ((OGRFieldDefn *) hDefn)->GetNameRef();
}
/************************************************************************/
/* GetType() */
/************************************************************************/
/**
* \fn OGRFieldType OGRFieldDefn::GetType();
*
* Fetch type of this field.
*
* This method is the same as the C function OGR_Fld_GetType().
*
* @return field type.
*/
/************************************************************************/
/* OGR_Fld_GetType() */
/************************************************************************/
/**
* Fetch type of this field.
*
* This function is the same as the CPP method OGRFieldDefn::GetType().
*
* @param hDefn handle to the field definition to get type from.
* @return field type.
*/
OGRFieldType OGR_Fld_GetType( OGRFieldDefnH hDefn )
{
return ((OGRFieldDefn *) hDefn)->GetType();
}
/************************************************************************/
/* SetType() */
/************************************************************************/
/**
* \fn void OGRFieldDefn::SetType( OGRFieldType eType );
*
* Set the type of this field. This should never be done to an OGRFieldDefn
* that is already part of an OGRFeatureDefn.
*
* This method is the same as the C function OGR_Fld_SetType().
*
* @param eType the new field type.
*/
/************************************************************************/
/* OGR_Fld_SetType() */
/************************************************************************/
/**
* Set the type of this field. This should never be done to an OGRFieldDefn
* that is already part of an OGRFeatureDefn.
*
* This function is the same as the CPP method OGRFieldDefn::SetType().
*
* @param hDefn handle to the field definition to set type to.
* @param eType the new field type.
*/
void OGR_Fld_SetType( OGRFieldDefnH hDefn, OGRFieldType eType )
{
((OGRFieldDefn *) hDefn)->SetType( eType );
}
/************************************************************************/
/* SetDefault() */
/************************************************************************/
/**
* Set default field value.
*
* Currently use of OGRFieldDefn "defaults" is discouraged. This feature
* may be fleshed out in the future.
*
*/
void OGRFieldDefn::SetDefault( const OGRField * puDefaultIn )
{
switch( eType )
{
case OFTInteger:
case OFTReal:
uDefault = *puDefaultIn;
break;
case OFTString:
// CPLFree( uDefault.String );
// uDefault.String = CPLStrdup( puDefaultIn->String );
break;
default:
// add handling for other complex types.
CPLAssert( FALSE );
break;
}
}
/************************************************************************/
/* GetFieldTypeName() */
/************************************************************************/
/**
* Fetch human readable name for a field type.
*
* This static method is the same as the C function OGR_GetFieldTypeName().
*
* @param eType the field type to get name for.
*
* @return pointer to an internal static name string. It should not be
* modified or freed.
*/
const char * OGRFieldDefn::GetFieldTypeName( OGRFieldType eType )
{
switch( eType )
{
case OFTInteger:
return "Integer";
case OFTReal:
return "Real";
case OFTString:
return "String";
case OFTWideString:
return "WideString";
case OFTIntegerList:
return "IntegerList";
case OFTRealList:
return "RealList";
case OFTStringList:
return "StringList";
case OFTWideStringList:
return "WideStringList";
case OFTBinary:
return "Binary";
default:
CPLAssert( FALSE );
return "(unknown)";
}
}
/************************************************************************/
/* OGR_GetFieldTypeName() */
/************************************************************************/
/**
* Fetch human readable name for a field type.
*
* This function is the same as the CPP method
* OGRFieldDefn::GetFieldTypeName().
*
* @param eType the field type to get name for.
* @return the name.
*/
const char *OGR_GetFieldTypeName( OGRFieldType eType )
{
return OGRFieldDefn::GetFieldTypeName( eType );
}
/************************************************************************/
/* GetJustify() */
/************************************************************************/
/**
* \fn OGRJustification OGRFieldDefn::GetJustify();
*
* Get the justification for this field.
*
* This method is the same as the C function OGR_Fld_GetJustify().
*
* @return the justification.
*/
/************************************************************************/
/* OGR_Fld_GetJustify() */
/************************************************************************/
/**
* Get the justification for this field.
*
* This function is the same as the CPP method OGRFieldDefn::GetJustify().
*
* @param hDefn handle to the field definition to get justification from.
* @return the justification.
*/
OGRJustification OGR_Fld_GetJustify( OGRFieldDefnH hDefn )
{
return ((OGRFieldDefn *) hDefn)->GetJustify();
}
/************************************************************************/
/* SetJustify() */
/************************************************************************/
/**
* \fn void OGRFieldDefn::SetJustify( OGRJustification eJustify );
*
* Set the justification for this field.
*
* This method is the same as the C function OGR_Fld_SetJustify().
*
* @param eJustify the new justification.
*/
/************************************************************************/
/* OGR_Fld_SetJustify() */
/************************************************************************/
/**
* Set the justification for this field.
*
* This function is the same as the CPP method OGRFieldDefn::SetJustify().
*
* @param hDefn handle to the field definition to set justification to.
* @param eJustify the new justification.
*/
void OGR_Fld_SetJustify( OGRFieldDefnH hDefn, OGRJustification eJustify )
{
((OGRFieldDefn *) hDefn)->SetJustify( eJustify );
}
/************************************************************************/
/* GetWidth() */
/************************************************************************/
/**
* \fn int OGRFieldDefn::GetWidth();
*
* Get the formatting width for this field.
*
* This method is the same as the C function OGR_Fld_GetWidth().
*
* @return the width, zero means no specified width.
*/
/************************************************************************/
/* OGR_Fld_GetWidth() */
/************************************************************************/
/**
* Get the formatting width for this field.
*
* This function is the same as the CPP method OGRFieldDefn::GetWidth().
*
* @param hDefn handle to the field definition to get width from.
* @return the width, zero means no specified width.
*/
int OGR_Fld_GetWidth( OGRFieldDefnH hDefn )
{
return ((OGRFieldDefn *) hDefn)->GetWidth();
}
/************************************************************************/
/* SetWidth() */
/************************************************************************/
/**
* \fn void OGRFieldDefn::SetWidth( int nWidth );
*
* Set the formatting width for this field in characters.
*
* This method is the same as the C function OGR_Fld_SetWidth().
*
* @param nWidth the new width.
*/
/************************************************************************/
/* OGR_Fld_SetWidth() */
/************************************************************************/
/**
* Set the formatting width for this field in characters.
*
* This function is the same as the CPP method OGRFieldDefn::SetWidth().
*
* @param hDefn handle to the field definition to set width to.
* @param nNewWidth the new width.
*/
void OGR_Fld_SetWidth( OGRFieldDefnH hDefn, int nNewWidth )
{
((OGRFieldDefn *) hDefn)->SetWidth( nNewWidth );
}
/************************************************************************/
/* GetPrecision() */
/************************************************************************/
/**
* \fn int OGRFieldDefn::GetPrecision();
*
* Get the formatting precision for this field. This should normally be
* zero for fields of types other than OFTReal.
*
* This method is the same as the C function OGR_Fld_GetPrecision().
*
* @return the precision.
*/
/************************************************************************/
/* OGR_Fld_GetPrecision() */
/************************************************************************/
/**
* Get the formatting precision for this field. This should normally be
* zero for fields of types other than OFTReal.
*
* This function is the same as the CPP method OGRFieldDefn::GetPrecision().
*
* @param hDefn handle to the field definition to get precision from.
* @return the precision.
*/
int OGR_Fld_GetPrecision( OGRFieldDefnH hDefn )
{
return ((OGRFieldDefn *) hDefn)->GetPrecision();
}
/************************************************************************/
/* SetPrecision() */
/************************************************************************/
/**
* \fn void OGRFieldDefn::SetPrecision( int nPrecision );
*
* Set the formatting precision for this field in characters.
*
* This should normally be zero for fields of types other than OFTReal.
*
* This method is the same as the C function OGR_Fld_SetPrecision().
*
* @param nPrecision the new precision.
*/
/************************************************************************/
/* OGR_Fld_SetPrecision() */
/************************************************************************/
/**
* Set the formatting precision for this field in characters.
*
* This should normally be zero for fields of types other than OFTReal.
*
* This function is the same as the CPP method OGRFieldDefn::SetPrecision().
*
* @param hDefn handle to the field definition to set precision to.
* @param nPrecision the new precision.
*/
void OGR_Fld_SetPrecision( OGRFieldDefnH hDefn, int nPrecision )
{
((OGRFieldDefn *) hDefn)->SetPrecision( nPrecision );
}
/************************************************************************/
/* Set() */
/************************************************************************/
/**
* Set defining parameters for a field in one call.
*
* This method is the same as the C function OGR_Fld_Set().
*
* @param pszNameIn the new name to assign.
* @param eTypeIn the new type (one of the OFT values like OFTInteger).
* @param nWidthIn the preferred formatting width. Defaults to zero indicating
* undefined.
* @param nPrecisionIn number of decimals places for formatting, defaults to
* zero indicating undefined.
* @param eJustifyIn the formatting justification (OJLeft or OJRight), defaults
* to OJUndefined.
*/
void OGRFieldDefn::Set( const char *pszNameIn,
OGRFieldType eTypeIn,
int nWidthIn, int nPrecisionIn,
OGRJustification eJustifyIn )
{
SetName( pszNameIn );
SetType( eTypeIn );
SetWidth( nWidthIn );
SetPrecision( nPrecisionIn );
SetJustify( eJustifyIn );
}
/************************************************************************/
/* OGR_Fld_Set() */
/************************************************************************/
/**
* Set defining parameters for a field in one call.
*
* This function is the same as the CPP method OGRFieldDefn::Set().
*
* @param hDefn handle to the field definition to set to.
* @param pszNameIn the new name to assign.
* @param eTypeIn the new type (one of the OFT values like OFTInteger).
* @param nWidthIn the preferred formatting width. Defaults to zero indicating
* undefined.
* @param nPrecisionIn number of decimals places for formatting, defaults to
* zero indicating undefined.
* @param eJustifyIn the formatting justification (OJLeft or OJRight), defaults
* to OJUndefined.
*/
void OGR_Fld_Set( OGRFieldDefnH hDefn, const char *pszNameIn,
OGRFieldType eTypeIn,
int nWidthIn, int nPrecisionIn,
OGRJustification eJustifyIn )
{
((OGRFieldDefn *) hDefn)->Set( pszNameIn, eTypeIn, nWidthIn,
nPrecisionIn, eJustifyIn );
}