@ -0,0 +1,101 @@ | |||||
using System; | |||||
using System.Collections; | |||||
using System.Collections.Generic; | |||||
namespace IPA.Config.Data | |||||
{ | |||||
/// <summary> | |||||
/// A list of <see cref="Value"/>s for serialization by an <see cref="IConfigProvider"/>. | |||||
/// </summary> | |||||
public sealed class List : Value, IList<Value> | |||||
{ | |||||
private readonly List<Value> values = new List<Value>(); | |||||
/// <summary> | |||||
/// Gets the value at the given index in this <see cref="List"/>. | |||||
/// </summary> | |||||
/// <param name="index">the index to retrieve the <see cref="Value"/> at</param> | |||||
/// <returns>the <see cref="Value"/> at <paramref name="index"/></returns> | |||||
/// <seealso cref="IList{T}.this[int]"/> | |||||
public Value this[int index] { get => values[index]; set => values[index] = value; } | |||||
/// <summary> | |||||
/// Gets the number of elements in the <see cref="List"/>. | |||||
/// </summary> | |||||
/// <seealso cref="ICollection{T}.Count"/> | |||||
public int Count => values.Count; | |||||
bool ICollection<Value>.IsReadOnly => ((IList<Value>)values).IsReadOnly; | |||||
/// <summary> | |||||
/// Adds a <see cref="Value"/> to the end of this <see cref="List"/>. | |||||
/// </summary> | |||||
/// <param name="item">the <see cref="Value"/> to add</param> | |||||
/// <seealso cref="ICollection{T}.Add(T)"/> | |||||
public void Add(Value item) => values.Add(item); | |||||
/// <summary> | |||||
/// Clears the <see cref="List"/>. | |||||
/// </summary> | |||||
/// <seealso cref="ICollection{T}.Clear"/> | |||||
public void Clear() => values.Clear(); | |||||
/// <summary> | |||||
/// Checks if the <see cref="List"/> contains a certian item. | |||||
/// </summary> | |||||
/// <param name="item">the <see cref="Value"/> to check for</param> | |||||
/// <returns><see langword="true"/> if the item was founc, otherwise <see langword="false"/></returns> | |||||
/// <seealso cref="ICollection{T}.Contains(T)"/> | |||||
public bool Contains(Value item) => values.Contains(item); | |||||
/// <summary> | |||||
/// Copies the <see cref="Value"/>s in the <see cref="List"/> to the <see cref="Array"/> in <paramref name="array"/>. | |||||
/// </summary> | |||||
/// <param name="array">the <see cref="Array"/> to copy to</param> | |||||
/// <param name="arrayIndex">the starting index to copy to</param> | |||||
/// <seealso cref="ICollection{T}.CopyTo(T[], int)"/> | |||||
public void CopyTo(Value[] array, int arrayIndex) => values.CopyTo(array, arrayIndex); | |||||
/// <summary> | |||||
/// Gets an enumerator to enumerate the <see cref="List"/>. | |||||
/// </summary> | |||||
/// <returns>an <see cref="IEnumerator{T}"/> for this <see cref="List"/></returns> | |||||
/// <seealso cref="IEnumerable{T}.GetEnumerator"/> | |||||
public IEnumerator<Value> GetEnumerator() => ((IList<Value>)values).GetEnumerator(); | |||||
/// <summary> | |||||
/// Gets the index that a given <see cref="Value"/> is in the <see cref="List"/>. | |||||
/// </summary> | |||||
/// <param name="item">the <see cref="Value"/> to search for</param> | |||||
/// <returns>the index that the <paramref name="item"/> was at, or -1.</returns> | |||||
/// <seealso cref="IList{T}.IndexOf(T)"/> | |||||
public int IndexOf(Value item) => values.IndexOf(item); | |||||
/// <summary> | |||||
/// Inserts a <see cref="Value"/> at an index. | |||||
/// </summary> | |||||
/// <param name="index">the index to insert at</param> | |||||
/// <param name="item">the <see cref="Value"/> to insert</param> | |||||
/// <seealso cref="IList{T}.Insert(int, T)"/> | |||||
public void Insert(int index, Value item) => values.Insert(index, item); | |||||
/// <summary> | |||||
/// Removes a <see cref="Value"/> from the <see cref="List"/>. | |||||
/// </summary> | |||||
/// <param name="item">the <see cref="Value"/> to remove</param> | |||||
/// <returns><see langword="true"/> if the item was removed, <see langword="false"/> otherwise</returns> | |||||
/// <seealso cref="ICollection{T}.Remove(T)"/> | |||||
public bool Remove(Value item) => values.Remove(item); | |||||
/// <summary> | |||||
/// Removes a <see cref="Value"/> at an index. | |||||
/// </summary> | |||||
/// <param name="index">the index to remove a <see cref="Value"/> at</param> | |||||
/// <seealso cref="IList{T}.RemoveAt(int)"/> | |||||
public void RemoveAt(int index) => values.RemoveAt(index); | |||||
IEnumerator IEnumerable.GetEnumerator() => ((IList<Value>)values).GetEnumerator(); | |||||
} | |||||
} |
@ -0,0 +1,104 @@ | |||||
using System.Collections; | |||||
using System.Collections.Generic; | |||||
namespace IPA.Config.Data | |||||
{ | |||||
/// <summary> | |||||
/// A map of <see cref="string"/> to <see cref="Value"/> for serialization by an <see cref="IConfigProvider"/>. | |||||
/// </summary> | |||||
public sealed class Map : Value, IDictionary<string, Value> | |||||
{ | |||||
private readonly Dictionary<string, Value> values = new Dictionary<string, Value>(); | |||||
/// <summary> | |||||
/// Accesses the <see cref="Value"/> at <paramref name="key"/> in the map. | |||||
/// </summary> | |||||
/// <param name="key">the key to get the value associated with</param> | |||||
/// <returns>the value associated with the <paramref name="key"/></returns> | |||||
/// <seealso cref="IDictionary{TKey, TValue}.this[TKey]"/> | |||||
public Value this[string key] { get => values[key]; set => values[key] = value; } | |||||
/// <summary> | |||||
/// Gets a collection of the keys for the <see cref="Map"/>. | |||||
/// </summary> | |||||
/// <seealso cref="IDictionary{TKey, TValue}.Keys"/> | |||||
public ICollection<string> Keys => values.Keys; | |||||
/// <summary> | |||||
/// Gets a collection of the values in the <see cref="Map"/>. | |||||
/// </summary> | |||||
/// <seealso cref="IDictionary{TKey, TValue}.Values"/> | |||||
public ICollection<Value> Values => values.Values; | |||||
/// <summary> | |||||
/// Gets the number of key-value pairs in this <see cref="Map"/>. | |||||
/// </summary> | |||||
/// <seealso cref="ICollection{T}.Count"/> | |||||
public int Count => values.Count; | |||||
bool ICollection<KeyValuePair<string, Value>>.IsReadOnly => ((IDictionary<string, Value>)values).IsReadOnly; | |||||
/// <summary> | |||||
/// Adds a new <see cref="Value"/> with a given key. | |||||
/// </summary> | |||||
/// <param name="key">the key to put the value at</param> | |||||
/// <param name="value">the <see cref="Value"/> to add</param> | |||||
/// <seealso cref="IDictionary{TKey, TValue}.Add(TKey, TValue)"/> | |||||
public void Add(string key, Value value) => values.Add(key, value); | |||||
void ICollection<KeyValuePair<string, Value>>.Add(KeyValuePair<string, Value> item) | |||||
=> ((IDictionary<string, Value>)values).Add(item); | |||||
/// <summary> | |||||
/// Clears the <see cref="Map"/> of its key-value pairs. | |||||
/// </summary> | |||||
/// <seealso cref="ICollection{T}.Clear"/> | |||||
public void Clear() => values.Clear(); | |||||
bool ICollection<KeyValuePair<string, Value>>.Contains(KeyValuePair<string, Value> item) | |||||
=> ((IDictionary<string, Value>)values).Contains(item); | |||||
/// <summary> | |||||
/// Checks if the <see cref="Map"/> contains a given <paramref name="key"/>. | |||||
/// </summary> | |||||
/// <param name="key">the key to check for</param> | |||||
/// <returns><see langword="true"/> if the key exists, otherwise <see langword="false"/></returns> | |||||
/// <seealso cref="IDictionary{TKey, TValue}.ContainsKey(TKey)"/> | |||||
public bool ContainsKey(string key) => values.ContainsKey(key); | |||||
void ICollection<KeyValuePair<string, Value>>.CopyTo(KeyValuePair<string, Value>[] array, int arrayIndex) | |||||
=> ((IDictionary<string, Value>)values).CopyTo(array, arrayIndex); | |||||
/// <summary> | |||||
/// Enumerates the <see cref="Map"/>'s key-value pairs. | |||||
/// </summary> | |||||
/// <returns>an <see cref="IEnumerator{T}"/> of key-value pairs in this <see cref="Map"/></returns> | |||||
/// <seealso cref="IEnumerable{T}.GetEnumerator()"/> | |||||
public IEnumerator<KeyValuePair<string, Value>> GetEnumerator() => values.GetEnumerator(); | |||||
/// <summary> | |||||
/// Removes the object associated with a key in this <see cref="Map"/>. | |||||
/// </summary> | |||||
/// <param name="key">the key to remove</param> | |||||
/// <returns><see langword="true"/> if the key existed, <see langword="false"/> otherwise</returns> | |||||
/// <seealso cref="IDictionary{TKey, TValue}.Remove(TKey)"/> | |||||
public bool Remove(string key) => values.Remove(key); | |||||
bool ICollection<KeyValuePair<string, Value>>.Remove(KeyValuePair<string, Value> item) | |||||
=> ((IDictionary<string, Value>)values).Remove(item); | |||||
/// <summary> | |||||
/// Gets the value associated with the specified key. | |||||
/// </summary> | |||||
/// <param name="key">the key of the value to get</param> | |||||
/// <param name="value">the target location of the retrieved object</param> | |||||
/// <returns><see langword="true"/> if the key was found and <paramref name="value"/> set, <see langword="false"/> otherwise</returns> | |||||
/// <seealso cref="IDictionary{TKey, TValue}.TryGetValue(TKey, out TValue)"/> | |||||
public bool TryGetValue(string key, out Value value) => values.TryGetValue(key, out value); | |||||
IEnumerator IEnumerable.GetEnumerator() => ((IDictionary<string, Value>)values).GetEnumerator(); | |||||
} | |||||
} |
@ -0,0 +1,55 @@ | |||||
using System; | |||||
using System.Collections; | |||||
using System.Linq; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
namespace IPA.Config.Data | |||||
{ | |||||
/// <summary> | |||||
/// A base value type for config data abstract representations, to be serialized with an | |||||
/// <see cref="IConfigProvider"/>. | |||||
/// </summary> | |||||
public abstract class Value | |||||
{ | |||||
} | |||||
// not String to prevent overlap with System.String | |||||
/// <summary> | |||||
/// A <see cref="Value"/> representing a piece of text. The only reason this is not named | |||||
/// String is so that it doesn't conflict with <see cref="string"/>. | |||||
/// </summary> | |||||
public sealed class Text : Value | |||||
{ | |||||
} | |||||
/// <summary> | |||||
/// A <see cref="Value"/> representing an integer. This may hold a <see cref="long"/>'s | |||||
/// worth of data. | |||||
/// </summary> | |||||
public sealed class Integer : Value | |||||
{ | |||||
} | |||||
/// <summary> | |||||
/// A <see cref="Value"/> representing a floating point value. This may hold a | |||||
/// <see cref="double"/>'s worth of data. | |||||
/// </summary> | |||||
public sealed class FloatingPoint : Value | |||||
{ | |||||
} | |||||
/// <summary> | |||||
/// A <see cref="Value"/> representing a boolean value. | |||||
/// </summary> | |||||
public sealed class Boolean : Value | |||||
{ | |||||
} | |||||
} |