cpl_conv.h

Go to the documentation of this file.
00001 /******************************************************************************
00002  * $Id: cpl_conv.h 27121 2014-04-03 22:08:55Z 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  * Copyright (c) 2007-2013, Even Rouault <even dot rouault at mines-paris dot org>
00012  *
00013  * Permission is hereby granted, free of charge, to any person obtaining a
00014  * copy of this software and associated documentation files (the "Software"),
00015  * to deal in the Software without restriction, including without limitation
00016  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
00017  * and/or sell copies of the Software, and to permit persons to whom the
00018  * Software is furnished to do so, subject to the following conditions:
00019  *
00020  * The above copyright notice and this permission notice shall be included
00021  * in all copies or substantial portions of the Software.
00022  *
00023  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
00024  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00025  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
00026  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
00027  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
00028  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
00029  * DEALINGS IN THE SOFTWARE.
00030  ****************************************************************************/
00031 
00032 #ifndef CPL_CONV_H_INCLUDED
00033 #define CPL_CONV_H_INCLUDED
00034 
00035 #include "cpl_port.h"
00036 #include "cpl_vsi.h"
00037 #include "cpl_error.h"
00038 
00046 /* -------------------------------------------------------------------- */
00047 /*      Runtime check of various configuration items.                   */
00048 /* -------------------------------------------------------------------- */
00049 CPL_C_START
00050 
00051 void CPL_DLL CPLVerifyConfiguration(void);
00052 
00053 const char CPL_DLL * CPL_STDCALL
00054 CPLGetConfigOption( const char *, const char * ) CPL_WARN_UNUSED_RESULT;
00055 void CPL_DLL CPL_STDCALL CPLSetConfigOption( const char *, const char * );
00056 void CPL_DLL CPL_STDCALL CPLSetThreadLocalConfigOption( const char *pszKey, 
00057                                                         const char *pszValue );
00058 void CPL_DLL CPL_STDCALL CPLFreeConfig(void);
00059 
00060 /* -------------------------------------------------------------------- */
00061 /*      Safe malloc() API.  Thin cover over VSI functions with fatal    */
00062 /*      error reporting if memory allocation fails.                     */
00063 /* -------------------------------------------------------------------- */
00064 void CPL_DLL *CPLMalloc( size_t ) CPL_WARN_UNUSED_RESULT;
00065 void CPL_DLL *CPLCalloc( size_t, size_t ) CPL_WARN_UNUSED_RESULT;
00066 void CPL_DLL *CPLRealloc( void *, size_t ) CPL_WARN_UNUSED_RESULT;
00067 char CPL_DLL *CPLStrdup( const char * ) CPL_WARN_UNUSED_RESULT;
00068 char CPL_DLL *CPLStrlwr( char *);
00069 
00070 #define CPLFree VSIFree
00071 
00072 /* -------------------------------------------------------------------- */
00073 /*      Read a line from a text file, and strip of CR/LF.               */
00074 /* -------------------------------------------------------------------- */
00075 char CPL_DLL *CPLFGets( char *, int, FILE *);
00076 const char CPL_DLL *CPLReadLine( FILE * );
00077 const char CPL_DLL *CPLReadLineL( VSILFILE * );
00078 const char CPL_DLL *CPLReadLine2L( VSILFILE * , int nMaxCols, char** papszOptions);
00079 
00080 /* -------------------------------------------------------------------- */
00081 /*      Convert ASCII string to floationg point number                  */
00082 /*      (THESE FUNCTIONS ARE NOT LOCALE AWARE!).                        */
00083 /* -------------------------------------------------------------------- */
00084 double CPL_DLL CPLAtof(const char *);
00085 double CPL_DLL CPLAtofDelim(const char *, char);
00086 double CPL_DLL CPLStrtod(const char *, char **);
00087 double CPL_DLL CPLStrtodDelim(const char *, char **, char);
00088 float CPL_DLL CPLStrtof(const char *, char **);
00089 float CPL_DLL CPLStrtofDelim(const char *, char **, char);
00090 
00091 /* -------------------------------------------------------------------- */
00092 /*      Convert number to string.  This function is locale agnostic     */
00093 /*      (ie. it will support "," or "." regardless of current locale)   */
00094 /* -------------------------------------------------------------------- */
00095 double CPL_DLL CPLAtofM(const char *);
00096 
00097 /* -------------------------------------------------------------------- */
00098 /*      Read a numeric value from an ASCII character string.            */
00099 /* -------------------------------------------------------------------- */
00100 char CPL_DLL *CPLScanString( const char *, int, int, int );
00101 double CPL_DLL CPLScanDouble( const char *, int );
00102 long CPL_DLL CPLScanLong( const char *, int );
00103 unsigned long CPL_DLL CPLScanULong( const char *, int );
00104 GUIntBig CPL_DLL CPLScanUIntBig( const char *, int );
00105 void CPL_DLL *CPLScanPointer( const char *, int );
00106 
00107 /* -------------------------------------------------------------------- */
00108 /*      Print a value to an ASCII character string.                     */
00109 /* -------------------------------------------------------------------- */
00110 int CPL_DLL CPLPrintString( char *, const char *, int );
00111 int CPL_DLL CPLPrintStringFill( char *, const char *, int );
00112 int CPL_DLL CPLPrintInt32( char *, GInt32 , int );
00113 int CPL_DLL CPLPrintUIntBig( char *, GUIntBig , int );
00114 int CPL_DLL CPLPrintDouble( char *, const char *, double, const char * );
00115 int CPL_DLL CPLPrintTime( char *, int , const char *, const struct tm *,
00116                           const char * );
00117 int CPL_DLL CPLPrintPointer( char *, void *, int );
00118 
00119 /* -------------------------------------------------------------------- */
00120 /*      Fetch a function from DLL / so.                                 */
00121 /* -------------------------------------------------------------------- */
00122 
00123 void CPL_DLL *CPLGetSymbol( const char *, const char * );
00124 
00125 /* -------------------------------------------------------------------- */
00126 /*      Fetch executable path.                                          */
00127 /* -------------------------------------------------------------------- */
00128 int CPL_DLL CPLGetExecPath( char *pszPathBuf, int nMaxLength );
00129 
00130 /* -------------------------------------------------------------------- */
00131 /*      Filename handling functions.                                    */
00132 /* -------------------------------------------------------------------- */
00133 const char CPL_DLL *CPLGetPath( const char * );
00134 const char CPL_DLL *CPLGetDirname( const char * );
00135 const char CPL_DLL *CPLGetFilename( const char * );
00136 const char CPL_DLL *CPLGetBasename( const char * );
00137 const char CPL_DLL *CPLGetExtension( const char * );
00138 char       CPL_DLL *CPLGetCurrentDir(void);
00139 const char CPL_DLL *CPLFormFilename( const char *pszPath,
00140                                      const char *pszBasename,
00141                                      const char *pszExtension );
00142 const char CPL_DLL *CPLFormCIFilename( const char *pszPath,
00143                                        const char *pszBasename,
00144                                        const char *pszExtension );
00145 const char CPL_DLL *CPLResetExtension( const char *, const char * );
00146 const char CPL_DLL *CPLProjectRelativeFilename( const char *pszProjectDir, 
00147                                             const char *pszSecondaryFilename );
00148 int CPL_DLL CPLIsFilenameRelative( const char *pszFilename );
00149 const char CPL_DLL *CPLExtractRelativePath(const char *, const char *, int *);
00150 const char CPL_DLL *CPLCleanTrailingSlash( const char * );
00151 char CPL_DLL      **CPLCorrespondingPaths( const char *pszOldFilename, 
00152                                            const char *pszNewFilename, 
00153                                            char **papszFileList );
00154 int CPL_DLL CPLCheckForFile( char *pszFilename, char **papszSiblingList );
00155 
00156 const char CPL_DLL *CPLGenerateTempFilename( const char *pszStem );
00157 
00158 /* -------------------------------------------------------------------- */
00159 /*      Find File Function                                              */
00160 /* -------------------------------------------------------------------- */
00161 typedef const char *(*CPLFileFinder)(const char *, const char *);
00162 
00163 const char    CPL_DLL *CPLFindFile(const char *pszClass, 
00164                                    const char *pszBasename);
00165 const char    CPL_DLL *CPLDefaultFindFile(const char *pszClass, 
00166                                           const char *pszBasename);
00167 void          CPL_DLL CPLPushFileFinder( CPLFileFinder pfnFinder );
00168 CPLFileFinder CPL_DLL CPLPopFileFinder(void);
00169 void          CPL_DLL CPLPushFinderLocation( const char * );
00170 void          CPL_DLL CPLPopFinderLocation(void);
00171 void          CPL_DLL CPLFinderClean(void);
00172 
00173 /* -------------------------------------------------------------------- */
00174 /*      Safe version of stat() that works properly on stuff like "C:".  */
00175 /* -------------------------------------------------------------------- */
00176 int CPL_DLL     CPLStat( const char *, VSIStatBuf * );
00177 
00178 /* -------------------------------------------------------------------- */
00179 /*      Reference counted file handle manager.  Makes sharing file      */
00180 /*      handles more practical.                                         */
00181 /* -------------------------------------------------------------------- */
00182 typedef struct {
00183     FILE *fp;
00184     int   nRefCount;
00185     int   bLarge;
00186     char  *pszFilename;
00187     char  *pszAccess;
00188 } CPLSharedFileInfo;
00189 
00190 FILE CPL_DLL    *CPLOpenShared( const char *, const char *, int );
00191 void CPL_DLL     CPLCloseShared( FILE * );
00192 CPLSharedFileInfo CPL_DLL *CPLGetSharedList( int * );
00193 void CPL_DLL     CPLDumpSharedList( FILE * );
00194 void CPL_DLL     CPLCleanupSharedFileMutex( void );
00195 
00196 /* -------------------------------------------------------------------- */
00197 /*      DMS to Dec to DMS conversion.                                   */
00198 /* -------------------------------------------------------------------- */
00199 double CPL_DLL CPLDMSToDec( const char *is );
00200 const char CPL_DLL *CPLDecToDMS( double dfAngle, const char * pszAxis,
00201                                  int nPrecision );
00202 double CPL_DLL CPLPackedDMSToDec( double );
00203 double CPL_DLL CPLDecToPackedDMS( double dfDec );
00204 
00205 void CPL_DLL CPLStringToComplex( const char *pszString, 
00206                                  double *pdfReal, double *pdfImag );
00207 
00208 /* -------------------------------------------------------------------- */
00209 /*      Misc other functions.                                           */
00210 /* -------------------------------------------------------------------- */
00211 int CPL_DLL CPLUnlinkTree( const char * );
00212 int CPL_DLL CPLCopyFile( const char *pszNewPath, const char *pszOldPath );
00213 int CPL_DLL CPLMoveFile( const char *pszNewPath, const char *pszOldPath );
00214 
00215 /* -------------------------------------------------------------------- */
00216 /*      ZIP Creation.                                                   */
00217 /* -------------------------------------------------------------------- */
00218 #define CPL_ZIP_API_OFFERED
00219 void CPL_DLL  *CPLCreateZip( const char *pszZipFilename, char **papszOptions );
00220 CPLErr CPL_DLL CPLCreateFileInZip( void *hZip, const char *pszFilename, 
00221                                    char **papszOptions );
00222 CPLErr CPL_DLL CPLWriteFileInZip( void *hZip, const void *pBuffer, int nBufferSize );
00223 CPLErr CPL_DLL CPLCloseFileInZip( void *hZip );
00224 CPLErr CPL_DLL CPLCloseZip( void *hZip );
00225 
00226 /* -------------------------------------------------------------------- */
00227 /*      ZLib compression                                                */
00228 /* -------------------------------------------------------------------- */
00229 
00230 void CPL_DLL *CPLZLibDeflate( const void* ptr, size_t nBytes, int nLevel,
00231                               void* outptr, size_t nOutAvailableBytes,
00232                               size_t* pnOutBytes );
00233 void CPL_DLL *CPLZLibInflate( const void* ptr, size_t nBytes,
00234                               void* outptr, size_t nOutAvailableBytes,
00235                               size_t* pnOutBytes );
00236 
00237 /* -------------------------------------------------------------------- */
00238 /*      XML validation.                                                 */
00239 /* -------------------------------------------------------------------- */
00240 int CPL_DLL CPLValidateXML(const char* pszXMLFilename,
00241                            const char* pszXSDFilename,
00242                            char** papszOptions);
00243                                                    
00244 /* -------------------------------------------------------------------- */
00245 /*      Locale handling. Prevents parallel executions of setlocale().   */
00246 /* -------------------------------------------------------------------- */
00247 char* CPLsetlocale (int category, const char* locale);
00248 void CPLCleanupSetlocaleMutex(void);
00249 
00250 CPL_C_END
00251 
00252 /* -------------------------------------------------------------------- */
00253 /*      C++ object for temporariliy forcing a LC_NUMERIC locale to "C". */
00254 /* -------------------------------------------------------------------- */
00255 
00256 #if defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS)
00257 
00258 class CPL_DLL CPLLocaleC
00259 {
00260 public:
00261     CPLLocaleC();
00262     ~CPLLocaleC();
00263 
00264 private:
00265     char *pszOldLocale;
00266 
00267     /* Make it non-copyable */
00268     CPLLocaleC(CPLLocaleC&);
00269     CPLLocaleC& operator=(CPLLocaleC&);
00270 };
00271 
00272 #endif /* def __cplusplus */
00273 
00274 
00275 #endif /* ndef CPL_CONV_H_INCLUDED */

Generated for GDAL by doxygen 1.7.1.