diff --git a/include/mem.h b/include/mem.h index 5e68557..5fcde1c 100644 --- a/include/mem.h +++ b/include/mem.h @@ -73,12 +73,18 @@ namespace mem inline const T * operator->() const { return get_ptr(); } inline T * operator->() { return get_ptr(); } + inline const T * operator&() const { return get_ptr(); } + inline T * operator&() { return get_ptr(); } + inline const T & operator*() const { return get(); } inline T & operator*() { return get(); } inline operator const T*() const { return get_ptr(); } inline operator T*() { return get_ptr(); } + inline operator const T&() const { return get(); } + inline operator T&() { return get(); } + inline aligned_ptr& operator=(aligned_ptr&& other) { if(ptr) aligned_ptr_util::dealloc(ptr); diff --git a/src/rng/crand.cpp b/src/rng/crand.cpp index c75b1bf..aca200b 100644 --- a/src/rng/crand.cpp +++ b/src/rng/crand.cpp @@ -26,8 +26,8 @@ namespace rng crand::crand(u64 seed) : crand(reinterpret_cast<_opaque*>(_jr_new(seed))){} crand::crand() : crand(0xabad1dea){} - i64 crand::_sample_int() { return _jr_proc(reinterpret_cast(_state.get_ptr())); } //RANGE_MIN..=RANGE_MAX - f64 crand::_sample() { return _jr_procf(reinterpret_cast(_state.get_ptr())); } //0..1 + i64 crand::_sample_int() { return _jr_proc(reinterpret_cast(&_state)); } //RANGE_MIN..=RANGE_MAX + f64 crand::_sample() { return _jr_procf(reinterpret_cast(&_state)); } //0..1 // Overrides // u64 crand::next_u64() { return std::bit_cast(std::abs(_sample_int()) & INT32_MAX); }