blob: 0e7c2aa15572197340b7e0205c94cf35b0007518 [file] [log] [blame]
using System;
using System.Globalization;
namespace Lucene.Net.Documents
{
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
public partial class Field
{
// LUCENENET NOTE: The following classes were duplicated from Apache Harmony
// because nullable types in .NET are not reference types, therefore storing
// them in a field type object will require boxing/unboxing.
#if FEATURE_SERIALIZABLE
[Serializable]
#endif
protected abstract class Number : IFormattable
{
/// <summary>
/// Returns this object's value as a <see cref="byte"/>. Might involve rounding and/or
/// truncating the value, so it fits into a <see cref="byte"/>.
/// </summary>
/// <returns>the primitive <see cref="byte"/> value of this object.</returns>
public virtual byte GetByteValue()
{
return (byte)GetInt32Value();
}
/// <summary>
/// Returns this object's value as a <see cref="double"/>. Might involve rounding.
/// </summary>
/// <returns>the primitive <see cref="double"/> value of this object.</returns>
public abstract double GetDoubleValue();
/// <summary>
/// Returns this object's value as a <see cref="float"/>. Might involve rounding.
/// </summary>
/// <returns>the primitive <see cref="float"/> value of this object.</returns>
public abstract float GetSingleValue();
/// <summary>
/// Returns this object's value as an <see cref="int"/>. Might involve rounding and/or
/// truncating the value, so it fits into an <see cref="int"/>.
/// </summary>
/// <returns>the primitive <see cref="int"/> value of this object.</returns>
public abstract int GetInt32Value();
/// <summary>
/// Returns this object's value as a <see cref="long"/>. Might involve rounding and/or
/// truncating the value, so it fits into a <see cref="long"/>.
/// </summary>
/// <returns>the primitive <see cref="long"/> value of this object.</returns>
public abstract long GetInt64Value();
/// <summary>
/// Returns this object's value as a <see cref="short"/>. Might involve rounding and/or
/// truncating the value, so it fits into a <see cref="short"/>.
/// </summary>
/// <returns>the primitive <see cref="short"/> value of this object.</returns>
public virtual short GetInt16Value()
{
return (short)GetInt32Value();
}
public override string ToString()
{
return ToString(null, J2N.Text.StringFormatter.CurrentCulture);
}
public virtual string ToString(string format)
{
return ToString(format, J2N.Text.StringFormatter.CurrentCulture);
}
public virtual string ToString(IFormatProvider provider)
{
return ToString(null, provider);
}
public abstract string ToString(string format, IFormatProvider provider);
internal string ToString(string format, IFormatProvider provider, IFormattable value)
{
// Fast path: For standard .NET formatting using cultures, call IFormattable.ToString() to eliminate
// boxing associated with string.Format().
if (provider is null || provider is CultureInfo || provider is NumberFormatInfo)
{
return value.ToString(format, provider);
}
// Built-in .NET numeric types don't support custom format providers, so we resort
// to using string.Format with some hacky format conversion in order to support them.
return string.Format(provider, format is null ? "{0}" : "{0:" + format + '}', value);
}
}
#if FEATURE_SERIALIZABLE
[Serializable]
#endif
protected sealed class Byte : Number
{
/// <summary>
/// The value which the receiver represents.
/// </summary>
private readonly byte value;
public Byte(byte value)
{
this.value = value;
}
public override double GetDoubleValue()
{
return value;
}
public override float GetSingleValue()
{
return value;
}
public override int GetInt32Value()
{
return value;
}
public override long GetInt64Value()
{
return value;
}
public override string ToString(string format, IFormatProvider provider)
{
return ToString(format, provider, value);
}
}
#if FEATURE_SERIALIZABLE
[Serializable]
#endif
protected sealed class Int16 : Number
{
/// <summary>
/// The value which the receiver represents.
/// </summary>
private readonly short value;
public Int16(short value)
{
this.value = value;
}
public override double GetDoubleValue()
{
return value;
}
public override float GetSingleValue()
{
return value;
}
public override int GetInt32Value()
{
return value;
}
public override long GetInt64Value()
{
return value;
}
public override short GetInt16Value()
{
return value;
}
public override string ToString(string format, IFormatProvider provider)
{
return ToString(format, provider, value);
}
}
#if FEATURE_SERIALIZABLE
[Serializable]
#endif
protected sealed class Int32 : Number
{
/// <summary>
/// The value which the receiver represents.
/// </summary>
private readonly int value;
public Int32(int value)
{
this.value = value;
}
public override double GetDoubleValue()
{
return value;
}
public override float GetSingleValue()
{
return value;
}
public override int GetInt32Value()
{
return value;
}
public override long GetInt64Value()
{
return value;
}
public override string ToString(string format, IFormatProvider provider)
{
return ToString(format, provider, value);
}
}
#if FEATURE_SERIALIZABLE
[Serializable]
#endif
protected sealed class Int64 : Number
{
/// <summary>
/// The value which the receiver represents.
/// </summary>
private readonly long value;
public Int64(long value)
{
this.value = value;
}
public override double GetDoubleValue()
{
return value;
}
public override float GetSingleValue()
{
return value;
}
public override int GetInt32Value()
{
return (int)value;
}
public override long GetInt64Value()
{
return value;
}
public override string ToString(string format, IFormatProvider provider)
{
return ToString(format, provider, value);
}
}
#if FEATURE_SERIALIZABLE
[Serializable]
#endif
protected sealed class Double : Number
{
/// <summary>
/// The value which the receiver represents.
/// </summary>
private readonly double value;
public Double(double value)
{
this.value = value;
}
public override double GetDoubleValue()
{
return value;
}
public override float GetSingleValue()
{
return (float)value;
}
public override int GetInt32Value()
{
return (int)value;
}
public override long GetInt64Value()
{
return (long)value;
}
public override string ToString(string format, IFormatProvider provider)
{
return ToString(format, provider, value);
}
}
#if FEATURE_SERIALIZABLE
[Serializable]
#endif
protected sealed class Single : Number
{
/// <summary>
/// The value which the receiver represents.
/// </summary>
private readonly float value;
public Single(float value)
{
this.value = value;
}
public override double GetDoubleValue()
{
return value;
}
public override float GetSingleValue()
{
return value;
}
public override int GetInt32Value()
{
return (int)value;
}
public override long GetInt64Value()
{
return (long)value;
}
public override string ToString(string format, IFormatProvider provider)
{
return ToString(format, provider, value);
}
}
}
}