private JArray ArrayUnpatch(JArray right, JObject patch) { var toRemove = new List<JProperty>(); var toInsert = new List<JProperty>(); var toModify = new List<JProperty>(); foreach (JProperty op in patch.Properties()) { if (op.Name == "_t") continue; var value = op.Value as JArray; if (op.Name.StartsWith("_")) { // removed item from original array if (value != null && value.Count == 3 && (value[2].ToObject<int>() == (int)DiffOperation.Deleted || value[2].ToObject<int>() == (int)DiffOperation.ArrayMove)) { var newOp = new JProperty(value[1].ToObject<int>().ToString(), op.Value); if (value[2].ToObject<int>() == (int)DiffOperation.ArrayMove) { toInsert.Add(new JProperty(op.Name.Substring(1), new JArray(right[value[1].ToObject<int>()].DeepClone()))); toRemove.Add(newOp); } else { toInsert.Add(new JProperty(op.Name.Substring(1), new JArray(value[0]))); } } else { throw new Exception($"Only removal or move can be applied at original array indices. Context: {value}"); } } else { if (value != null && value.Count == 1) { toRemove.Add(op); } else { toModify.Add(op); } } } // remove items, in reverse order to avoid sawing our own floor toRemove.Sort((x, y) => int.Parse(x.Name).CompareTo(int.Parse(y.Name))); for (int i = toRemove.Count - 1; i >= 0; --i) { JProperty op = toRemove[i]; right.RemoveAt(int.Parse(op.Name)); } // insert items, in reverse order to avoid moving our own floor toInsert.Sort((x, y) => int.Parse(x.Name).CompareTo(int.Parse(y.Name))); foreach (var op in toInsert) { right.Insert(int.Parse(op.Name), ((JArray)op.Value)[0]); } foreach (var op in toModify) { JToken p = Unpatch(right[int.Parse(op.Name)], op.Value); right[int.Parse(op.Name)] = p; } return right; }
static int Insert(IntPtr L) { try { ToLua.CheckArgsCount(L, 3); Newtonsoft.Json.Linq.JArray obj = (Newtonsoft.Json.Linq.JArray)ToLua.CheckObject <Newtonsoft.Json.Linq.JArray>(L, 1); int arg0 = (int)LuaDLL.luaL_checknumber(L, 2); Newtonsoft.Json.Linq.JToken arg1 = (Newtonsoft.Json.Linq.JToken)ToLua.CheckObject <Newtonsoft.Json.Linq.JToken>(L, 3); obj.Insert(arg0, arg1); return(0); } catch (Exception e) { return(LuaDLL.toluaL_exception(L, e)); } }
public void InsertAddEnd() { JArray array = new JArray(); array.Insert(0, 123); array.Insert(1, 456); Assert.AreEqual(2, array.Count); Assert.AreEqual(123, (int) array[0]); Assert.AreEqual(456, (int) array[1]); }
public void InsertOutOfRangeIndexShouldThrow() { JArray j = new JArray(); ExceptionAssert.Throws<ArgumentOutOfRangeException>( @"Index must be within the bounds of the List. Parameter name: index", () => { j.Insert(2, new JValue(1)); }); }
public void InsertNegativeIndexShouldThrow() { JArray j = new JArray(); ExceptionAssert.Throws<ArgumentOutOfRangeException>( @"Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index", () => { j.Insert(-1, new JValue(1)); }); }
public void InsertNull() { JArray j = new JArray(); j.Insert(0, null); Assert.AreEqual(null, ((JValue) j[0]).Value); }
public void InsertShouldInsertAtZeroIndex() { JValue v1 = new JValue(1); JValue v2 = new JValue(2); JArray j = new JArray(); j.Insert(0, v1); Assert.AreEqual(0, j.IndexOf(v1)); j.Insert(0, v2); Assert.AreEqual(1, j.IndexOf(v1)); Assert.AreEqual(0, j.IndexOf(v2)); }
public void Insert() { JValue v1 = new JValue(1); JValue v2 = new JValue(2); JValue v3 = new JValue(3); JValue v4 = new JValue(4); JArray j = new JArray(); j.Add(v1); j.Add(v2); j.Add(v3); j.Insert(1, v4); Assert.AreEqual(0, j.IndexOf(v1)); Assert.AreEqual(1, j.IndexOf(v4)); Assert.AreEqual(2, j.IndexOf(v2)); Assert.AreEqual(3, j.IndexOf(v3)); }
public void InsertOutOfRangeIndexShouldThrow() { JArray j = new JArray(); j.Insert(2, new JValue(1)); }
public void InsertNegativeIndexShouldThrow() { JArray j = new JArray(); j.Insert(-1, new JValue(1)); }