using System; using System.Collections; using System.Collections.Generic; using LeanCloud.Storage.Internal.Codec; namespace LeanCloud.Storage.Internal.Operation { internal class LCAddOperation : ILCOperation { internal List valueList; internal LCAddOperation(IEnumerable values) { valueList = new List(values); } ILCOperation ILCOperation.MergeWithPrevious(ILCOperation previousOp) { if (previousOp is LCSetOperation || previousOp is LCDeleteOperation) { return previousOp; } if (previousOp is LCAddOperation addOp) { valueList.AddRange(addOp.valueList); return this; } if (previousOp is LCAddUniqueOperation addUniqueOp) { valueList.AddRange(addUniqueOp.values); return this; } throw new ArgumentException("Operation is invalid after previous operation."); } object ILCOperation.Encode() { return new Dictionary { { "__op", "Add" }, { "objects", LCEncoder.Encode(valueList) } }; } object ILCOperation.Apply(object oldValue, string key) { List list = new List(); if (oldValue != null) { list.AddRange(oldValue as IEnumerable); } list.AddRange(valueList); return list; } IEnumerable ILCOperation.GetNewObjectList() { return valueList; } } }