blob: 1a3ed8f1fb378aaf5b670523ccf35473cdc48df1 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef GFE_QUIC_PLATFORM_API_QUIC_TEST_RANDOM_IMPL_H_
#define GFE_QUIC_PLATFORM_API_QUIC_TEST_RANDOM_IMPL_H_
namespace net {
namespace test {
class QuicTestRandomBaseImpl {
public:
virtual ~QuicTestRandomBaseImpl() {}
virtual bool OneIn(int n) = 0;
virtual int32_t Uniform(int32_t n) = 0;
virtual uint8_t Rand8() = 0;
virtual uint16_t Rand16() = 0;
virtual uint32_t Rand32() = 0;
virtual uint64_t Rand64() = 0;
virtual int32_t Next() = 0;
virtual int32_t Skewed(int max_log) = 0;
virtual QuicString RandString(int length) = 0;
// STL UniformRandomNumberGenerator implementation.
typedef uint32_t result_type;
static constexpr result_type min() { return 0; }
static constexpr result_type max() {
return std::numeric_limits<uint32_t>::max();
}
result_type operator()() { return Rand32(); }
};
// QuicTestRandom holds no state: instances use the same base::RandGenerator
// with a global state.
class QuicTestRandomImpl : public QuicTestRandomBaseImpl {
public:
~QuicTestRandomImpl() override {}
bool OneIn(int n) override;
int32_t Uniform(int32_t n) override;
uint8_t Rand8() override;
uint16_t Rand16() override;
uint32_t Rand32() override;
uint64_t Rand64() override;
int32_t Next() override;
int32_t Skewed(int max_log) override;
QuicString RandString(int length) override;
};
} // namespace test
} // namespace net
#endif // GFE_QUIC_PLATFORM_API_QUIC_TEST_RANDOM_IMPL_H_