summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNat Goodspeed <nat@lindenlab.com>2019-07-18 12:03:12 +0200
committerNat Goodspeed <nat@lindenlab.com>2020-03-25 18:44:04 -0400
commit3810145c1d8e21fc0819d71bbc42dcecced1f7e4 (patch)
tree6910b680b095e066c5028477b7eed23128d9ea91
parent72863b942829528a8a3af69d6e1e04a7ac139271 (diff)
DRTVWR-476: Fix first round of compile errors.
-rw-r--r--indra/llcommon/llcond.h31
1 files changed, 18 insertions, 13 deletions
diff --git a/indra/llcommon/llcond.h b/indra/llcommon/llcond.h
index 8e7120582c..b4289528de 100644
--- a/indra/llcommon/llcond.h
+++ b/indra/llcommon/llcond.h
@@ -39,7 +39,7 @@ template <typename DATA>
class LLCond
{
public:
- typedef value_type DATA;
+ typedef DATA value_type;
private:
// This is the DATA controlled by the condition_variable.
@@ -56,7 +56,7 @@ private:
public:
/// LLCond can be explicitly initialized with a specific value for mData if
/// desired.
- LLCond(value_type&& init=value_type()):
+ LLCond(const value_type& init=value_type()):
mData(init)
{}
@@ -169,11 +169,16 @@ public:
protected:
// convert F32Milliseconds to a chrono::duration
- std::chrono::milliseconds convert(F32Milliseconds duration)
+ auto convert(F32Milliseconds duration)
{
- // extract the F32 milliseconds from F32Milliseconds, construct
- // std::chrono::milliseconds from that value
- return { duration.value() };
+ // std::chrono::milliseconds doesn't like to be constructed from a
+ // float (F32), rubbing our nose in the thought that
+ // std::chrono::duration::rep is probably integral. Therefore
+ // converting F32Milliseconds to std::chrono::milliseconds would lose
+ // precision. Use std::chrono::microseconds instead. Extract the F32
+ // milliseconds from F32Milliseconds, scale to microseconds, construct
+ // std::chrono::microseconds from that value.
+ return std::chrono::microseconds{ std::chrono::microseconds::rep(duration.value() * 1000) };
}
private:
@@ -224,31 +229,31 @@ class LLScalarCond: public LLCond<DATA>
using super = LLCond<DATA>;
public:
- using super::value_type;
+ using typename super::value_type;
using super::get;
using super::wait;
using super::wait_for;
/// LLScalarCond can be explicitly initialized with a specific value for
/// mData if desired.
- LLCond(value_type&& init=value_type()):
+ LLScalarCond(const value_type& init=value_type()):
super(init)
{}
/// Pass set_one() a new value to which to update mData. set_one() will
/// lock the mutex, update mData and then call notify_one() on the
/// condition_variable.
- void set_one(value_type&& value)
+ void set_one(const value_type& value)
{
- super::update_one([](value_type& data){ data = value; });
+ super::update_one([&value](value_type& data){ data = value; });
}
/// Pass set_all() a new value to which to update mData. set_all() will
/// lock the mutex, update mData and then call notify_all() on the
/// condition_variable.
- void set_all(value_type&& value)
+ void set_all(const value_type& value)
{
- super::update_all([](value_type& data){ data = value; });
+ super::update_all([&value](value_type& data){ data = value; });
}
/**
@@ -338,7 +343,7 @@ class LLOneShotCond: public LLBoolCond
using super = LLBoolCond;
public:
- using super::value_type;
+ using typename super::value_type;
using super::get;
using super::wait;
using super::wait_for;