OGR
|
00001 /****************************************************************************** 00002 * $Id: cpl_conv.h 15574 2008-10-22 04:58:43Z warmerdam $ 00003 * 00004 * Project: CPL - Common Portability Library 00005 * Purpose: Convenience functions declarations. 00006 * This is intended to remain light weight. 00007 * Author: Frank Warmerdam, warmerdam@pobox.com 00008 * 00009 ****************************************************************************** 00010 * Copyright (c) 1998, Frank Warmerdam 00011 * 00012 * Permission is hereby granted, free of charge, to any person obtaining a 00013 * copy of this software and associated documentation files (the "Software"), 00014 * to deal in the Software without restriction, including without limitation 00015 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 00016 * and/or sell copies of the Software, and to permit persons to whom the 00017 * Software is furnished to do so, subject to the following conditions: 00018 * 00019 * The above copyright notice and this permission notice shall be included 00020 * in all copies or substantial portions of the Software. 00021 * 00022 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 00023 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 00024 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 00025 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 00026 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 00027 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 00028 * DEALINGS IN THE SOFTWARE. 00029 ****************************************************************************/ 00030 00031 #ifndef CPL_CONV_H_INCLUDED 00032 #define CPL_CONV_H_INCLUDED 00033 00034 #include "cpl_port.h" 00035 #include "cpl_vsi.h" 00036 #include "cpl_error.h" 00037 00045 /* -------------------------------------------------------------------- */ 00046 /* Runtime check of various configuration items. */ 00047 /* -------------------------------------------------------------------- */ 00048 CPL_C_START 00049 00050 void CPL_DLL CPLVerifyConfiguration(void); 00051 00052 const char CPL_DLL * CPL_STDCALL 00053 CPLGetConfigOption( const char *, const char * ); 00054 void CPL_DLL CPL_STDCALL CPLSetConfigOption( const char *, const char * ); 00055 void CPL_DLL CPL_STDCALL CPLFreeConfig(void); 00056 00057 /* -------------------------------------------------------------------- */ 00058 /* Safe malloc() API. Thin cover over VSI functions with fatal */ 00059 /* error reporting if memory allocation fails. */ 00060 /* -------------------------------------------------------------------- */ 00061 void CPL_DLL *CPLMalloc( size_t ); 00062 void CPL_DLL *CPLCalloc( size_t, size_t ); 00063 void CPL_DLL *CPLRealloc( void *, size_t ); 00064 char CPL_DLL *CPLStrdup( const char * ); 00065 char CPL_DLL *CPLStrlwr( char *); 00066 00067 #define CPLFree VSIFree 00068 00069 /* -------------------------------------------------------------------- */ 00070 /* Read a line from a text file, and strip of CR/LF. */ 00071 /* -------------------------------------------------------------------- */ 00072 char CPL_DLL *CPLFGets( char *, int, FILE *); 00073 const char CPL_DLL *CPLReadLine( FILE * ); 00074 const char CPL_DLL *CPLReadLineL( FILE * ); 00075 00076 /* -------------------------------------------------------------------- */ 00077 /* Convert ASCII string to floationg point number */ 00078 /* (THESE FUNCTIONS ARE NOT LOCALE AWARE!). */ 00079 /* -------------------------------------------------------------------- */ 00080 double CPL_DLL CPLAtof(const char *); 00081 double CPL_DLL CPLAtofDelim(const char *, char); 00082 double CPL_DLL CPLStrtod(const char *, char **); 00083 double CPL_DLL CPLStrtodDelim(const char *, char **, char); 00084 float CPL_DLL CPLStrtof(const char *, char **); 00085 float CPL_DLL CPLStrtofDelim(const char *, char **, char); 00086 00087 /* -------------------------------------------------------------------- */ 00088 /* Convert number to string. This function is locale agnostic */ 00089 /* (ie. it will support "," or "." regardless of current locale) */ 00090 /* -------------------------------------------------------------------- */ 00091 double CPL_DLL CPLAtofM(const char *); 00092 00093 /* -------------------------------------------------------------------- */ 00094 /* Read a numeric value from an ASCII character string. */ 00095 /* -------------------------------------------------------------------- */ 00096 char CPL_DLL *CPLScanString( const char *, int, int, int ); 00097 double CPL_DLL CPLScanDouble( const char *, int ); 00098 long CPL_DLL CPLScanLong( const char *, int ); 00099 unsigned long CPL_DLL CPLScanULong( const char *, int ); 00100 GUIntBig CPL_DLL CPLScanUIntBig( const char *, int ); 00101 void CPL_DLL *CPLScanPointer( const char *, int ); 00102 00103 /* -------------------------------------------------------------------- */ 00104 /* Print a value to an ASCII character string. */ 00105 /* -------------------------------------------------------------------- */ 00106 int CPL_DLL CPLPrintString( char *, const char *, int ); 00107 int CPL_DLL CPLPrintStringFill( char *, const char *, int ); 00108 int CPL_DLL CPLPrintInt32( char *, GInt32 , int ); 00109 int CPL_DLL CPLPrintUIntBig( char *, GUIntBig , int ); 00110 int CPL_DLL CPLPrintDouble( char *, const char *, double, const char * ); 00111 int CPL_DLL CPLPrintTime( char *, int , const char *, const struct tm *, 00112 const char * ); 00113 int CPL_DLL CPLPrintPointer( char *, void *, int ); 00114 00115 /* -------------------------------------------------------------------- */ 00116 /* Fetch a function from DLL / so. */ 00117 /* -------------------------------------------------------------------- */ 00118 00119 void CPL_DLL *CPLGetSymbol( const char *, const char * ); 00120 00121 /* -------------------------------------------------------------------- */ 00122 /* Fetch executable path. */ 00123 /* -------------------------------------------------------------------- */ 00124 int CPL_DLL CPLGetExecPath( char *pszPathBuf, int nMaxLength ); 00125 00126 /* -------------------------------------------------------------------- */ 00127 /* Filename handling functions. */ 00128 /* -------------------------------------------------------------------- */ 00129 const char CPL_DLL *CPLGetPath( const char * ); 00130 const char CPL_DLL *CPLGetDirname( const char * ); 00131 const char CPL_DLL *CPLGetFilename( const char * ); 00132 const char CPL_DLL *CPLGetBasename( const char * ); 00133 const char CPL_DLL *CPLGetExtension( const char * ); 00134 char CPL_DLL *CPLGetCurrentDir(void); 00135 const char CPL_DLL *CPLFormFilename( const char *pszPath, 00136 const char *pszBasename, 00137 const char *pszExtension ); 00138 const char CPL_DLL *CPLFormCIFilename( const char *pszPath, 00139 const char *pszBasename, 00140 const char *pszExtension ); 00141 const char CPL_DLL *CPLResetExtension( const char *, const char * ); 00142 const char CPL_DLL *CPLProjectRelativeFilename( const char *pszProjectDir, 00143 const char *pszSecondaryFilename ); 00144 int CPL_DLL CPLIsFilenameRelative( const char *pszFilename ); 00145 const char CPL_DLL *CPLExtractRelativePath(const char *, const char *, int *); 00146 const char CPL_DLL *CPLCleanTrailingSlash( const char * ); 00147 char CPL_DLL **CPLCorrespondingPaths( const char *pszOldFilename, 00148 const char *pszNewFilename, 00149 char **papszFileList ); 00150 int CPL_DLL CPLCheckForFile( char *pszFilename, char **papszSiblingList ); 00151 00152 const char CPL_DLL *CPLGenerateTempFilename( const char *pszStem ); 00153 00154 /* -------------------------------------------------------------------- */ 00155 /* Find File Function */ 00156 /* -------------------------------------------------------------------- */ 00157 typedef const char *(*CPLFileFinder)(const char *, const char *); 00158 00159 const char CPL_DLL *CPLFindFile(const char *pszClass, 00160 const char *pszBasename); 00161 const char CPL_DLL *CPLDefaultFindFile(const char *pszClass, 00162 const char *pszBasename); 00163 void CPL_DLL CPLPushFileFinder( CPLFileFinder pfnFinder ); 00164 CPLFileFinder CPL_DLL CPLPopFileFinder(void); 00165 void CPL_DLL CPLPushFinderLocation( const char * ); 00166 void CPL_DLL CPLPopFinderLocation(void); 00167 void CPL_DLL CPLFinderClean(void); 00168 00169 /* -------------------------------------------------------------------- */ 00170 /* Safe version of stat() that works properly on stuff like "C:". */ 00171 /* -------------------------------------------------------------------- */ 00172 int CPL_DLL CPLStat( const char *, VSIStatBuf * ); 00173 00174 /* -------------------------------------------------------------------- */ 00175 /* Reference counted file handle manager. Makes sharing file */ 00176 /* handles more practical. */ 00177 /* -------------------------------------------------------------------- */ 00178 typedef struct { 00179 FILE *fp; 00180 int nRefCount; 00181 int bLarge; 00182 char *pszFilename; 00183 char *pszAccess; 00184 } CPLSharedFileInfo; 00185 00186 FILE CPL_DLL *CPLOpenShared( const char *, const char *, int ); 00187 void CPL_DLL CPLCloseShared( FILE * ); 00188 CPLSharedFileInfo CPL_DLL *CPLGetSharedList( int * ); 00189 void CPL_DLL CPLDumpSharedList( FILE * ); 00190 00191 /* -------------------------------------------------------------------- */ 00192 /* DMS to Dec to DMS conversion. */ 00193 /* -------------------------------------------------------------------- */ 00194 double CPL_DLL CPLDMSToDec( const char *is ); 00195 const char CPL_DLL *CPLDecToDMS( double dfAngle, const char * pszAxis, 00196 int nPrecision ); 00197 double CPL_DLL CPLPackedDMSToDec( double ); 00198 double CPL_DLL CPLDecToPackedDMS( double dfDec ); 00199 00200 void CPL_DLL CPLStringToComplex( const char *pszString, 00201 double *pdfReal, double *pdfImag ); 00202 00203 /* -------------------------------------------------------------------- */ 00204 /* Misc other functions. */ 00205 /* -------------------------------------------------------------------- */ 00206 int CPL_DLL CPLUnlinkTree( const char * ); 00207 int CPL_DLL CPLCopyFile( const char *pszNewPath, const char *pszOldPath ); 00208 int CPL_DLL CPLMoveFile( const char *pszNewPath, const char *pszOldPath ); 00209 00210 CPL_C_END 00211 00212 /* -------------------------------------------------------------------- */ 00213 /* C++ object for temporariliy forcing a LC_NUMERIC locale to "C". */ 00214 /* -------------------------------------------------------------------- */ 00215 00216 #if defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS) 00217 00218 class CPLLocaleC 00219 { 00220 private: 00221 char *pszOldLocale; 00222 00223 public: 00224 CPLLocaleC(); 00225 ~CPLLocaleC(); 00226 }; 00227 00228 #endif /* def __cplusplus */ 00229 00230 00231 #endif /* ndef CPL_CONV_H_INCLUDED */