summaryrefslogtreecommitdiff
path: root/indra/llcommon
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llcommon')
-rwxr-xr-xindra/llcommon/llerror.h2
-rwxr-xr-xindra/llcommon/llfasttimer.cpp10
-rwxr-xr-xindra/llcommon/llfasttimer.h2
-rwxr-xr-xindra/llcommon/lltimer.cpp2
-rw-r--r--indra/llcommon/lltraceaccumulators.h4
-rw-r--r--indra/llcommon/lltracerecording.cpp62
-rw-r--r--indra/llcommon/lltracerecording.h28
-rw-r--r--indra/llcommon/llunit.h177
-rw-r--r--indra/llcommon/tests/llunits_test.cpp2
9 files changed, 232 insertions, 57 deletions
diff --git a/indra/llcommon/llerror.h b/indra/llcommon/llerror.h
index 7810676388..a3619559eb 100755
--- a/indra/llcommon/llerror.h
+++ b/indra/llcommon/llerror.h
@@ -308,7 +308,7 @@ typedef LLError::NoClassInfo _LL_CLASS_TO_LOG;
#define lllog(level, once, ...) \
do { \
const char* tags[] = {"", ##__VA_ARGS__}; \
- size_t tag_count = LL_ARRAY_SIZE(tags) - 1; \
+ ::size_t tag_count = LL_ARRAY_SIZE(tags) - 1; \
static LLError::CallSite _site( \
level, __FILE__, __LINE__, typeid(_LL_CLASS_TO_LOG), __FUNCTION__, once, &tags[1], tag_count);\
if (LL_UNLIKELY(_site.shouldLog())) \
diff --git a/indra/llcommon/llfasttimer.cpp b/indra/llcommon/llfasttimer.cpp
index 8f86a1dfbc..a91e716f19 100755
--- a/indra/llcommon/llfasttimer.cpp
+++ b/indra/llcommon/llfasttimer.cpp
@@ -339,7 +339,7 @@ void TimeBlock::logStats()
}
call_count++;
- LLUnit<F64, LLUnits::Seconds> total_time(0);
+ LLUnits::F64Seconds total_time(0);
LLSD sd;
{
@@ -382,11 +382,11 @@ void TimeBlock::dumpCurTimes()
++it)
{
TimeBlock* timerp = (*it);
- LLUnit<F64, LLUnits::Seconds> total_time = last_frame_recording.getSum(*timerp);
+ LLUnits::F64Seconds total_time = last_frame_recording.getSum(*timerp);
U32 num_calls = last_frame_recording.getSum(timerp->callCount());
// Don't bother with really brief times, keep output concise
- if (total_time < LLUnits::Milliseconds::fromValue(0.1f)) continue;
+ if (total_time < LLUnits::F32Milliseconds(0.1f)) continue;
std::ostringstream out_str;
TimeBlock* parent_timerp = timerp;
@@ -466,11 +466,11 @@ void TimeBlockAccumulator::reset( const TimeBlockAccumulator* other )
}
}
-LLUnit<F64, LLUnits::Seconds> BlockTimer::getElapsedTime()
+LLUnits::F64Seconds BlockTimer::getElapsedTime()
{
U64 total_time = TimeBlock::getCPUClockCount64() - mStartTime;
- return LLUnits::Seconds::fromValue((F64)total_time / (F64)TimeBlock::countsPerSecond());
+ return LLUnits::F64Seconds((F64)total_time / (F64)TimeBlock::countsPerSecond());
}
diff --git a/indra/llcommon/llfasttimer.h b/indra/llcommon/llfasttimer.h
index 73c40749ed..589b9bb941 100755
--- a/indra/llcommon/llfasttimer.h
+++ b/indra/llcommon/llfasttimer.h
@@ -48,7 +48,7 @@ public:
BlockTimer(TimeBlock& timer);
~BlockTimer();
- LLUnit<F64, LLUnits::Seconds> getElapsedTime();
+ LLUnits::F64Seconds getElapsedTime();
private:
diff --git a/indra/llcommon/lltimer.cpp b/indra/llcommon/lltimer.cpp
index a2c5f3d699..7077ea4b4f 100755
--- a/indra/llcommon/lltimer.cpp
+++ b/indra/llcommon/lltimer.cpp
@@ -262,7 +262,7 @@ LLUnitImplicit<U64, LLUnits::Microseconds> totalTime()
}
// Return the total clock tick count in microseconds.
- return LLUnits::Microseconds::fromValue(gTotalTimeClockCount*gClocksToMicroseconds);
+ return LLUnits::U64Microseconds(gTotalTimeClockCount*gClocksToMicroseconds);
}
diff --git a/indra/llcommon/lltraceaccumulators.h b/indra/llcommon/lltraceaccumulators.h
index ef73bd3091..4d79964526 100644
--- a/indra/llcommon/lltraceaccumulators.h
+++ b/indra/llcommon/lltraceaccumulators.h
@@ -418,7 +418,7 @@ namespace LLTrace
class TimeBlockAccumulator
{
public:
- typedef LLUnit<F64, LLUnits::Seconds> value_t;
+ typedef LLUnits::F64Seconds value_t;
typedef TimeBlockAccumulator self_t;
// fake classes that allows us to view different facets of underlying statistic
@@ -429,7 +429,7 @@ namespace LLTrace
struct SelfTimeFacet
{
- typedef LLUnit<F64, LLUnits::Seconds> value_t;
+ typedef LLUnits::F64Seconds value_t;
};
TimeBlockAccumulator();
diff --git a/indra/llcommon/lltracerecording.cpp b/indra/llcommon/lltracerecording.cpp
index 42d97ce314..963f0cd174 100644
--- a/indra/llcommon/lltracerecording.cpp
+++ b/indra/llcommon/lltracerecording.cpp
@@ -95,7 +95,7 @@ void Recording::handleReset()
{
mBuffers.write()->reset();
- mElapsedSeconds = LLUnits::Seconds::fromValue(0.0);
+ mElapsedSeconds = LLUnits::F64Seconds(0.0);
mSamplingTimer.reset();
}
@@ -128,17 +128,17 @@ void Recording::appendRecording( Recording& other )
mElapsedSeconds += other.mElapsedSeconds;
}
-LLUnit<F64, LLUnits::Seconds> Recording::getSum(const TraceType<TimeBlockAccumulator>& stat)
+LLUnits::F64Seconds Recording::getSum(const TraceType<TimeBlockAccumulator>& stat)
{
const TimeBlockAccumulator& accumulator = mBuffers->mStackTimers[stat.getIndex()];
- return LLUnits::Seconds::fromValue((F64)(accumulator.mTotalTimeCounter - accumulator.mStartTotalTimeCounter)
+ return LLUnits::F64Seconds((F64)(accumulator.mTotalTimeCounter - accumulator.mStartTotalTimeCounter)
/ (F64)LLTrace::TimeBlock::countsPerSecond());
}
-LLUnit<F64, LLUnits::Seconds> Recording::getSum(const TraceType<TimeBlockAccumulator::SelfTimeFacet>& stat)
+LLUnits::F64Seconds Recording::getSum(const TraceType<TimeBlockAccumulator::SelfTimeFacet>& stat)
{
const TimeBlockAccumulator& accumulator = mBuffers->mStackTimers[stat.getIndex()];
- return LLUnits::Seconds::fromValue((F64)(accumulator.mSelfTimeCounter) / (F64)LLTrace::TimeBlock::countsPerSecond());
+ return LLUnits::F64Seconds((F64)(accumulator.mSelfTimeCounter) / (F64)LLTrace::TimeBlock::countsPerSecond());
}
@@ -147,19 +147,19 @@ U32 Recording::getSum(const TraceType<TimeBlockAccumulator::CallCountFacet>& sta
return mBuffers->mStackTimers[stat.getIndex()].mCalls;
}
-LLUnit<F64, LLUnits::Seconds> Recording::getPerSec(const TraceType<TimeBlockAccumulator>& stat)
+LLUnits::F64Seconds Recording::getPerSec(const TraceType<TimeBlockAccumulator>& stat)
{
const TimeBlockAccumulator& accumulator = mBuffers->mStackTimers[stat.getIndex()];
- return LLUnits::Seconds::fromValue((F64)(accumulator.mTotalTimeCounter - accumulator.mStartTotalTimeCounter)
+ return LLUnits::F64Seconds((F64)(accumulator.mTotalTimeCounter - accumulator.mStartTotalTimeCounter)
/ ((F64)LLTrace::TimeBlock::countsPerSecond() * mElapsedSeconds.value()));
}
-LLUnit<F64, LLUnits::Seconds> Recording::getPerSec(const TraceType<TimeBlockAccumulator::SelfTimeFacet>& stat)
+LLUnits::F64Seconds Recording::getPerSec(const TraceType<TimeBlockAccumulator::SelfTimeFacet>& stat)
{
const TimeBlockAccumulator& accumulator = mBuffers->mStackTimers[stat.getIndex()];
- return LLUnits::Seconds::fromValue((F64)(accumulator.mSelfTimeCounter)
+ return LLUnits::F64Seconds((F64)(accumulator.mSelfTimeCounter)
/ ((F64)LLTrace::TimeBlock::countsPerSecond() * mElapsedSeconds.value()));
}
@@ -168,54 +168,54 @@ F32 Recording::getPerSec(const TraceType<TimeBlockAccumulator::CallCountFacet>&
return (F32)mBuffers->mStackTimers[stat.getIndex()].mCalls / mElapsedSeconds.value();
}
-LLUnit<F64, LLUnits::Bytes> Recording::getMin(const TraceType<MemStatAccumulator>& stat)
+LLUnits::F64Bytes Recording::getMin(const TraceType<MemStatAccumulator>& stat)
{
- return LLUnits::Bytes::fromValue(mBuffers->mMemStats[stat.getIndex()].mSize.getMin());
+ return LLUnits::F64Bytes(mBuffers->mMemStats[stat.getIndex()].mSize.getMin());
}
-LLUnit<F64, LLUnits::Bytes> Recording::getMean(const TraceType<MemStatAccumulator>& stat)
+LLUnits::F64Bytes Recording::getMean(const TraceType<MemStatAccumulator>& stat)
{
- return LLUnits::Bytes::fromValue(mBuffers->mMemStats[stat.getIndex()].mSize.getMean());
+ return LLUnits::F64Bytes(mBuffers->mMemStats[stat.getIndex()].mSize.getMean());
}
-LLUnit<F64, LLUnits::Bytes> Recording::getMax(const TraceType<MemStatAccumulator>& stat)
+LLUnits::F64Bytes Recording::getMax(const TraceType<MemStatAccumulator>& stat)
{
- return LLUnits::Bytes::fromValue(mBuffers->mMemStats[stat.getIndex()].mSize.getMax());
+ return LLUnits::F64Bytes(mBuffers->mMemStats[stat.getIndex()].mSize.getMax());
}
-LLUnit<F64, LLUnits::Bytes> Recording::getStandardDeviation(const TraceType<MemStatAccumulator>& stat)
+LLUnits::F64Bytes Recording::getStandardDeviation(const TraceType<MemStatAccumulator>& stat)
{
- return LLUnits::Bytes::fromValue(mBuffers->mMemStats[stat.getIndex()].mSize.getStandardDeviation());
+ return LLUnits::F64Bytes(mBuffers->mMemStats[stat.getIndex()].mSize.getStandardDeviation());
}
-LLUnit<F64, LLUnits::Bytes> Recording::getLastValue(const TraceType<MemStatAccumulator>& stat)
+LLUnits::F64Bytes Recording::getLastValue(const TraceType<MemStatAccumulator>& stat)
{
- return LLUnits::Bytes::fromValue(mBuffers->mMemStats[stat.getIndex()].mSize.getLastValue());
+ return LLUnits::F64Bytes(mBuffers->mMemStats[stat.getIndex()].mSize.getLastValue());
}
-LLUnit<F64, LLUnits::Bytes> Recording::getMin(const TraceType<MemStatAccumulator::ChildMemFacet>& stat)
+LLUnits::F64Bytes Recording::getMin(const TraceType<MemStatAccumulator::ChildMemFacet>& stat)
{
- return LLUnits::Bytes::fromValue(mBuffers->mMemStats[stat.getIndex()].mChildSize.getMin());
+ return LLUnits::F64Bytes(mBuffers->mMemStats[stat.getIndex()].mChildSize.getMin());
}
-LLUnit<F64, LLUnits::Bytes> Recording::getMean(const TraceType<MemStatAccumulator::ChildMemFacet>& stat)
+LLUnits::F64Bytes Recording::getMean(const TraceType<MemStatAccumulator::ChildMemFacet>& stat)
{
- return LLUnits::Bytes::fromValue(mBuffers->mMemStats[stat.getIndex()].mChildSize.getMean());
+ return LLUnits::F64Bytes(mBuffers->mMemStats[stat.getIndex()].mChildSize.getMean());
}
-LLUnit<F64, LLUnits::Bytes> Recording::getMax(const TraceType<MemStatAccumulator::ChildMemFacet>& stat)
+LLUnits::F64Bytes Recording::getMax(const TraceType<MemStatAccumulator::ChildMemFacet>& stat)
{
- return LLUnits::Bytes::fromValue(mBuffers->mMemStats[stat.getIndex()].mChildSize.getMax());
+ return LLUnits::F64Bytes(mBuffers->mMemStats[stat.getIndex()].mChildSize.getMax());
}
-LLUnit<F64, LLUnits::Bytes> Recording::getStandardDeviation(const TraceType<MemStatAccumulator::ChildMemFacet>& stat)
+LLUnits::F64Bytes Recording::getStandardDeviation(const TraceType<MemStatAccumulator::ChildMemFacet>& stat)
{
- return LLUnits::Bytes::fromValue(mBuffers->mMemStats[stat.getIndex()].mChildSize.getStandardDeviation());
+ return LLUnits::F64Bytes(mBuffers->mMemStats[stat.getIndex()].mChildSize.getStandardDeviation());
}
-LLUnit<F64, LLUnits::Bytes> Recording::getLastValue(const TraceType<MemStatAccumulator::ChildMemFacet>& stat)
+LLUnits::F64Bytes Recording::getLastValue(const TraceType<MemStatAccumulator::ChildMemFacet>& stat)
{
- return LLUnits::Bytes::fromValue(mBuffers->mMemStats[stat.getIndex()].mChildSize.getLastValue());
+ return LLUnits::F64Bytes(mBuffers->mMemStats[stat.getIndex()].mChildSize.getLastValue());
}
U32 Recording::getSum(const TraceType<MemStatAccumulator::AllocationCountFacet>& stat)
@@ -427,9 +427,9 @@ void PeriodicRecording::appendPeriodicRecording( PeriodicRecording& other )
getCurRecording().setPlayState(getPlayState());
}
-LLUnit<F64, LLUnits::Seconds> PeriodicRecording::getDuration() const
+LLUnits::F64Seconds PeriodicRecording::getDuration() const
{
- LLUnit<F64, LLUnits::Seconds> duration;
+ LLUnits::F64Seconds duration;
size_t num_periods = mRecordingPeriods.size();
for (size_t i = 1; i <= num_periods; i++)
{
diff --git a/indra/llcommon/lltracerecording.h b/indra/llcommon/lltracerecording.h
index 3722a61327..811786fbfa 100644
--- a/indra/llcommon/lltracerecording.h
+++ b/indra/llcommon/lltracerecording.h
@@ -166,12 +166,12 @@ namespace LLTrace
void makeUnique() { mBuffers.makeUnique(); }
// Timer accessors
- LLUnit<F64, LLUnits::Seconds> getSum(const TraceType<TimeBlockAccumulator>& stat);
- LLUnit<F64, LLUnits::Seconds> getSum(const TraceType<TimeBlockAccumulator::SelfTimeFacet>& stat);
+ LLUnits::F64Seconds getSum(const TraceType<TimeBlockAccumulator>& stat);
+ LLUnits::F64Seconds getSum(const TraceType<TimeBlockAccumulator::SelfTimeFacet>& stat);
U32 getSum(const TraceType<TimeBlockAccumulator::CallCountFacet>& stat);
- LLUnit<F64, LLUnits::Seconds> getPerSec(const TraceType<TimeBlockAccumulator>& stat);
- LLUnit<F64, LLUnits::Seconds> getPerSec(const TraceType<TimeBlockAccumulator::SelfTimeFacet>& stat);
+ LLUnits::F64Seconds getPerSec(const TraceType<TimeBlockAccumulator>& stat);
+ LLUnits::F64Seconds getPerSec(const TraceType<TimeBlockAccumulator::SelfTimeFacet>& stat);
F32 getPerSec(const TraceType<TimeBlockAccumulator::CallCountFacet>& stat);
// Memory accessors
@@ -295,7 +295,7 @@ namespace LLTrace
U32 getSampleCount(const TraceType<EventAccumulator>& stat);
- LLUnit<F64, LLUnits::Seconds> getDuration() const { return mElapsedSeconds; }
+ LLUnits::F64Seconds getDuration() const { return mElapsedSeconds; }
protected:
friend class ThreadRecorder;
@@ -310,7 +310,7 @@ namespace LLTrace
class ThreadRecorder* getThreadRecorder();
LLTimer mSamplingTimer;
- LLUnit<F64, LLUnits::Seconds> mElapsedSeconds;
+ LLUnits::F64Seconds mElapsedSeconds;
LLCopyOnWritePointer<AccumulatorBufferGroup> mBuffers;
bool mInHandOff;
@@ -325,7 +325,7 @@ namespace LLTrace
void nextPeriod();
size_t getNumRecordedPeriods() { return mNumPeriods; }
- LLUnit<F64, LLUnits::Seconds> getDuration() const;
+ LLUnits::F64Seconds getDuration() const;
void appendPeriodicRecording(PeriodicRecording& other);
void appendRecording(Recording& recording);
@@ -485,7 +485,7 @@ namespace LLTrace
size_t total_periods = mNumPeriods;
num_periods = llmin(num_periods, isStarted() ? total_periods - 1 : total_periods);
- typename RelatedTypes<T::value_t>::fractional_t mean = 0;
+ typename RelatedTypes<T::value_t>::fractional_t mean(0);
for (S32 i = 1; i <= num_periods; i++)
{
@@ -495,9 +495,9 @@ namespace LLTrace
mean += recording.getSum(stat);
}
}
- return RelatedTypes<T::value_t>::fractional_t(num_periods
- ? mean / num_periods
- : NaN);
+ return (num_periods
+ ? RelatedTypes<T::value_t>::fractional_t(mean / num_periods)
+ : RelatedTypes<T::value_t>::fractional_t(NaN));
}
template<typename T>
@@ -536,9 +536,9 @@ namespace LLTrace
}
}
- return RelatedTypes<T::value_t>::fractional_t(num_periods
- ? mean / num_periods
- : NaN);
+ return (num_periods
+ ? RelatedTypes<T::value_t>::fractional_t(mean / num_periods)
+ : RelatedTypes<T::value_t>::fractional_t(NaN));
}
template<typename T>
diff --git a/indra/llcommon/llunit.h b/indra/llcommon/llunit.h
index b135be48fa..9a367d9182 100644
--- a/indra/llcommon/llunit.h
+++ b/indra/llcommon/llunit.h
@@ -39,7 +39,7 @@ struct LLUnit
typedef STORAGE_TYPE storage_t;
// value initialization
- LLUnit(storage_t value = storage_t())
+ explicit LLUnit(storage_t value = storage_t())
: mValue(value)
{}
@@ -644,6 +644,54 @@ LL_DECLARE_DERIVED_UNIT(Bytes, * 1024, Kibibytes, "KiB");
LL_DECLARE_DERIVED_UNIT(Kibibytes, * 1024, Mibibytes, "MiB");
LL_DECLARE_DERIVED_UNIT(Mibibytes, * 1024, Gibibytes, "GiB");
+typedef LLUnit<F32, Bytes> F32Bytes;
+typedef LLUnit<F32, Kilobytes> F32KiloBytes;
+typedef LLUnit<F32, Megabytes> F32MegaBytes;
+typedef LLUnit<F32, Gigabytes> F32GigaBytes;
+typedef LLUnit<F32, Kibibytes> F32KibiBytes;
+typedef LLUnit<F32, Mibibytes> F32MibiBytes;
+typedef LLUnit<F32, Gibibytes> F32GibiBytes;
+
+typedef LLUnit<F64, Bytes> F64Bytes;
+typedef LLUnit<F64, Kilobytes> F64KiloBytes;
+typedef LLUnit<F64, Megabytes> F64MegaBytes;
+typedef LLUnit<F64, Gigabytes> F64GigaBytes;
+typedef LLUnit<F64, Kibibytes> F64KibiBytes;
+typedef LLUnit<F64, Mibibytes> F64MibiBytes;
+typedef LLUnit<F64, Gibibytes> F64GibiBytes;
+
+typedef LLUnit<S32, Bytes> S32Bytes;
+typedef LLUnit<S32, Kilobytes> S32KiloBytes;
+typedef LLUnit<S32, Megabytes> S32MegaBytes;
+typedef LLUnit<S32, Gigabytes> S32GigaBytes;
+typedef LLUnit<S32, Kibibytes> S32KibiBytes;
+typedef LLUnit<S32, Mibibytes> S32MibiBytes;
+typedef LLUnit<S32, Gibibytes> S32GibiBytes;
+
+typedef LLUnit<U32, Bytes> U32Bytes;
+typedef LLUnit<U32, Kilobytes> U32KiloBytes;
+typedef LLUnit<U32, Megabytes> U32MegaBytes;
+typedef LLUnit<U32, Gigabytes> U32GigaBytes;
+typedef LLUnit<U32, Kibibytes> U32KibiBytes;
+typedef LLUnit<U32, Mibibytes> U32MibiBytes;
+typedef LLUnit<U32, Gibibytes> U32GibiBytes;
+
+typedef LLUnit<S64, Bytes> S64Bytes;
+typedef LLUnit<S64, Kilobytes> S64KiloBytes;
+typedef LLUnit<S64, Megabytes> S64MegaBytes;
+typedef LLUnit<S64, Gigabytes> S64GigaBytes;
+typedef LLUnit<S64, Kibibytes> S64KibiBytes;
+typedef LLUnit<S64, Mibibytes> S64MibiBytes;
+typedef LLUnit<S64, Gibibytes> S64GibiBytes;
+
+typedef LLUnit<U64, Bytes> U64Bytes;
+typedef LLUnit<U64, Kilobytes> U64KiloBytes;
+typedef LLUnit<U64, Megabytes> U64MegaBytes;
+typedef LLUnit<U64, Gigabytes> U64GigaBytes;
+typedef LLUnit<U64, Kibibytes> U64KibiBytes;
+typedef LLUnit<U64, Mibibytes> U64MibiBytes;
+typedef LLUnit<U64, Gibibytes> U64GibiBytes;
+
LL_DECLARE_DERIVED_UNIT(Bytes, / 8, Bits, "b");
LL_DECLARE_DERIVED_UNIT(Bits, * 1000, Kilobits, "Kb");
LL_DECLARE_DERIVED_UNIT(Kilobits, * 1000, Megabits, "Mb");
@@ -652,6 +700,54 @@ LL_DECLARE_DERIVED_UNIT(Bits, * 1024, Kibibits, "Kib");
LL_DECLARE_DERIVED_UNIT(Kibibits, * 1024, Mibibits, "Mib");
LL_DECLARE_DERIVED_UNIT(Mibibits, * 1024, Gibibits, "Gib");
+typedef LLUnit<F32, Bits> F32Bits;
+typedef LLUnit<F32, Kilobits> F32KiloBits;
+typedef LLUnit<F32, Megabits> F32MegaBits;
+typedef LLUnit<F32, Gigabits> F32GigaBits;
+typedef LLUnit<F32, Kibibits> F32KibiBits;
+typedef LLUnit<F32, Mibibits> F32MibiBits;
+typedef LLUnit<F32, Gibibits> F32GibiBits;
+
+typedef LLUnit<F64, Bits> F64Bits;
+typedef LLUnit<F64, Kilobits> F64KiloBits;
+typedef LLUnit<F64, Megabits> F64MegaBits;
+typedef LLUnit<F64, Gigabits> F64GigaBits;
+typedef LLUnit<F64, Kibibits> F64KibiBits;
+typedef LLUnit<F64, Mibibits> F64MibiBits;
+typedef LLUnit<F64, Gibibits> F64GibiBits;
+
+typedef LLUnit<S32, Bits> S32Bits;
+typedef LLUnit<S32, Kilobits> S32KiloBits;
+typedef LLUnit<S32, Megabits> S32MegaBits;
+typedef LLUnit<S32, Gigabits> S32GigaBits;
+typedef LLUnit<S32, Kibibits> S32KibiBits;
+typedef LLUnit<S32, Mibibits> S32MibiBits;
+typedef LLUnit<S32, Gibibits> S32GibiBits;
+
+typedef LLUnit<U32, Bits> U32Bits;
+typedef LLUnit<U32, Kilobits> U32KiloBits;
+typedef LLUnit<U32, Megabits> U32MegaBits;
+typedef LLUnit<U32, Gigabits> U32GigaBits;
+typedef LLUnit<U32, Kibibits> U32KibiBits;
+typedef LLUnit<U32, Mibibits> U32MibiBits;
+typedef LLUnit<U32, Gibibits> U32GibiBits;
+
+typedef LLUnit<S64, Bits> S64Bits;
+typedef LLUnit<S64, Kilobits> S64KiloBits;
+typedef LLUnit<S64, Megabits> S64MegaBits;
+typedef LLUnit<S64, Gigabits> S64GigaBits;
+typedef LLUnit<S64, Kibibits> S64KibiBits;
+typedef LLUnit<S64, Mibibits> S64MibiBits;
+typedef LLUnit<S64, Gibibits> S64GibiBits;
+
+typedef LLUnit<U64, Bits> U64Bits;
+typedef LLUnit<U64, Kilobits> U64KiloBits;
+typedef LLUnit<U64, Megabits> U64MegaBits;
+typedef LLUnit<U64, Gigabits> U64GigaBits;
+typedef LLUnit<U64, Kibibits> U64KibiBits;
+typedef LLUnit<U64, Mibibits> U64MibiBits;
+typedef LLUnit<U64, Gibibits> U64GibiBits;
+
LL_DECLARE_BASE_UNIT(Seconds, "s");
LL_DECLARE_DERIVED_UNIT(Seconds, * 60, Minutes, "min");
LL_DECLARE_DERIVED_UNIT(Minutes, * 60, Hours, "h");
@@ -660,11 +756,90 @@ LL_DECLARE_DERIVED_UNIT(Seconds, / 1000, Milliseconds, "ms");
LL_DECLARE_DERIVED_UNIT(Milliseconds, / 1000, Microseconds, "\x09\x3cs");
LL_DECLARE_DERIVED_UNIT(Microseconds, / 1000, Nanoseconds, "ns");
+typedef LLUnit<F32, Seconds> F32Seconds;
+typedef LLUnit<F32, Minutes> F32Minutes;
+typedef LLUnit<F32, Hours> F32Hours;
+typedef LLUnit<F32, Days> F32Days;
+typedef LLUnit<F32, Milliseconds> F32Milliseconds;
+typedef LLUnit<F32, Microseconds> F32Microseconds;
+typedef LLUnit<F32, Nanoseconds> F32Nanoseconds;
+
+typedef LLUnit<F64, Seconds> F64Seconds;
+typedef LLUnit<F64, Minutes> F64Minutes;
+typedef LLUnit<F64, Hours> F64Hours;
+typedef LLUnit<F64, Days> F64Days;
+typedef LLUnit<F64, Milliseconds> F64Milliseconds;
+typedef LLUnit<F64, Microseconds> F64Microseconds;
+typedef LLUnit<F64, Nanoseconds> F64Nanoseconds;
+
+typedef LLUnit<S32, Seconds> S32Seconds;
+typedef LLUnit<S32, Minutes> S32Minutes;
+typedef LLUnit<S32, Hours> S32Hours;
+typedef LLUnit<S32, Days> S32Days;
+typedef LLUnit<S32, Milliseconds> S32Milliseconds;
+typedef LLUnit<S32, Microseconds> S32Microseconds;
+typedef LLUnit<S32, Nanoseconds> S32Nanoseconds;
+
+typedef LLUnit<U32, Seconds> U32Seconds;
+typedef LLUnit<U32, Minutes> U32Minutes;
+typedef LLUnit<U32, Hours> U32Hours;
+typedef LLUnit<U32, Days> U32Days;
+typedef LLUnit<U32, Milliseconds> U32Milliseconds;
+typedef LLUnit<U32, Microseconds> U32Microseconds;
+typedef LLUnit<U32, Nanoseconds> U32Nanoseconds;
+
+typedef LLUnit<S64, Seconds> S64Seconds;
+typedef LLUnit<S64, Minutes> S64Minutes;
+typedef LLUnit<S64, Hours> S64Hours;
+typedef LLUnit<S64, Days> S64Days;
+typedef LLUnit<S64, Milliseconds> S64Milliseconds;
+typedef LLUnit<S64, Microseconds> S64Microseconds;
+typedef LLUnit<S64, Nanoseconds> S64Nanoseconds;
+
+typedef LLUnit<U64, Seconds> U64Seconds;
+typedef LLUnit<U64, Minutes> U64Minutes;
+typedef LLUnit<U64, Hours> U64Hours;
+typedef LLUnit<U64, Days> U64Days;
+typedef LLUnit<U64, Milliseconds> U64Milliseconds;
+typedef LLUnit<U64, Microseconds> U64Microseconds;
+typedef LLUnit<U64, Nanoseconds> U64Nanoseconds;
+
LL_DECLARE_BASE_UNIT(Meters, "m");
LL_DECLARE_DERIVED_UNIT(Meters, * 1000, Kilometers, "km");
LL_DECLARE_DERIVED_UNIT(Meters, / 100, Centimeters, "cm");
LL_DECLARE_DERIVED_UNIT(Meters, / 1000, Millimeters, "mm");
+typedef LLUnit<F32, Meters> F32Meters;
+typedef LLUnit<F32, Kilometers> F32Kilometers;
+typedef LLUnit<F32, Centimeters> F32Centimeters;
+typedef LLUnit<F32, Millimeters> F32Millimeters;
+
+typedef LLUnit<F64, Meters> F64Meters;
+typedef LLUnit<F64, Kilometers> F64Kilometers;
+typedef LLUnit<F64, Centimeters> F64Centimeters;
+typedef LLUnit<F64, Millimeters> F64Millimeters;
+
+typedef LLUnit<S32, Meters> S32Meters;
+typedef LLUnit<S32, Kilometers> S32Kilometers;
+typedef LLUnit<S32, Centimeters> S32Centimeters;
+typedef LLUnit<S32, Millimeters> S32Millimeters;
+
+typedef LLUnit<U32, Meters> U32Meters;
+typedef LLUnit<U32, Kilometers> U32Kilometers;
+typedef LLUnit<U32, Centimeters> U32Centimeters;
+typedef LLUnit<U32, Millimeters> U32Millimeters;
+
+typedef LLUnit<S64, Meters> S64Meters;
+typedef LLUnit<S64, Kilometers> S64Kilometers;
+typedef LLUnit<S64, Centimeters> S64Centimeters;
+typedef LLUnit<S64, Millimeters> S64Millimeters;
+
+typedef LLUnit<U64, Meters> U64Meters;
+typedef LLUnit<U64, Kilometers> U64Kilometers;
+typedef LLUnit<U64, Centimeters> U64Centimeters;
+typedef LLUnit<U64, Millimeters> U64Millimeters;
+
+// rare units
LL_DECLARE_BASE_UNIT(Hertz, "Hz");
LL_DECLARE_DERIVED_UNIT(Hertz, * 1000, Kilohertz, "KHz");
LL_DECLARE_DERIVED_UNIT(Kilohertz, * 1000, Megahertz, "MHz");
diff --git a/indra/llcommon/tests/llunits_test.cpp b/indra/llcommon/tests/llunits_test.cpp
index b0309585aa..8546bcbc54 100644
--- a/indra/llcommon/tests/llunits_test.cpp
+++ b/indra/llcommon/tests/llunits_test.cpp
@@ -112,7 +112,7 @@ namespace tut
void units_object_t::test<4>()
{
// exercise math operations
- LLUnit<F32, Quatloos> quatloos = 1.f;
+ LLUnit<F32, Quatloos> quatloos(1.f);
quatloos *= 4.f;
ensure(quatloos == 4);
quatloos = quatloos * 2;