Otclient  14/8/2020
math.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2010-2020 OTClient <https://github.com/edubart/otclient>
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a copy
5  * of this software and associated documentation files (the "Software"), to deal
6  * in the Software without restriction, including without limitation the rights
7  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8  * copies of the Software, and to permit persons to whom the Software is
9  * furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in
12  * all copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20  * THE SOFTWARE.
21  */
22 
23 #include "math.h"
24 #include <random>
25 
26 #ifdef _MSC_VER
27  #pragma warning(disable:4267) // '?' : conversion from 'A' to 'B', possible loss of data
28 #endif
29 
30 namespace stdext {
31 
32 uint32_t adler32(const uint8_t *buffer, size_t size) {
33  size_t a = 1, b = 0, tlen;
34  while(size > 0) {
35  tlen = size > 5552 ? 5552 : size;
36  size -= tlen;
37  do {
38  a += *buffer++;
39  b += a;
40  } while (--tlen);
41 
42  a %= 65521;
43  b %= 65521;
44  }
45  return (b << 16) | a;
46 }
47 
48 long random_range(long min, long max)
49 {
50  static std::random_device rd;
51  static std::mt19937 gen(rd());
52  static std::uniform_int_distribution<long> dis(0, 2147483647);
53  return min + (dis(gen) % (max - min + 1));
54 }
55 
56 float random_range(float min, float max)
57 {
58  static std::random_device rd;
59  static std::mt19937 gen(rd());
60  static std::uniform_real_distribution<float> dis(0.0, 1.0);
61  return min + (max - min)*dis(gen);
62 }
63 
64 double round(double r)
65 {
66  return (r > 0.0) ? floor(r + 0.5) : ceil(r - 0.5);
67 }
68 
69 }
stdext::round
double round(double r)
Definition: math.cpp:64
math.h
stdext::adler32
uint32_t adler32(const uint8_t *buffer, size_t size)
Definition: math.cpp:32
stdext::random_range
long random_range(long min, long max)
Definition: math.cpp:48
stdext
Definition: any.h:30