Commit ebb23a9e authored by wind2009's avatar wind2009

Merge remote-tracking branch 'upstream/master' into develop

parents d8381ab6 2185e226
......@@ -22,7 +22,7 @@ inline void buffer_write_block(unsigned char*& p, const void* src, size_t size)
p += size;
}
template<typename T>
inline void buffer_write(unsigned char*& p, T value) {
inline void buffer_write(unsigned char*& p, const T& value) {
std::memcpy(p, &value, sizeof(T));
p += sizeof(T);
}
......@@ -30,10 +30,10 @@ inline void buffer_write(unsigned char*& p, T value) {
inline void vector_write_block(std::vector<unsigned char>& buffer, const void* src, size_t size) {
const auto len = buffer.size();
buffer.resize(len + size);
std::memcpy(&buffer[len], src, size);
std::memcpy(buffer.data() + len, src, size);
}
template<typename T>
inline void vector_write(std::vector<unsigned char>& buffer, T value) {
inline void vector_write(std::vector<unsigned char>& buffer, const T& value) {
vector_write_block(buffer, &value, sizeof(T));
}
......
......@@ -59,9 +59,9 @@ public:
return l + (int)(x % range);
}
#pragma warning(disable:4146)
// N % k = (N - k) % k = (-k) % k
// discard (N % range) numbers from the left end so that it is a multiple of range
#pragma warning(disable:4146)
int get_random_integer_v2(int l, int h) {
uint32_t range = (h - l + 1);
uint32_t bound = -range % range;
......@@ -75,7 +75,7 @@ public:
// Fisher-Yates shuffle [first, last)
template<typename T>
void shuffle_vector(std::vector<T>& v, int first = 0, int last = INT32_MAX, int version = 2) {
void shuffle_vector(std::vector<T>& v, int first, int last, int version) {
if ((size_t)last > v.size())
last = (int)v.size();
auto distribution = &mtrandom::get_random_integer_v2;
......@@ -87,6 +87,16 @@ public:
}
}
template<typename T>
void shuffle_vector(std::vector<T>& v) {
shuffle_vector(v, 0, (int)v.size(), 2);
}
template<typename T>
void shuffle_vector(std::vector<T>& v, int first, int last) {
shuffle_vector(v, first, last, 2);
}
private:
std::mt19937 rng;
};
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment