blob: 2fd2fc5218aff9885aa5745df3d26a41d914133a [file] [log] [blame]
henrike@webrtc.orgf0488722014-05-13 18:00:26 +00001/*
2 * Copyright 2004 The WebRTC Project Authors. All rights reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#ifndef RTC_BASE_HELPERS_H_
12#define RTC_BASE_HELPERS_H_
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000013
Yves Gerey988cc082018-10-23 12:03:01 +020014#include <stddef.h>
15#include <stdint.h>
Jonas Olssona4d87372019-07-05 19:08:33 +020016
Henrik Kjellanderec78f1c2017-06-29 07:52:50 +020017#include <string>
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000018
Mirko Bonadei35214fc2019-09-23 14:54:28 +020019#include "rtc_base/system/rtc_export.h"
20
Henrik Kjellanderec78f1c2017-06-29 07:52:50 +020021namespace rtc {
22
23// For testing, we can return predictable data.
24void SetRandomTestMode(bool test);
25
26// Initializes the RNG, and seeds it with the specified entropy.
27bool InitRandom(int seed);
28bool InitRandom(const char* seed, size_t len);
29
30// Generates a (cryptographically) random string of the given length.
31// We generate base64 values so that they will be printable.
Mirko Bonadei35214fc2019-09-23 14:54:28 +020032RTC_EXPORT std::string CreateRandomString(size_t length);
Henrik Kjellanderec78f1c2017-06-29 07:52:50 +020033
34// Generates a (cryptographically) random string of the given length.
35// We generate base64 values so that they will be printable.
36// Return false if the random number generator failed.
Mirko Bonadei35214fc2019-09-23 14:54:28 +020037RTC_EXPORT bool CreateRandomString(size_t length, std::string* str);
Henrik Kjellanderec78f1c2017-06-29 07:52:50 +020038
39// Generates a (cryptographically) random string of the given length,
40// with characters from the given table. Return false if the random
41// number generator failed.
42// For ease of implementation, the function requires that the table
43// size evenly divide 256; otherwise, it returns false.
Mirko Bonadei35214fc2019-09-23 14:54:28 +020044RTC_EXPORT bool CreateRandomString(size_t length,
45 const std::string& table,
46 std::string* str);
Henrik Kjellanderec78f1c2017-06-29 07:52:50 +020047
48// Generates (cryptographically) random data of the given length.
49// Return false if the random number generator failed.
50bool CreateRandomData(size_t length, std::string* data);
51
52// Generates a (cryptographically) random UUID version 4 string.
53std::string CreateRandomUuid();
54
55// Generates a random id.
56uint32_t CreateRandomId();
57
58// Generates a 64 bit random id.
Mirko Bonadei35214fc2019-09-23 14:54:28 +020059RTC_EXPORT uint64_t CreateRandomId64();
Henrik Kjellanderec78f1c2017-06-29 07:52:50 +020060
61// Generates a random id > 0.
62uint32_t CreateRandomNonZeroId();
63
64// Generates a random double between 0.0 (inclusive) and 1.0 (exclusive).
65double CreateRandomDouble();
66
Qingsi Wang72a43a12018-02-20 16:03:18 -080067// Compute moving average with the given ratio between the previous average
68// value and the current value.
69double GetNextMovingAverage(double prev_average, double cur, double ratio);
70
Henrik Kjellanderec78f1c2017-06-29 07:52:50 +020071} // namespace rtc
henrike@webrtc.orgf0488722014-05-13 18:00:26 +000072
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020073#endif // RTC_BASE_HELPERS_H_