13 #ifndef STRING_HELPER_H 
   14 #define STRING_HELPER_H 
   21 #if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64) 
   22 #ifndef _CRT_SECURE_NO_DEPRECATE 
   23 #define _CRT_SECURE_NO_DEPRECATE 
   26 #define STRCASECMP  _stricmp 
   29 #define STRNCASECMP _strnicmp 
   32 #define STRCPY(sFilePath, nLength, sPath) strcpy_s(sFilePath, nLength, sPath) 
   36 #define FOPEN(fHandle,filename,mode) fopen_s(&fHandle, filename, mode) 
   39 #define FOPEN_FAIL(result) (result != 0) 
   42 #define SSCANF sscanf_s 
   45 #define SPRINTF sprintf_s 
   47 #else // Linux Includes 
   52 #define STRCASECMP  strcasecmp 
   55 #define STRNCASECMP strncasecmp 
   58 #define STRCPY(sFilePath, nLength, sPath) strcpy(sFilePath, sPath) 
   62 #define FOPEN(fHandle,filename,mode) (fHandle = fopen(filename, mode)) 
   65 #define FOPEN_FAIL(result) (result == NULL) 
   71 #define SPRINTF sprintf 
   84     while (
string[string_start] == delimiter)
 
   89     if (string_start >= (
int)strlen(
string)-1)
 
   99     int string_length = (int)strlen(filename);
 
  101     while (filename[string_length--] != 
'.')
 
  103         if (string_length == 0)
 
  107     if (string_length > 0) string_length += 2;
 
  109     if (string_length == 0)
 
  112         *extension = &filename[string_length];
 
  114     return string_length;
 
  124         for (
int i=1; i < argc; i++)
 
  127             const char *string_argv = &argv[i][string_start];
 
  129             const char *equal_pos = strchr(string_argv, 
'=');
 
  130             int argv_length = (int)(equal_pos == 0 ? strlen(string_argv) : equal_pos - string_argv);
 
  132             int length = (int)strlen(string_ref);
 
  134             if (length == argv_length && !
STRNCASECMP(string_argv, string_ref, length))
 
  153         for (
int i=1; i < argc; i++)
 
  156             const char *string_argv = &argv[i][string_start];
 
  157             int length = (int)strlen(string_ref);
 
  161                 if (length+1 <= (
int)strlen(string_argv))
 
  163                     int auto_inc = (string_argv[length] == 
'=') ? 1 : 0;
 
  164                     *value = (T)atoi(&string_argv[length + auto_inc]);
 
  183         for (
int i=1; i < argc; i++)
 
  186             const char *string_argv = &argv[i][string_start];
 
  187             int length = (int)strlen(string_ref);
 
  191                 if (length+1 <= (
int)strlen(string_argv))
 
  193                     int auto_inc = (string_argv[length] == 
'=') ? 1 : 0;
 
  194                     value = atoi(&string_argv[length + auto_inc]);
 
  224         for (
int i=1; i < argc; i++)
 
  227             const char *string_argv = &argv[i][string_start];
 
  228             int length = (int)strlen(string_ref);
 
  232                 if (length+1 <= (
int)strlen(string_argv))
 
  234                     int auto_inc = (string_argv[length] == 
'=') ? 1 : 0;
 
  235                     value = (float)atof(&string_argv[length + auto_inc]);
 
  259                                      const char *string_ref, 
char **string_retval)
 
  265         for (
int i=1; i < argc; i++)
 
  268             char *string_argv = (
char *)&argv[i][string_start];
 
  269             int length = (int)strlen(string_ref);
 
  273                 *string_retval = &string_argv[length+1];
 
  282         *string_retval = NULL;
 
  302     const char *searchPath[] =
 
  309         "./src/<executable_name>/data/",            
 
  318         "./7_CUDALibraries/",                       
 
  329         "../0_Simple/<executable_name>/data/",       
 
  330         "../1_Utilities/<executable_name>/data/",    
 
  331         "../2_Graphics/<executable_name>/data/",     
 
  332         "../3_Imaging/<executable_name>/data/",      
 
  333         "../4_Finance/<executable_name>/data/",      
 
  334         "../5_Simulations/<executable_name>/data/",  
 
  335         "../6_Advanced/<executable_name>/data/",     
 
  336         "../7_CUDALibraries/<executable_name>/data/",
 
  337         "../8_Android/<executable_name>/data/",      
 
  338         "../samples/<executable_name>/data/",        
 
  341         "../../common/data/",                            
 
  345         "../../sandbox/<executable_name>/data/",         
 
  346         "../../0_Simple/<executable_name>/data/",        
 
  347         "../../1_Utilities/<executable_name>/data/",     
 
  348         "../../2_Graphics/<executable_name>/data/",      
 
  349         "../../3_Imaging/<executable_name>/data/",       
 
  350         "../../4_Finance/<executable_name>/data/",       
 
  351         "../../5_Simulations/<executable_name>/data/",   
 
  352         "../../6_Advanced/<executable_name>/data/",      
 
  353         "../../7_CUDALibraries/<executable_name>/data/", 
 
  354         "../../8_Android/<executable_name>/data/",       
 
  355         "../../samples/<executable_name>/data/",         
 
  357         "../../../src/<executable_name>/",                  
 
  358         "../../../src/<executable_name>/data/",             
 
  359         "../../../src/<executable_name>/src/",              
 
  360         "../../../src/<executable_name>/inc/",              
 
  361         "../../../sandbox/<executable_name>/",              
 
  362         "../../../sandbox/<executable_name>/data/",         
 
  363         "../../../sandbox/<executable_name>/src/",          
 
  364         "../../../sandbox/<executable_name>/inc/",          
 
  365         "../../../0_Simple/<executable_name>/data/",        
 
  366         "../../../1_Utilities/<executable_name>/data/",     
 
  367         "../../../2_Graphics/<executable_name>/data/",      
 
  368         "../../../3_Imaging/<executable_name>/data/",       
 
  369         "../../../4_Finance/<executable_name>/data/",       
 
  370         "../../../5_Simulations/<executable_name>/data/",   
 
  371         "../../../6_Advanced/<executable_name>/data/",      
 
  372         "../../../7_CUDALibraries/<executable_name>/data/", 
 
  373         "../../../8_Android/<executable_name>/data/",       
 
  374         "../../../0_Simple/<executable_name>/",        
 
  375         "../../../1_Utilities/<executable_name>/",     
 
  376         "../../../2_Graphics/<executable_name>/",      
 
  377         "../../../3_Imaging/<executable_name>/",       
 
  378         "../../../4_Finance/<executable_name>/",       
 
  379         "../../../5_Simulations/<executable_name>/",   
 
  380         "../../../6_Advanced/<executable_name>/",      
 
  381         "../../../7_CUDALibraries/<executable_name>/", 
 
  382         "../../../8_Android/<executable_name>/",       
 
  383         "../../../samples/<executable_name>/data/",         
 
  385         "../../../common/data/",                            
 
  388         "../../../../src/<executable_name>/",          
 
  389         "../../../../src/<executable_name>/data/",     
 
  390         "../../../../src/<executable_name>/src/",      
 
  391         "../../../../src/<executable_name>/inc/",      
 
  392         "../../../../sandbox/<executable_name>/",      
 
  393         "../../../../sandbox/<executable_name>/data/", 
 
  394         "../../../../sandbox/<executable_name>/src/",  
 
  395         "../../../../sandbox/<executable_name>/inc/",   
 
  396         "../../../../0_Simple/<executable_name>/data/",     
 
  397         "../../../../1_Utilities/<executable_name>/data/",  
 
  398         "../../../../2_Graphics/<executable_name>/data/",   
 
  399         "../../../../3_Imaging/<executable_name>/data/",    
 
  400         "../../../../4_Finance/<executable_name>/data/",    
 
  401         "../../../../5_Simulations/<executable_name>/data/",
 
  402         "../../../../6_Advanced/<executable_name>/data/",   
 
  403         "../../../../7_CUDALibraries/<executable_name>/data/", 
 
  404         "../../../../8_Android/<executable_name>/data/",    
 
  405         "../../../../0_Simple/<executable_name>/",     
 
  406         "../../../../1_Utilities/<executable_name>/",  
 
  407         "../../../../2_Graphics/<executable_name>/",   
 
  408         "../../../../3_Imaging/<executable_name>/",    
 
  409         "../../../../4_Finance/<executable_name>/",    
 
  410         "../../../../5_Simulations/<executable_name>/",
 
  411         "../../../../6_Advanced/<executable_name>/",   
 
  412         "../../../../7_CUDALibraries/<executable_name>/", 
 
  413         "../../../../8_Android/<executable_name>/",    
 
  414         "../../../../samples/<executable_name>/data/",      
 
  415         "../../../../common/",                              
 
  416         "../../../../common/data/",                         
 
  419         "../../../../../src/<executable_name>/",          
 
  420         "../../../../../src/<executable_name>/data/",     
 
  421         "../../../../../src/<executable_name>/src/",      
 
  422         "../../../../../src/<executable_name>/inc/",      
 
  423         "../../../../../sandbox/<executable_name>/",      
 
  424         "../../../../../sandbox/<executable_name>/data/", 
 
  425         "../../../../../sandbox/<executable_name>/src/",  
 
  426         "../../../../../sandbox/<executable_name>/inc/",   
 
  427         "../../../../../0_Simple/<executable_name>/data/",     
 
  428         "../../../../../1_Utilities/<executable_name>/data/",  
 
  429         "../../../../../2_Graphics/<executable_name>/data/",   
 
  430         "../../../../../3_Imaging/<executable_name>/data/",    
 
  431         "../../../../../4_Finance/<executable_name>/data/",    
 
  432         "../../../../../5_Simulations/<executable_name>/data/",
 
  433         "../../../../../6_Advanced/<executable_name>/data/",   
 
  434         "../../../../../7_CUDALibraries/<executable_name>/data/", 
 
  435         "../../../../../8_Android/<executable_name>/data/",    
 
  436         "../../../../../samples/<executable_name>/data/",      
 
  437         "../../../../../common/",                         
 
  438         "../../../../../common/data/",                    
 
  442     std::string executable_name;
 
  444     if (executable_path != 0)
 
  446         executable_name = std::string(executable_path);
 
  448 #if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64) 
  450         size_t delimiter_pos = executable_name.find_last_of(
'\\');
 
  451         executable_name.erase(0, delimiter_pos + 1);
 
  453         if (executable_name.rfind(
".exe") != std::string::npos)
 
  456             executable_name.resize(executable_name.size() - 4);
 
  461         size_t delimiter_pos = executable_name.find_last_of(
'/');
 
  462         executable_name.erase(0,delimiter_pos+1);
 
  467     for (
unsigned int i = 0; i < 
sizeof(searchPath)/
sizeof(
char *); ++i)
 
  469         std::string path(searchPath[i]);
 
  470         size_t executable_name_pos = path.find(
"<executable_name>");
 
  474         if (executable_name_pos != std::string::npos)
 
  476             if (executable_path != 0)
 
  478                 path.replace(executable_name_pos, strlen(
"<executable_name>"), executable_name);
 
  488         printf(
"sdkFindFilePath <%s> in %s\n", filename, path.c_str());
 
  492         path.append(filename);
 
  494         FOPEN(fp, path.c_str(), 
"rb");
 
  501             char *file_path = (
char *) malloc(path.length() + 1);
 
  502             STRCPY(file_path, path.length() + 1, path.c_str());
 
int stringRemoveDelimiter(char delimiter, const char *string)
 
bool checkCmdLineFlag(const int argc, const char **argv, const char *string_ref)
 
#define FOPEN(fHandle, filename, mode)
 
bool getCmdLineArgumentString(const int argc, const char **argv, const char *string_ref, char **string_retval)
 
int getFileExtension(char *filename, char **extension)
 
char * sdkFindFilePath(const char *filename, const char *executable_path)
 
bool getCmdLineArgumentValue(const int argc, const char **argv, const char *string_ref, T *value)
 
#define STRCPY(sFilePath, nLength, sPath)
 
int getCmdLineArgumentInt(const int argc, const char **argv, const char *string_ref)
 
float getCmdLineArgumentFloat(const int argc, const char **argv, const char *string_ref)