OGR
|
00001 /****************************************************************************** 00002 * $Id: cpl_conv.h 17742 2009-10-03 16:13:16Z rouault $ 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 CPLSetThreadLocalConfigOption( const char *pszKey, 00056 const char *pszValue ); 00057 void CPL_DLL CPL_STDCALL CPLFreeConfig(void); 00058 00059 /* -------------------------------------------------------------------- */ 00060 /* Safe malloc() API. Thin cover over VSI functions with fatal */ 00061 /* error reporting if memory allocation fails. */ 00062 /* -------------------------------------------------------------------- */ 00063 void CPL_DLL *CPLMalloc( size_t ); 00064 void CPL_DLL *CPLCalloc( size_t, size_t ); 00065 void CPL_DLL *CPLRealloc( void *, size_t ); 00066 char CPL_DLL *CPLStrdup( const char * ); 00067 char CPL_DLL *CPLStrlwr( char *); 00068 00069 #define CPLFree VSIFree 00070 00071 /* -------------------------------------------------------------------- */ 00072 /* Read a line from a text file, and strip of CR/LF. */ 00073 /* -------------------------------------------------------------------- */ 00074 char CPL_DLL *CPLFGets( char *, int, FILE *); 00075 const char CPL_DLL *CPLReadLine( FILE * ); 00076 const char CPL_DLL *CPLReadLineL( FILE * ); 00077 const char CPL_DLL *CPLReadLine2L( FILE * , int nMaxCols, char** papszOptions); 00078 00079 /* -------------------------------------------------------------------- */ 00080 /* Convert ASCII string to floationg point number */ 00081 /* (THESE FUNCTIONS ARE NOT LOCALE AWARE!). */ 00082 /* -------------------------------------------------------------------- */ 00083 double CPL_DLL CPLAtof(const char *); 00084 double CPL_DLL CPLAtofDelim(const char *, char); 00085 double CPL_DLL CPLStrtod(const char *, char **); 00086 double CPL_DLL CPLStrtodDelim(const char *, char **, char); 00087 float CPL_DLL CPLStrtof(const char *, char **); 00088 float CPL_DLL CPLStrtofDelim(const char *, char **, char); 00089 00090 /* -------------------------------------------------------------------- */ 00091 /* Convert number to string. This function is locale agnostic */ 00092 /* (ie. it will support "," or "." regardless of current locale) */ 00093 /* -------------------------------------------------------------------- */ 00094 double CPL_DLL CPLAtofM(const char *); 00095 00096 /* -------------------------------------------------------------------- */ 00097 /* Read a numeric value from an ASCII character string. */ 00098 /* -------------------------------------------------------------------- */ 00099 char CPL_DLL *CPLScanString( const char *, int, int, int ); 00100 double CPL_DLL CPLScanDouble( const char *, int ); 00101 long CPL_DLL CPLScanLong( const char *, int ); 00102 unsigned long CPL_DLL CPLScanULong( const char *, int ); 00103 GUIntBig CPL_DLL CPLScanUIntBig( const char *, int ); 00104 void CPL_DLL *CPLScanPointer( const char *, int ); 00105 00106 /* -------------------------------------------------------------------- */ 00107 /* Print a value to an ASCII character string. */ 00108 /* -------------------------------------------------------------------- */ 00109 int CPL_DLL CPLPrintString( char *, const char *, int ); 00110 int CPL_DLL CPLPrintStringFill( char *, const char *, int ); 00111 int CPL_DLL CPLPrintInt32( char *, GInt32 , int ); 00112 int CPL_DLL CPLPrintUIntBig( char *, GUIntBig , int ); 00113 int CPL_DLL CPLPrintDouble( char *, const char *, double, const char * ); 00114 int CPL_DLL CPLPrintTime( char *, int , const char *, const struct tm *, 00115 const char * ); 00116 int CPL_DLL CPLPrintPointer( char *, void *, int ); 00117 00118 /* -------------------------------------------------------------------- */ 00119 /* Fetch a function from DLL / so. */ 00120 /* -------------------------------------------------------------------- */ 00121 00122 void CPL_DLL *CPLGetSymbol( const char *, const char * ); 00123 00124 /* -------------------------------------------------------------------- */ 00125 /* Fetch executable path. */ 00126 /* -------------------------------------------------------------------- */ 00127 int CPL_DLL CPLGetExecPath( char *pszPathBuf, int nMaxLength ); 00128 00129 /* -------------------------------------------------------------------- */ 00130 /* Filename handling functions. */ 00131 /* -------------------------------------------------------------------- */ 00132 const char CPL_DLL *CPLGetPath( const char * ); 00133 const char CPL_DLL *CPLGetDirname( const char * ); 00134 const char CPL_DLL *CPLGetFilename( const char * ); 00135 const char CPL_DLL *CPLGetBasename( const char * ); 00136 const char CPL_DLL *CPLGetExtension( const char * ); 00137 char CPL_DLL *CPLGetCurrentDir(void); 00138 const char CPL_DLL *CPLFormFilename( const char *pszPath, 00139 const char *pszBasename, 00140 const char *pszExtension ); 00141 const char CPL_DLL *CPLFormCIFilename( const char *pszPath, 00142 const char *pszBasename, 00143 const char *pszExtension ); 00144 const char CPL_DLL *CPLResetExtension( const char *, const char * ); 00145 const char CPL_DLL *CPLProjectRelativeFilename( const char *pszProjectDir, 00146 const char *pszSecondaryFilename ); 00147 int CPL_DLL CPLIsFilenameRelative( const char *pszFilename ); 00148 const char CPL_DLL *CPLExtractRelativePath(const char *, const char *, int *); 00149 const char CPL_DLL *CPLCleanTrailingSlash( const char * ); 00150 char CPL_DLL **CPLCorrespondingPaths( const char *pszOldFilename, 00151 const char *pszNewFilename, 00152 char **papszFileList ); 00153 int CPL_DLL CPLCheckForFile( char *pszFilename, char **papszSiblingList ); 00154 00155 const char CPL_DLL *CPLGenerateTempFilename( const char *pszStem ); 00156 00157 /* -------------------------------------------------------------------- */ 00158 /* Find File Function */ 00159 /* -------------------------------------------------------------------- */ 00160 typedef const char *(*CPLFileFinder)(const char *, const char *); 00161 00162 const char CPL_DLL *CPLFindFile(const char *pszClass, 00163 const char *pszBasename); 00164 const char CPL_DLL *CPLDefaultFindFile(const char *pszClass, 00165 const char *pszBasename); 00166 void CPL_DLL CPLPushFileFinder( CPLFileFinder pfnFinder ); 00167 CPLFileFinder CPL_DLL CPLPopFileFinder(void); 00168 void CPL_DLL CPLPushFinderLocation( const char * ); 00169 void CPL_DLL CPLPopFinderLocation(void); 00170 void CPL_DLL CPLFinderClean(void); 00171 00172 /* -------------------------------------------------------------------- */ 00173 /* Safe version of stat() that works properly on stuff like "C:". */ 00174 /* -------------------------------------------------------------------- */ 00175 int CPL_DLL CPLStat( const char *, VSIStatBuf * ); 00176 00177 /* -------------------------------------------------------------------- */ 00178 /* Reference counted file handle manager. Makes sharing file */ 00179 /* handles more practical. */ 00180 /* -------------------------------------------------------------------- */ 00181 typedef struct { 00182 FILE *fp; 00183 int nRefCount; 00184 int bLarge; 00185 char *pszFilename; 00186 char *pszAccess; 00187 } CPLSharedFileInfo; 00188 00189 FILE CPL_DLL *CPLOpenShared( const char *, const char *, int ); 00190 void CPL_DLL CPLCloseShared( FILE * ); 00191 CPLSharedFileInfo CPL_DLL *CPLGetSharedList( int * ); 00192 void CPL_DLL CPLDumpSharedList( FILE * ); 00193 00194 /* -------------------------------------------------------------------- */ 00195 /* DMS to Dec to DMS conversion. */ 00196 /* -------------------------------------------------------------------- */ 00197 double CPL_DLL CPLDMSToDec( const char *is ); 00198 const char CPL_DLL *CPLDecToDMS( double dfAngle, const char * pszAxis, 00199 int nPrecision ); 00200 double CPL_DLL CPLPackedDMSToDec( double ); 00201 double CPL_DLL CPLDecToPackedDMS( double dfDec ); 00202 00203 void CPL_DLL CPLStringToComplex( const char *pszString, 00204 double *pdfReal, double *pdfImag ); 00205 00206 /* -------------------------------------------------------------------- */ 00207 /* Misc other functions. */ 00208 /* -------------------------------------------------------------------- */ 00209 int CPL_DLL CPLUnlinkTree( const char * ); 00210 int CPL_DLL CPLCopyFile( const char *pszNewPath, const char *pszOldPath ); 00211 int CPL_DLL CPLMoveFile( const char *pszNewPath, const char *pszOldPath ); 00212 00213 CPL_C_END 00214 00215 /* -------------------------------------------------------------------- */ 00216 /* C++ object for temporariliy forcing a LC_NUMERIC locale to "C". */ 00217 /* -------------------------------------------------------------------- */ 00218 00219 #if defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS) 00220 00221 class CPLLocaleC 00222 { 00223 public: 00224 CPLLocaleC(); 00225 ~CPLLocaleC(); 00226 00227 private: 00228 char *pszOldLocale; 00229 00230 // Make it non-copyable 00231 CPLLocaleC(CPLLocaleC&); 00232 CPLLocaleC& operator=(CPLLocaleC&); 00233 }; 00234 00235 #endif /* def __cplusplus */ 00236 00237 00238 #endif /* ndef CPL_CONV_H_INCLUDED */