private static void BuildQuery(NameValueCollection nv, PipeValue obj, string prefix) { if (prefix != null && obj.IsArray) { PipeValuePropertyEnumerator enumerator = obj.GetEnumerator(); while (enumerator.MoveNext()) { if (Regex.IsMatch(prefix, @"\[\]$")) { nv.Add(prefix, enumerator.CurrentValue.ToString()); } else { BuildQuery(nv, enumerator.CurrentValue, prefix + "[" + (enumerator.CurrentValue.Type == PipeValueType.Object && (bool)enumerator.CurrentValue ? enumerator.CurrentKey : "") + "]"); } } } else if (obj.Type == PipeValueType.Object) { PipeValuePropertyEnumerator enumerator = obj.GetEnumerator(); while (enumerator.MoveNext()) { BuildQuery(nv, enumerator.CurrentValue, prefix != null ? prefix + "[" + enumerator.CurrentKey + "]" : enumerator.CurrentKey); } } else { nv.Add(prefix, obj.ToString()); } }
public static PipeValue SortBy(PipeContext context) { List <PipeValue> array = new List <PipeValue>(); PipeLambda fn = context.TakeFunction() ?? context.TakeArgumentAsKeyFunction(); PipeValuePropertyEnumerator enumerator = context.Value.GetEnumerator(); while (enumerator.MoveNext()) { array.Add(new PipeValue(new object[] { fn.Invoke(enumerator), enumerator.CurrentKey })); } array.Sort(PipeValueObjectComparer.Default); PipeValueObjectBuilder collection = new PipeValueObjectBuilder(context.Value.IsArray); foreach (PipeValue value in array) { string key = (string)value["1"]; collection.Add(context.Value[key], key); } return(collection); }
public static PipeValue Sum(PipeContext context) { PipeValue result = PipeValue.Undefined; PipeLambda fn = context.TakeFunction(); if (fn == null) { result = context.TakeArgument(); fn = context.TakeFunction(); } if (fn == null) { if (context.HasArgument()) { fn = context.TakeArgumentAsKeyFunction(); } else { fn = new PipeLambda((obj, i) => obj); } } PipeValuePropertyEnumerator enumerator = context.Value.GetEnumerator(); while (enumerator.MoveNext()) { if (result != PipeValue.Undefined) { result = result + fn.Invoke(enumerator); } else { result = fn.Invoke(enumerator); } } return(result); }
private void WriteJson(JsonWriter writer, PipeValue value, JsonSerializer serializer) { switch (value.Type) { case PipeValueType.Undefined: break; case PipeValueType.String: writer.WriteValue((string)value.Value); break; case PipeValueType.Number: switch (Type.GetTypeCode(value.Value.GetType())) { case TypeCode.Byte: writer.WriteValue((byte)value.Value); break; case TypeCode.Char: writer.WriteValue((char)value.Value); break; case TypeCode.Decimal: writer.WriteValue((decimal)value.Value); break; case TypeCode.Double: writer.WriteValue((double)value.Value); break; case TypeCode.Int16: writer.WriteValue((short)value.Value); break; case TypeCode.Int32: writer.WriteValue((int)value.Value); break; case TypeCode.Int64: writer.WriteValue((long)value.Value); break; case TypeCode.SByte: writer.WriteValue((sbyte)value.Value); break; case TypeCode.Single: writer.WriteValue((float)value.Value); break; case TypeCode.UInt16: writer.WriteValue((ushort)value.Value); break; case TypeCode.UInt32: writer.WriteValue((uint)value.Value); break; case TypeCode.UInt64: writer.WriteValue((ulong)value.Value); break; } break; case PipeValueType.Boolean: writer.WriteValue((bool)value.Value); break; case PipeValueType.Object: if (!value.IsEvallable) { writer.WriteNull(); } else if (value.IsArray) { writer.WriteStartArray(); foreach (object item in (IEnumerable)value.Value) { WriteJson(writer, new PipeValue(item), serializer); } writer.WriteEndArray(); } else { writer.WriteStartObject(); PipeValuePropertyEnumerator enumerator = value.GetEnumerator(); while (enumerator.MoveNext()) { if (enumerator.CurrentValue != PipeValue.Undefined) { writer.WritePropertyName(enumerator.CurrentKey); WriteJson(writer, enumerator.CurrentValue, serializer); } } writer.WriteEndObject(); } break; } }