util.c (raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
#include <u.h> #include "util.h" uvlong hash(char* str) { uvlong h; uchar* p; h = 0; for (p = (unsigned char*)str; *p != '\0'; p++) h = 37 * h + *p; return h; // or, h % ARRAY_SIZE; } char clca(char c) { return c >= 'A' && c <= 'Z' ? c + ('a' - 'A') : c; } /* char to lowercase */ char cuca(char c) { return c >= 'a' && c <= 'z' ? c - ('a' - 'A') : c; } /* char to uppercase */ int slen(char* s) { int i = 0; while (s[i] && s[++i]) { ; } return i; } /* string length */ char* st__(char* s, char (*fn)(char)) { int i = 0; char c; while ((c = s[i])) s[i++] = fn(c); return s; } char* stuc(char* s) { return st__(s, cuca); } /* string to uppercase */ char* stlc(char* s) { return st__(s, clca); } /* string to lowercase */ char* scpy(char* src, char* dst, int len) { int i = 0; while ((dst[i] = src[i]) && i < len - 2) i++; dst[i + 1] = '\0'; return dst; } /* string copy */ int scmp(char* a, char* b) { int i = 0; while (a[i] == b[i]) if (!a[i++]) return 1; return 0; } /* string compare */ char* scsw(char* s, char a, char b) { int i = 0; char c; while ((c = s[i])) s[i++] = c == a ? b : c; return s; } /* string char swap */ char* scat(char* dst, const char* src) { char* ptr = dst + slen(dst); while (*src) *ptr++ = *src++; *ptr = '\0'; return dst; } /* string cat */ int ssin(char* s, char* ss) { int a = 0, b = 0; while (s[a]) { if (s[a] == ss[b]) { if (!ss[b + 1]) return a - b; b++; } else b = 0; a++; } return -1; } /* string substring index */ char* ccat(char* dst, char c) { int len = slen(dst); dst[len] = c; dst[len + 1] = '\0'; return dst; } |