29#ifndef COMMON_HELPER_STRING_H_
30#define COMMON_HELPER_STRING_H_
37#if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64)
38#ifndef _CRT_SECURE_NO_DEPRECATE
39#define _CRT_SECURE_NO_DEPRECATE
42#define STRCASECMP _stricmp
45#define STRNCASECMP _strnicmp
48#define STRCPY(sFilePath, nLength, sPath) strcpy_s(sFilePath, nLength, sPath)
52#define FOPEN(fHandle, filename, mode) fopen_s(&fHandle, filename, mode)
55#define FOPEN_FAIL(result) (result != 0)
58#define SSCANF sscanf_s
61#define SPRINTF sprintf_s
68#define STRCASECMP strcasecmp
71#define STRNCASECMP strncasecmp
74#define STRCPY(sFilePath, nLength, sPath) strcpy(sFilePath, sPath)
78#define FOPEN(fHandle, filename, mode) (fHandle = fopen(filename, mode))
81#define FOPEN_FAIL(result) (result == NULL)
87#define SPRINTF sprintf
99 while (
string[string_start] == delimiter) {
103 if (string_start >=
static_cast<int>(strlen(
string) - 1)) {
111 int string_length =
static_cast<int>(strlen(filename));
113 while (filename[string_length--] !=
'.') {
114 if (string_length == 0)
break;
117 if (string_length > 0) string_length += 2;
119 if (string_length == 0)
122 *extension = &filename[string_length];
124 return string_length;
128 const char *string_ref) {
132 for (
int i = 1; i < argc; i++) {
134 const char *string_argv = &argv[i][string_start];
136 const char *equal_pos = strchr(string_argv,
'=');
137 int argv_length =
static_cast<int>(
138 equal_pos == 0 ? strlen(string_argv) : equal_pos - string_argv);
140 int length =
static_cast<int>(strlen(string_ref));
142 if (length == argv_length &&
156 const char *string_ref,
T *value) {
160 for (
int i = 1; i < argc; i++) {
162 const char *string_argv = &argv[i][string_start];
163 int length =
static_cast<int>(strlen(string_ref));
165 if (!
STRNCASECMP(string_argv, string_ref, length)) {
166 if (length + 1 <=
static_cast<int>(strlen(string_argv))) {
167 int auto_inc = (string_argv[length] ==
'=') ? 1 : 0;
168 *value = (
T)atoi(&string_argv[length + auto_inc]);
181 const char *string_ref) {
186 for (
int i = 1; i < argc; i++) {
188 const char *string_argv = &argv[i][string_start];
189 int length =
static_cast<int>(strlen(string_ref));
191 if (!
STRNCASECMP(string_argv, string_ref, length)) {
192 if (length + 1 <=
static_cast<int>(strlen(string_argv))) {
193 int auto_inc = (string_argv[length] ==
'=') ? 1 : 0;
194 value = atoi(&string_argv[length + auto_inc]);
213 const char *string_ref) {
218 for (
int i = 1; i < argc; i++) {
220 const char *string_argv = &argv[i][string_start];
221 int length =
static_cast<int>(strlen(string_ref));
223 if (!
STRNCASECMP(string_argv, string_ref, length)) {
224 if (length + 1 <=
static_cast<int>(strlen(string_argv))) {
225 int auto_inc = (string_argv[length] ==
'=') ? 1 : 0;
226 value =
static_cast<float>(atof(&string_argv[length + auto_inc]));
245 const char *string_ref,
246 char **string_retval) {
250 for (
int i = 1; i < argc; i++) {
252 char *string_argv =
const_cast<char *
>(&argv[i][string_start]);
253 int length =
static_cast<int>(strlen(string_ref));
255 if (!
STRNCASECMP(string_argv, string_ref, length)) {
256 *string_retval = &string_argv[length + 1];
264 *string_retval = NULL;
279 const char *executable_path) {
287 const char *searchPath[] = {
291 "../../../../Samples/<executable_name>/",
292 "../../../Samples/<executable_name>/",
293 "../../Samples/<executable_name>/",
295 "../../../../Samples/<executable_name>/data/",
296 "../../../Samples/<executable_name>/data/",
297 "../../Samples/<executable_name>/data/",
299 "../../../../Samples/0_Introduction/<executable_name>/",
300 "../../../Samples/0_Introduction/<executable_name>/",
301 "../../Samples/0_Introduction/<executable_name>/",
303 "../../../../Samples/1_Utilities/<executable_name>/",
304 "../../../Samples/1_Utilities/<executable_name>/",
305 "../../Samples/1_Utilities/<executable_name>/",
307 "../../../../Samples/2_Concepts_and_Techniques/<executable_name>/",
308 "../../../Samples/2_Concepts_and_Techniques/<executable_name>/",
309 "../../Samples/2_Concepts_and_Techniques/<executable_name>/",
311 "../../../../Samples/3_CUDA_Features/<executable_name>/",
312 "../../../Samples/3_CUDA_Features/<executable_name>/",
313 "../../Samples/3_CUDA_Features/<executable_name>/",
315 "../../../../Samples/4_CUDA_Libraries/<executable_name>/",
316 "../../../Samples/4_CUDA_Libraries/<executable_name>/",
317 "../../Samples/4_CUDA_Libraries/<executable_name>/",
319 "../../../../Samples/5_Domain_Specific/<executable_name>/",
320 "../../../Samples/5_Domain_Specific/<executable_name>/",
321 "../../Samples/5_Domain_Specific/<executable_name>/",
323 "../../../../Samples/6_Performance/<executable_name>/",
324 "../../../Samples/6_Performance/<executable_name>/",
325 "../../Samples/6_Performance/<executable_name>/",
327 "../../../../Samples/0_Introduction/<executable_name>/data/",
328 "../../../Samples/0_Introduction/<executable_name>/data/",
329 "../../Samples/0_Introduction/<executable_name>/data/",
331 "../../../../Samples/1_Utilities/<executable_name>/data/",
332 "../../../Samples/1_Utilities/<executable_name>/data/",
333 "../../Samples/1_Utilities/<executable_name>/data/",
335 "../../../../Samples/2_Concepts_and_Techniques/<executable_name>/data/",
336 "../../../Samples/2_Concepts_and_Techniques/<executable_name>/data/",
337 "../../Samples/2_Concepts_and_Techniques/<executable_name>/data/",
339 "../../../../Samples/3_CUDA_Features/<executable_name>/data/",
340 "../../../Samples/3_CUDA_Features/<executable_name>/data/",
341 "../../Samples/3_CUDA_Features/<executable_name>/data/",
343 "../../../../Samples/4_CUDA_Libraries/<executable_name>/data/",
344 "../../../Samples/4_CUDA_Libraries/<executable_name>/data/",
345 "../../Samples/4_CUDA_Libraries/<executable_name>/data/",
347 "../../../../Samples/5_Domain_Specific/<executable_name>/data/",
348 "../../../Samples/5_Domain_Specific/<executable_name>/data/",
349 "../../Samples/5_Domain_Specific/<executable_name>/data/",
351 "../../../../Samples/6_Performance/<executable_name>/data/",
352 "../../../Samples/6_Performance/<executable_name>/data/",
353 "../../Samples/6_Performance/<executable_name>/data/",
355 "../../../../Common/data/",
356 "../../../Common/data/",
361 std::string executable_name;
363 if (executable_path != 0) {
364 executable_name = std::string(executable_path);
366#if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64)
368 size_t delimiter_pos = executable_name.find_last_of(
'\\');
369 executable_name.erase(0, delimiter_pos + 1);
371 if (executable_name.rfind(
".exe") != std::string::npos) {
373 executable_name.resize(executable_name.size() - 4);
378 size_t delimiter_pos = executable_name.find_last_of(
'/');
379 executable_name.erase(0, delimiter_pos + 1);
384 for (
unsigned int i = 0; i <
sizeof(searchPath) /
sizeof(
char *); ++i) {
385 std::string path(searchPath[i]);
386 size_t executable_name_pos = path.find(
"<executable_name>");
390 if (executable_name_pos != std::string::npos) {
391 if (executable_path != 0) {
392 path.replace(executable_name_pos, strlen(
"<executable_name>"),
401 printf(
"sdkFindFilePath <%s> in %s\n", filename, path.c_str());
405 path.append(filename);
407 FOPEN(fp, path.c_str(),
"rb");
413 char *file_path =
reinterpret_cast<char *
>(malloc(path.length() + 1));
414 STRCPY(file_path, path.length() + 1, path.c_str());
424 printf(
"\nerror: sdkFindFilePath: file <%s> not found!\n", filename);
#define T
Definition exp.cpp:237
bool getCmdLineArgumentString(const int argc, const char **argv, const char *string_ref, char **string_retval)
Definition helper_string.h:244
char * sdkFindFilePath(const char *filename, const char *executable_path)
Definition helper_string.h:278
float getCmdLineArgumentFloat(const int argc, const char **argv, const char *string_ref)
Definition helper_string.h:212
int getFileExtension(char *filename, char **extension)
Definition helper_string.h:110
#define STRCPY(sFilePath, nLength, sPath)
Definition helper_string.h:74
bool getCmdLineArgumentValue(const int argc, const char **argv, const char *string_ref, T *value)
Definition helper_string.h:155
#define FOPEN(fHandle, filename, mode)
Definition helper_string.h:78
#define STRNCASECMP
Definition helper_string.h:71
bool checkCmdLineFlag(const int argc, const char **argv, const char *string_ref)
Definition helper_string.h:127
int stringRemoveDelimiter(char delimiter, const char *string)
Definition helper_string.h:96
int getCmdLineArgumentInt(const int argc, const char **argv, const char *string_ref)
Definition helper_string.h:180