Exemple #1
0
 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());
     }
 }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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;
            }
        }