//---------------------------------------------------------------------
//
// Copyright (C) 2004 Yingle Jia
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies.
// This software is provided "as is" without express or implied warranty,
// and with no claim as to its suitability for any purpose.
//
#include "stdafx.h"
namespace Acf {
//---------------------------------------------------------------------
// struct Single
//
// Static Fields
const float Single::DefValue = 0;
const float Single::MaxValue = FLT_MAX;
const float Single::MinValue = FLT_MIN;
const float Single::Epsilon = FLT_EPSILON;
// Static Methods
/*static*/ float Single::Parse(String* s, NumberStyles style)
{
if (s == null)
throw ArgumentNullException();
const wchar_t* format = L"%f";
float value = 0;
int ret = swscanf(s->GetCString(), format, &value);
if (ret == 0 || ret == EOF)
throw FormatException();
return value;
}
/*static*/ StringPtr Single::ToString(float value, String* format,
IFormatProvider* provider)
{
wchar_t fmt[10];
if (format == null || format->Length == 0)
{
wcscpy(fmt, L"%g");
}
else
{
fmt[0] = L'%';
wcscpy(fmt + 1, format->GetCString());
}
wchar_t buf[_MAX_EXP_DIG + _MAX_SIG_DIG + 64];
swprintf(buf, fmt, (double)value);
return new String(buf);
}
/*static*/ StringPtr Single::ToString(float value, const wchar_t* format,
IFormatProvider* provider)
{
StringPtr format2 = new String(format);
return ToString(value, format2, provider);
}
// Methods
StringPtr Single::ToString(String* format, IFormatProvider* provider)
{
return ToString(this->Value, format, provider);
}
StringPtr Single::ToString(const wchar_t* format, IFormatProvider* provider)
{
return ToString(this->Value, format, provider);
}
//---------------------------------------------------------------------
// class SingleObject
/*override*/ bool SingleObject::Equals(Object* obj)
{
SingleObject* o = dynamic_cast<SingleObject*>(obj);
if (o == null)
return false;
else
return (this->Value == o->Value);
}
/*override*/ int SingleObject::GetHashCode()
{
return (int) this->Value;
}
/*override*/ StringPtr SingleObject::ToString()
{
return this->Value.ToString();
}
/*virtual*/ StringPtr SingleObject::ToString(String* format, IFormatProvider* provider)
{
return this->Value.ToString(format, provider);
}
} // namespace Acf