Guest User

utilis.cpp

a guest
Dec 18th, 2024
40
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.91 KB | None | 0 0
  1. #include "stdafx.h"
  2.  
  3. static int global_time_gap = 0;
  4.  
  5. time_t get_global_time()
  6. {
  7. return time(0) + global_time_gap;
  8. }
  9.  
  10. void set_global_time(time_t t)
  11. {
  12. global_time_gap = t - time(0);
  13.  
  14. char time_str_buf[32];
  15. snprintf(time_str_buf, sizeof(time_str_buf), "%s", time_str(get_global_time()));
  16.  
  17. sys_log(0, "GLOBAL_TIME: %s time_gap %d", time_str_buf, global_time_gap);
  18. }
  19.  
  20. #include <mysql/mysql.h>
  21. #ifndef SHA1_HASH_SIZE
  22. #define SHA1_HASH_SIZE 20
  23. #endif
  24. std::string mysql_hash_password(const char* tmp_pwd)
  25. {
  26. char hash_buf[2*SHA1_HASH_SIZE + 2] = "";
  27. make_scrambled_password(hash_buf, tmp_pwd);
  28. return hash_buf;
  29. }
  30.  
  31. int dice(int number, int size)
  32. {
  33. int sum = 0, val;
  34.  
  35. if (size <= 0 || number <= 0)
  36. return (0);
  37.  
  38. while (number)
  39. {
  40. val = ((thecore_random() % size) + 1);
  41. sum += val;
  42. --number;
  43. }
  44.  
  45. return (sum);
  46. }
  47.  
  48. size_t str_lower(const char * src, char * dest, size_t dest_size)
  49. {
  50. size_t len = 0;
  51.  
  52. if (!dest || dest_size == 0)
  53. return len;
  54.  
  55. if (!src)
  56. {
  57. *dest = '\0';
  58. return len;
  59. }
  60.  
  61. // \0 자리 확보
  62. --dest_size;
  63.  
  64. while (*src && len < dest_size)
  65. {
  66. *dest = LOWER(*src); // LOWER 매크로에서 ++나 --하면 안됨!!
  67.  
  68. ++src;
  69. ++dest;
  70. ++len;
  71. }
  72.  
  73. *dest = '\0';
  74. return len;
  75. }
  76.  
  77. void skip_spaces(const char **string)
  78. {
  79. for (; **string != '\0' && isnhspace(**string); ++(*string));
  80. }
  81.  
  82. const char *one_argument(const char *argument, char *first_arg, size_t first_size)
  83. {
  84. char mark = FALSE;
  85. size_t first_len = 0;
  86.  
  87. if (!argument || 0 == first_size)
  88. {
  89. sys_err("one_argument received a NULL pointer!");
  90. *first_arg = '\0';
  91. return NULL;
  92. }
  93.  
  94. // \0 자리 확보
  95. --first_size;
  96.  
  97. skip_spaces(&argument);
  98.  
  99. while (*argument && first_len < first_size)
  100. {
  101. if (*argument == '\"')
  102. {
  103. mark = !mark;
  104. ++argument;
  105. continue;
  106. }
  107.  
  108. if (!mark && isnhspace(*argument))
  109. break;
  110.  
  111. *(first_arg++) = *argument;
  112. ++argument;
  113. ++first_len;
  114. }
  115.  
  116. *first_arg = '\0';
  117.  
  118. skip_spaces(&argument);
  119. return (argument);
  120. }
  121.  
  122. const char *two_arguments(const char *argument, char *first_arg, size_t first_size, char *second_arg, size_t second_size)
  123. {
  124. return (one_argument(one_argument(argument, first_arg, first_size), second_arg, second_size));
  125. }
  126.  
  127. const char *first_cmd(const char *argument, char *first_arg, size_t first_arg_size, size_t *first_arg_len_result)
  128. {
  129. size_t cur_len = 0;
  130. skip_spaces(&argument);
  131.  
  132. // \0 자리 확보
  133. first_arg_size -= 1;
  134.  
  135. while (*argument && !isnhspace(*argument) && cur_len < first_arg_size)
  136. {
  137. *(first_arg++) = LOWER(*argument);
  138. ++argument;
  139. ++cur_len;
  140. }
  141.  
  142. *first_arg_len_result = cur_len;
  143. *first_arg = '\0';
  144. return (argument);
  145. }
  146.  
  147. int CalculateDuration(int iSpd, int iDur)
  148. {
  149. int i = 100 - iSpd;
  150.  
  151. if (i > 0)
  152. i = 100 + i;
  153. else if (i < 0)
  154. i = 10000 / (100 - i);
  155. else
  156. i = 100;
  157.  
  158. return iDur * i / 100;
  159. }
  160.  
  161. double uniform_random(double a, double b)
  162. {
  163. return thecore_random() / (RAND_MAX + 1.f) * (b - a) + a;
  164. }
  165.  
  166. float gauss_random(float avg, float sigma)
  167. {
  168. static bool haveNextGaussian = false;
  169. static float nextGaussian = 0.0f;
  170.  
  171. if (haveNextGaussian)
  172. {
  173. haveNextGaussian = false;
  174. return nextGaussian * sigma + avg;
  175. }
  176. else
  177. {
  178. double v1, v2, s;
  179. do {
  180. //v1 = 2 * nextDouble() - 1; // between -1.0 and 1.0
  181. //v2 = 2 * nextDouble() - 1; // between -1.0 and 1.0
  182. v1 = uniform_random(-1.f, 1.f);
  183. v2 = uniform_random(-1.f, 1.f);
  184. s = v1 * v1 + v2 * v2;
  185. } while (s >= 1.f || fabs(s) < FLT_EPSILON);
  186. double multiplier = sqrtf(-2 * logf(s) / s);
  187. nextGaussian = v2 * multiplier;
  188. haveNextGaussian = true;
  189. return v1 * multiplier * sigma + avg;
  190. }
  191. }
  192.  
  193. int parse_time_str(const char* str)
  194. {
  195. int tmp = 0;
  196. int secs = 0;
  197.  
  198. while (*str != 0)
  199. {
  200. switch (*str)
  201. {
  202. case 'm':
  203. case 'M':
  204. secs += tmp * 60;
  205. tmp = 0;
  206. break;
  207.  
  208. case 'h':
  209. case 'H':
  210. secs += tmp * 3600;
  211. tmp = 0;
  212. break;
  213.  
  214. case 'd':
  215. case 'D':
  216. secs += tmp * 86400;
  217. tmp = 0;
  218. break;
  219.  
  220. case '0':
  221. case '1':
  222. case '2':
  223. case '3':
  224. case '4':
  225. case '5':
  226. case '6':
  227. case '7':
  228. case '8':
  229. case '9':
  230. tmp *= 10;
  231. tmp += (*str) - '0';
  232. break;
  233.  
  234. case 's':
  235. case 'S':
  236. secs += tmp;
  237. tmp = 0;
  238. break;
  239. default:
  240. return -1;
  241. }
  242. ++str;
  243. }
  244.  
  245. return secs + tmp;
  246. }
  247.  
  248. bool WildCaseCmp(const char *w, const char *s)
  249. {
  250. for (;;)
  251. {
  252. switch(*w)
  253. {
  254. case '*':
  255. if (!w[1])
  256. return true;
  257. {
  258. for (size_t i = 0; i <= strlen(s); ++i)
  259. {
  260. if (true == WildCaseCmp(w + 1, s + i))
  261. return true;
  262. }
  263. }
  264. return false;
  265.  
  266. case '?':
  267. if (!*s)
  268. return false;
  269.  
  270. ++w;
  271. ++s;
  272. break;
  273.  
  274. default:
  275. if (*w != *s)
  276. {
  277. if (tolower(*w) != tolower(*s))
  278. return false;
  279. }
  280.  
  281. if (!*w)
  282. return true;
  283.  
  284. ++w;
  285. ++s;
  286. break;
  287. }
  288. }
  289.  
  290. return false;
  291. }
  292.  
  293.  
Advertisement
Add Comment
Please, Sign In to add comment