mirror of https://github.com/icsharpcode/ILSpy.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
187 lines
4.8 KiB
187 lines
4.8 KiB
// Copyright (c) Tunnel Vision Laboratories, LLC. All Rights Reserved. |
|
// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. |
|
|
|
namespace LightJson |
|
{ |
|
using System; |
|
using System.Collections.Generic; |
|
using System.Diagnostics; |
|
using System.Diagnostics.CodeAnalysis; |
|
|
|
/// <summary> |
|
/// Represents an ordered collection of JsonValues. |
|
/// </summary> |
|
[DebuggerDisplay("Count = {Count}")] |
|
[DebuggerTypeProxy(typeof(JsonArrayDebugView))] |
|
internal sealed class JsonArray : IEnumerable<JsonValue> |
|
{ |
|
private IList<JsonValue> items; |
|
|
|
/// <summary> |
|
/// Initializes a new instance of the <see cref="JsonArray"/> class. |
|
/// </summary> |
|
public JsonArray() |
|
{ |
|
this.items = new List<JsonValue>(); |
|
} |
|
|
|
/// <summary> |
|
/// Initializes a new instance of the <see cref="JsonArray"/> class, adding the given values to the collection. |
|
/// </summary> |
|
/// <param name="values">The values to be added to this collection.</param> |
|
public JsonArray(params JsonValue[] values) |
|
: this() |
|
{ |
|
if (values == null) |
|
{ |
|
throw new ArgumentNullException(nameof(values)); |
|
} |
|
|
|
foreach (var value in values) |
|
{ |
|
this.items.Add(value); |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// Gets the number of values in this collection. |
|
/// </summary> |
|
/// <value>The number of values in this collection.</value> |
|
public int Count { |
|
get { |
|
return this.items.Count; |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// Gets or sets the value at the given index. |
|
/// </summary> |
|
/// <param name="index">The zero-based index of the value to get or set.</param> |
|
/// <remarks> |
|
/// The getter will return JsonValue.Null if the given index is out of range. |
|
/// </remarks> |
|
public JsonValue this[int index] { |
|
get { |
|
if (index >= 0 && index < this.items.Count) |
|
{ |
|
return this.items[index]; |
|
} |
|
else |
|
{ |
|
return JsonValue.Null; |
|
} |
|
} |
|
|
|
set { |
|
this.items[index] = value; |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// Adds the given value to this collection. |
|
/// </summary> |
|
/// <param name="value">The value to be added.</param> |
|
/// <returns>Returns this collection.</returns> |
|
public JsonArray Add(JsonValue value) |
|
{ |
|
this.items.Add(value); |
|
return this; |
|
} |
|
|
|
/// <summary> |
|
/// Inserts the given value at the given index in this collection. |
|
/// </summary> |
|
/// <param name="index">The index where the given value will be inserted.</param> |
|
/// <param name="value">The value to be inserted into this collection.</param> |
|
/// <returns>Returns this collection.</returns> |
|
public JsonArray Insert(int index, JsonValue value) |
|
{ |
|
this.items.Insert(index, value); |
|
return this; |
|
} |
|
|
|
/// <summary> |
|
/// Removes the value at the given index. |
|
/// </summary> |
|
/// <param name="index">The index of the value to be removed.</param> |
|
/// <returns>Return this collection.</returns> |
|
public JsonArray Remove(int index) |
|
{ |
|
this.items.RemoveAt(index); |
|
return this; |
|
} |
|
|
|
/// <summary> |
|
/// Clears the contents of this collection. |
|
/// </summary> |
|
/// <returns>Returns this collection.</returns> |
|
public JsonArray Clear() |
|
{ |
|
this.items.Clear(); |
|
return this; |
|
} |
|
|
|
/// <summary> |
|
/// Determines whether the given item is in the JsonArray. |
|
/// </summary> |
|
/// <param name="item">The item to locate in the JsonArray.</param> |
|
/// <returns>Returns true if the item is found; otherwise, false.</returns> |
|
public bool Contains(JsonValue item) |
|
{ |
|
return this.items.Contains(item); |
|
} |
|
|
|
/// <summary> |
|
/// Determines the index of the given item in this JsonArray. |
|
/// </summary> |
|
/// <param name="item">The item to locate in this JsonArray.</param> |
|
/// <returns>The index of the item, if found. Otherwise, returns -1.</returns> |
|
public int IndexOf(JsonValue item) |
|
{ |
|
return this.items.IndexOf(item); |
|
} |
|
|
|
/// <summary> |
|
/// Returns an enumerator that iterates through the collection. |
|
/// </summary> |
|
/// <returns>The enumerator that iterates through the collection.</returns> |
|
public IEnumerator<JsonValue> GetEnumerator() |
|
{ |
|
return this.items.GetEnumerator(); |
|
} |
|
|
|
/// <summary> |
|
/// Returns an enumerator that iterates through the collection. |
|
/// </summary> |
|
/// <returns>The enumerator that iterates through the collection.</returns> |
|
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() |
|
{ |
|
return this.GetEnumerator(); |
|
} |
|
|
|
[ExcludeFromCodeCoverage] |
|
private class JsonArrayDebugView |
|
{ |
|
private JsonArray jsonArray; |
|
|
|
public JsonArrayDebugView(JsonArray jsonArray) |
|
{ |
|
this.jsonArray = jsonArray; |
|
} |
|
|
|
[DebuggerBrowsable(DebuggerBrowsableState.RootHidden)] |
|
public JsonValue[] Items { |
|
get { |
|
var items = new JsonValue[this.jsonArray.Count]; |
|
|
|
for (int i = 0; i < this.jsonArray.Count; i += 1) |
|
{ |
|
items[i] = this.jsonArray[i]; |
|
} |
|
|
|
return items; |
|
} |
|
} |
|
} |
|
} |
|
}
|
|
|