Advertisement
Guest User

Untitled

a guest
Feb 21st, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.60 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