NBTExplorer/SubstrateCS/Source/Nbt/SchemaNodeString.cs
2011-10-08 00:01:51 -04:00

116 lines
4.8 KiB
C#

using System;
namespace Substrate.Nbt
{
/// <summary>
/// A concrete <see cref="SchemaNode"/> representing a <see cref="TagNodeString"/>.
/// </summary>
public sealed class SchemaNodeString : SchemaNode
{
private string _value = "";
private int _length;
/// <summary>
/// Gets the maximum length of a valid string.
/// </summary>
public int Length
{
get { return _length; }
}
/// <summary>
/// Gets the expected value of a valid string.
/// </summary>
/// <remarks>A <see cref="TagNodeString"/> must be set to this value to be considered valid.</remarks>
public string Value
{
get { return _value; }
}
/// <summary>
/// Indicates whether there is a maximum-length constraint on strings in this node.
/// </summary>
public bool HasMaxLength
{
get { return _length > 0; }
}
/// <summary>
/// Constructs a new <see cref="SchemaNodeString"/> representing a <see cref="TagNodeString"/> named <paramref name="name"/>.
/// </summary>
/// <param name="name">The name of the corresponding <see cref="TagNodeString"/>.</param>
public SchemaNodeString (string name)
: base(name)
{
}
/// <summary>
/// Constructs a new <see cref="SchemaNodeString"/> with additional options.
/// </summary>
/// <param name="name">The name of the corresponding <see cref="TagNodeString"/>.</param>
/// <param name="options">One or more option flags modifying the processing of this node.</param>
public SchemaNodeString (string name, SchemaOptions options)
: base(name, options)
{
}
/// <summary>
/// Constructs a new <see cref="SchemaNodeString"/> representing a <see cref="TagNodeString"/> named <paramref name="name"/> set to <paramref name="value"/>.
/// </summary>
/// <param name="name">The name of the corresponding <see cref="TagNodeString"/>.</param>
/// <param name="value">The value that the corresponding <see cref="TagNodeString"/> must be set to.</param>
public SchemaNodeString (string name, string value)
: base(name)
{
_value = value;
}
/// <summary>
/// Constructs a new <see cref="SchemaNodeString"/> with additional options.
/// </summary>
/// <param name="name">The name of the corresponding <see cref="TagNodeString"/>.</param>
/// <param name="value">The value that the corresponding <see cref="TagNodeString"/> must be set to.</param>
/// <param name="options">One or more option flags modifying the processing of this node.</param>
public SchemaNodeString (string name, string value, SchemaOptions options)
: base(name, options)
{
_value = value;
}
/// <summary>
/// Constructs a new <see cref="SchemaNodeString"/> representing a <see cref="TagNodeString"/> named <paramref name="name"/> with maximum length <paramref name="length"/>.
/// </summary>
/// <param name="name">The name of the corresponding <see cref="TagNodeString"/>.</param>
/// <param name="length">The maximum length of strings in the corresponding <see cref="TagNodeString"/>.</param>
public SchemaNodeString (string name, int length)
: base(name)
{
_length = length;
}
/// <summary>
/// Constructs a new <see cref="SchemaNodeString"/> with additional options.
/// </summary>
/// <param name="name">The name of the corresponding <see cref="TagNodeString"/>.</param>
/// <param name="length">The maximum length of strings in the corresponding <see cref="TagNodeString"/>.</param>
/// <param name="options">One or more option flags modifying the processing of this node.</param>
public SchemaNodeString (string name, int length, SchemaOptions options)
: base(name, options)
{
_length = length;
}
/// <summary>
/// Constructs a default <see cref="TagNodeString"/> satisfying the constraints of this node.
/// </summary>
/// <returns>A <see cref="TagNodeString"/> with a sensible default value. If this node represents a particular string, the <see cref="TagNodeString"/> constructed will be set to that string.</returns>
public override TagNode BuildDefaultTree ()
{
if (_value.Length > 0) {
return new TagNodeString(_value);
}
return new TagNodeString();
}
}
}