Advertisement
Guest User

Untitled

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