// // Copyright 2002 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. //
// Returns the fractional part of the given floating-point number. inlinefloat fractionalPart(float f)
{ float intPart = 0.0f; return modff(f, &intPart);
}
class ImmutableString;
// // Encapsulate info logs for all objects that have them. // // The methods are a general set of tools for getting a variety of // messages and types inserted into the log. // class TInfoSinkBase
{ public:
TInfoSinkBase() {}
template <typename T>
TInfoSinkBase &operator<<(const T &t)
{
TPersistStringStream stream = sh::InitializeStream<TPersistStringStream>();
stream << t;
sink.append(stream.str()); return *this;
} // Override << operator for specific types. It is faster to append strings // and characters directly to the sink.
TInfoSinkBase &operator<<(char c)
{
sink.append(1, c); return *this;
}
TInfoSinkBase &operator<<(constchar *str)
{
sink.append(str); return *this;
}
TInfoSinkBase &operator<<(const TPersistString &str)
{
sink.append(str); return *this;
}
TInfoSinkBase &operator<<(const TString &str)
{
sink.append(str.c_str()); return *this;
}
TInfoSinkBase &operator<<(const ImmutableString &str);
TInfoSinkBase &operator<<(const TType &type);
// Make sure floats are written with correct precision.
TInfoSinkBase &operator<<(float f)
{ // Make sure that at least one decimal point is written. If a number // does not have a fractional part, the default precision format does // not write the decimal portion which gets interpreted as integer by // the compiler.
TPersistStringStream stream = sh::InitializeStream<TPersistStringStream>(); if (fractionalPart(f) == 0.0f)
{
stream.precision(1);
stream << std::showpoint << std::fixed << f;
} else
{
stream.unsetf(std::ios::fixed);
stream.unsetf(std::ios::scientific);
stream.precision(8);
stream << f;
}
sink.append(stream.str()); return *this;
} // Write boolean values as their names instead of integral value.
TInfoSinkBase &operator<<(bool b)
{ constchar *str = b ? "true" : "false";
sink.append(str); return *this;
}
private: // The data in the info sink is either in human readable form (|sink|) or binary (|binarySink|).
TPersistString sink;
BinaryBlob binarySink;
};
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.