__device__ int cstring_length(const char* s) { int len = 0; while (s[len]) len++; return len; } __device__ int cstring_find(const char* s, const char* sub) { int i, j; int n = cstring_length(s); int m = cstring_length(sub); if (m == 0) return 0; for (i = 0; i <= n - m; i++) { for (j = 0; j < m; j++) { if (s[i + j] != sub[j]) break; } if (j == m) return i; } return -1; } __device__ int cstring_to_ull(const char* s, unsigned* val) { unsigned result = 0; int i = 0; if (s[0] == '0' && (s[1] == 'x' || s[1] == 'X')) { i = 2; } if (s[i] == '\0') return 1; for (; s[i]; i++) { char c = s[i]; int digit; if (c >= '0' && c <= '9') { digit = c - '0'; } else if (c >= 'a' && c <= 'f') { digit = 10 + (c - 'a'); } else if (c >= 'A' && c <= 'F') { digit = 10 + (c - 'A'); } else { return 1; } result = result * 16 + digit; } *val = result; return 0; } __device__ void extract_substring(const char* src, int start, char* dest, int dest_size) { int i = 0; while (src[start + i] && i < dest_size - 1) { dest[i] = src[start + i]; i++; } dest[i] = '\0'; } __device__ void concat(const char* s1, const char* s2, char* out, int outSize) { int i = 0, j = 0; while (s1[i] && i < outSize - 1) { out[i] = s1[i]; i++; } if (i < outSize - 1) { out[i] = ' '; i++; } while (s2[j] && i < outSize - 1) { out[i] = s2[j]; i++; j++; } out[i] = '\0'; }