public bool ApplyBehaviour(List <ASTNode> nodes, int opIndex, OrderMethod caller)
 {
     if (nodes[opIndex] is IndexerNode ix)
     {
         if (ix.Nodes.Count == 0 && nodes[opIndex - 1].Is <IdentifierNode>().Or <ITypeIdentifier>(out bool isType))
         {
             ITypeIdentifier         arrayedType = isType ? nodes[opIndex - 1] as ITypeIdentifier : new TypeIdentifierNode(nodes[opIndex - 1] as IdentifierNode);
             TypeArrayIdentifierNode lookup      = new TypeArrayIdentifierNode(arrayedType, nodes[opIndex - 1].Pos);
             nodes[opIndex - 1] = lookup;
             nodes.RemoveAt(opIndex);
         }
         else
         {
             LookupNode lookup = new LookupNode(nodes[opIndex - 1] as IExpr, nodes[opIndex] as IndexerNode, nodes[opIndex - 1].Pos);
             caller.Invoke(lookup.Index.Nodes); // Invoke on sub-elements
             nodes[opIndex - 1] = lookup;
             nodes.RemoveAt(opIndex);
         }
         return(true);
     }
     else
     {
         return(false);
     }
 }
예제 #2
0
        public LiteQuery OrderBy(string tableAlias, string fieldName, OrderMethod orderMethod = OrderMethod.ASC)
        {
            LiteOrderField item = new LiteOrderField(tableAlias, fieldName, orderMethod);

            this.Orders.Add(item);
            return(this);
        }
예제 #3
0
 public BucketSort(OrderMethod order, OrderByProperty orderBy, bool multi = false)
 {
     if (order == OrderMethod.Descending)
     {
         _ordering   = more;
         _multiOrder = multiMore;
     }
     else
     {
         _ordering   = less;
         _multiOrder = multiLess;
     }
     _orderMethod = order;
     // Always use Size as the first property to order when multiple properties are enabled
     // It defines the initialization of the buckets
     if (multi)
     {
         _orderBy = OrderByProperty.Size;
     }
     else
     {
         _orderBy = orderBy;
     }
     _enableMulti = multi;
 }
예제 #4
0
 public static void ApplyOrderOfOperationsBinary(T binOpNode, OrderMethod orderEnforcer)
 {
     if (binOpNode.Left is IGroupedASTNode leftGroup)
     {
         orderEnforcer(leftGroup.Nodes);
     }
     if (binOpNode.Right is IGroupedASTNode rightGroup)
     {
         orderEnforcer(rightGroup.Nodes);
     }
 }
예제 #5
0
        public virtual bool ApplyBehaviour(List <ASTNode> nodes, int opIndex, OrderMethod caller)
        {
            T op = Activator.CreateInstance(typeof(T), nodes[opIndex].Pos) as T;

            op.Update(LeftRight.LHS, nodes[opIndex - 1]);
            op.Update(LeftRight.RHS, nodes[opIndex + 1]);
            ApplyOrderOfOperationsBinary(op, caller);
            nodes[opIndex - 1] = op;
            nodes.RemoveAt(opIndex + 1);
            nodes.RemoveAt(opIndex);
            return(true);
        }
예제 #6
0
        public override bool ApplyBehaviour(List <ASTNode> nodes, int opIndex, OrderMethod caller)
        {
            string op = nodes[opIndex].Content;

            if (base.ApplyBehaviour(nodes, opIndex, caller))
            {
                (nodes[opIndex - 1] as BinOpNode).SetOperation(op);
                return(true);
            }
            else
            {
                return(false);
            }
        }
예제 #7
0
 public BubbleSort(OrderMethod order, OrderByProperty orderBy, bool multi = false)
 {
     if (order == OrderMethod.Descending)
     {
         _ordering   = less;
         _multiOrder = multiLess;
     }
     else
     {
         _ordering   = more;
         _multiOrder = multiMore;
     }
     _orderBy     = orderBy;
     _enableMulti = multi;
 }
예제 #8
0
 public bool ApplyBehaviour(List <ASTNode> nodes, int opIndex, OrderMethod caller)
 {
     if (nodes[opIndex - 1].Is <IdentifierNode>().Is <ThisNode>().Or <MemberAccessNode>() && nodes[opIndex + 1] is IdentifierNode accessId)
     {
         IExpr accessExpr = nodes[opIndex - 1] as IExpr;
         nodes[opIndex - 1] = new MemberAccessNode(accessExpr, accessId, this.m_symbol, nodes[opIndex].Pos);
         nodes.RemoveAt(opIndex + 1);
         nodes.RemoveAt(opIndex);
         return(true);
     }
     else
     {
         return(false);
     }
 }
예제 #9
0
 public bool ApplyBehaviour(List <ASTNode> nodes, int opIndex, OrderMethod caller)
 {
     this.m_advanceBy = 0;
     if (this.m_isPostOp)
     {
         nodes[opIndex - 1] = new UnaryOpNode(nodes[opIndex].Pos, nodes[opIndex - 1], this.m_symbol, true);
         nodes.RemoveAt(opIndex);
         this.m_advanceBy = 0;
     }
     else
     {
         nodes[opIndex] = new UnaryOpNode(nodes[opIndex].Pos, nodes[opIndex + 1], this.m_symbol, false);
         nodes.RemoveAt(opIndex + 1);
         this.m_advanceBy = 1;
     }
     return(true);
 }
예제 #10
0
 public QuickSort(OrderMethod order, OrderByProperty orderBy, bool multi = false)
 {
     if (order == OrderMethod.Descending)
     {
         _firstMulti  = moreMulti;
         _secondMulti = lessMulti;
         _firstOrder  = more;
         _secondOrder = less;
     }
     else
     {
         _firstMulti  = lessMulti;
         _secondMulti = moreMulti;
         _firstOrder  = less;
         _secondOrder = more;
     }
     _orderBy     = orderBy;
     _enableMulti = multi;
 }
예제 #11
0
 public bool ApplyBehaviour(List <ASTNode> nodes, int opIndex, OrderMethod caller)
 {
     if (this.m_isObj)
     {
         if (this.m_matchReqParenthesis)   // sizeof operator or something
         {
             throw new NotImplementedException();
         }
         else
         {
             nodes[opIndex] = new NewObjectNode((nodes[opIndex + 1] as IdentifierNode).ToTypeIdentifier(), nodes[opIndex + 2] as ExpressionNode, nodes[opIndex].Pos);
             nodes.RemoveRange(opIndex + 1, 2);
             return(true);
         }
     }
     else
     {
         var look = nodes[opIndex + 1] as LookupNode;
         nodes[opIndex] = new NewArrayNode(look.ToTypeIdentifier(), look.Index, nodes[opIndex].Pos);
         nodes.RemoveAt(opIndex + 1);
     }
     return(true);
 }
예제 #12
0
		unsafe void encode_residual(FlacFrame frame, int ch, PredictionType predict, OrderMethod omethod, int pass, int best_window)
		{
			int* smp = frame.subframes[ch].samples;
			int i, n = frame.blocksize;
			// save best.window, because we can overwrite it later with fixed frame

			// CONSTANT
			for (i = 1; i < n; i++)
			{
				if (smp[i] != smp[0]) break;
			}
			if (i == n)
			{
				frame.subframes[ch].best.type = SubframeType.Constant;
				frame.subframes[ch].best.residual[0] = smp[0];
				frame.subframes[ch].best.size = (uint)frame.subframes[ch].obits;
				return;
			}

			// VERBATIM
			frame.current.type = SubframeType.Verbatim;
			frame.current.size = (uint)(frame.subframes[ch].obits * frame.blocksize);
			frame.ChooseBestSubframe(ch);

			if (n < 5 || predict == PredictionType.None)
				return;

			// FIXED
			if (predict == PredictionType.Fixed ||
				(predict == PredictionType.Search && pass != 1) ||
				//predict == PredictionType.Search ||
				//(pass == 2 && frame.subframes[ch].best.type == SubframeType.Fixed) ||
				n <= eparams.max_prediction_order)
			{
				int max_fixed_order = Math.Min(eparams.max_fixed_order, 4);
				int min_fixed_order = Math.Min(eparams.min_fixed_order, max_fixed_order);

				for (i = min_fixed_order; i <= max_fixed_order; i++)
					encode_residual_fixed_sub(frame, i, ch);
			}

			// LPC
			if (n > eparams.max_prediction_order &&
			   (predict == PredictionType.Levinson ||
				predict == PredictionType.Search)
				//predict == PredictionType.Search ||
				//(pass == 2 && frame.subframes[ch].best.type == SubframeType.LPC))
				)
			{
				float* lpcs = stackalloc float[lpc.MAX_LPC_ORDER * lpc.MAX_LPC_ORDER];
				int min_order = eparams.min_prediction_order;
				int max_order = eparams.max_prediction_order;

				for (int iWindow = 0; iWindow < _windowcount; iWindow++)
				{
					if (best_window != -1 && iWindow != best_window)
						continue;

					LpcContext lpc_ctx = frame.subframes[ch].lpc_ctx[iWindow];

					lpc_ctx.GetReflection(max_order, smp, n, frame.window_buffer + iWindow * Flake.MAX_BLOCKSIZE * 2);
					lpc_ctx.ComputeLPC(lpcs);

					//int frameSize = n;
					//float* F = stackalloc float[frameSize];
					//float* B = stackalloc float[frameSize];
					//float* PE = stackalloc float[max_order + 1];
					//float* arp = stackalloc float[max_order];
					//float* rc = stackalloc float[max_order];

					//for (int j = 0; j < frameSize; j++)
					//    F[j] = B[j] = smp[j];

					//for (int K = 1; K <= max_order; K++)
					//{
					//    // BURG:
					//    float denominator = 0.0f;
					//    //float denominator = F[K - 1] * F[K - 1] + B[frameSize - K] * B[frameSize - K];
					//    for (int j = 0; j < frameSize - K; j++)
					//        denominator += F[j + K] * F[j + K] + B[j] * B[j];
					//    denominator /= 2;

					//    // Estimate error
					//    PE[K - 1] = denominator / (frameSize - K);

					//    float reflectionCoeff = 0.0f;
					//    for (int j = 0; j < frameSize - K; j++)
					//        reflectionCoeff += F[j + K] * B[j];
					//    reflectionCoeff /= denominator;
					//    rc[K - 1] = arp[K - 1] = reflectionCoeff;

					//    // Levinson-Durbin
					//    for (int j = 0; j < (K - 1) >> 1; j++)
					//    {
					//        float arptmp = arp[j];
					//        arp[j] -= reflectionCoeff * arp[K - 2 - j];
					//        arp[K - 2 - j] -= reflectionCoeff * arptmp;
					//    }
					//    if (((K - 1) & 1) != 0)
					//        arp[(K - 1) >> 1] -= reflectionCoeff * arp[(K - 1) >> 1];

					//    for (int j = 0; j < frameSize - K; j++)
					//    {
					//        float f = F[j + K];
					//        float b = B[j];
					//        F[j + K] = f - reflectionCoeff * b;
					//        B[j] = b - reflectionCoeff * f;
					//    }

					//    for (int j = 0; j < K; j++)
					//        lpcs[(K - 1) * lpc.MAX_LPC_ORDER + j] = (float)arp[j];
					//}

					switch (omethod)
					{
						case OrderMethod.Akaike:
							//lpc_ctx.SortOrdersAkaike(frame.blocksize, eparams.estimation_depth, max_order, 7.1, 0.0);
							lpc_ctx.SortOrdersAkaike(frame.blocksize, eparams.estimation_depth, max_order, 4.5, 0.0);
							break;
						default:
							throw new Exception("unknown order method");
					}

					for (i = 0; i < eparams.estimation_depth && i < max_order; i++)
						encode_residual_lpc_sub(frame, lpcs, iWindow, lpc_ctx.best_orders[i], ch);
				}
			}
		}
예제 #13
0
		public int flake_set_defaults(int lvl)
		{
			compression = lvl;

			if ((lvl < 0 || lvl > 12) && (lvl != 99))
			{
				return -1;
			}

			// default to level 5 params
			window_function = WindowFunction.Flattop | WindowFunction.Tukey;
			order_method = OrderMethod.Akaike;
			stereo_method = StereoMethod.Evaluate;
			window_method = WindowMethod.Evaluate;
			block_size = 0;
			block_time_ms = 105;			
			prediction_type = PredictionType.Search;
			min_prediction_order = 1;
			max_prediction_order = 12;
			estimation_depth = 1;
			min_fixed_order = 2;
			max_fixed_order = 2;
			min_partition_order = 0;
			max_partition_order = 8;
			variable_block_size = 0;
			lpc_min_precision_search = 1;
			lpc_max_precision_search = 1;
			do_seektable = true; 

			// differences from level 7
			switch (lvl)
			{
				case 0:
					block_time_ms = 53;
					prediction_type = PredictionType.Fixed;
					stereo_method = StereoMethod.Independent;
					max_partition_order = 6;
					break;
				case 1:
					prediction_type = PredictionType.Levinson;
					stereo_method = StereoMethod.Independent;
					window_function = WindowFunction.Bartlett;
					max_prediction_order = 8;
					max_partition_order = 6;
					break;
				case 2:
					stereo_method = StereoMethod.Independent;
					window_function = WindowFunction.Bartlett;
					max_partition_order = 6;
					break;
				case 3:
					stereo_method = StereoMethod.Estimate;
					window_function = WindowFunction.Bartlett;
					max_prediction_order = 8;
					break;
				case 4:
					stereo_method = StereoMethod.Estimate;
					window_function = WindowFunction.Bartlett;
					break;
				case 5:
					stereo_method = StereoMethod.Estimate;
					window_method = WindowMethod.Estimate;
					break;
				case 6:
					stereo_method = StereoMethod.Estimate;
					break;
				case 7:
					break;
				case 8:
					estimation_depth = 2;
					min_fixed_order = 0;
					lpc_min_precision_search = 0;
					break;
				case 9:
					window_function = WindowFunction.Bartlett;
					max_prediction_order = 32;
					break;
				case 10:
					min_fixed_order = 0;
					max_fixed_order = 4;
					max_prediction_order = 32;
					//lpc_max_precision_search = 2;
					break;
				case 11:
					min_fixed_order = 0;
					max_fixed_order = 4;
					max_prediction_order = 32;
					estimation_depth = 5;
					//lpc_max_precision_search = 2;
					variable_block_size = 4;
					break;
			}

			return 0;
		}
예제 #14
0
        private static IOrderedEnumerable <T> Order <T>(IEnumerable <T> source, string propertyName, OrderMethod method)
        {
            Ensure.NotNull(source, nameof(source));
            Ensure.NotEmpty(propertyName, nameof(propertyName));

            string[]            propertyNameParts = propertyName.Split('.');
            Type                type = typeof(T);
            ParameterExpression arg  = Expression.Parameter(type, "x");
            Expression          expr = arg;

            foreach (string propertyNamePart in propertyNameParts)
            {
                // Use reflection (not ComponentModel) to mirror LINQ
                PropertyInfo propertyInfo = type.GetProperty(propertyNamePart);
                if (propertyInfo == null)
                {
                    throw new InvalidOperationException($"Nested property with name {propertyName} for type {typeof(T).Name} was not found.");
                }
                expr = Expression.Property(expr, propertyInfo);
                type = propertyInfo.PropertyType;
            }
            Type             delegateType = typeof(Func <,>).MakeGenericType(typeof(T), type);
            LambdaExpression lambda       = Expression.Lambda(delegateType, expr, arg);

            object result = typeof(Enumerable).GetMethods().Single(
                m => m.Name == method.ToString() &&
                m.IsGenericMethodDefinition &&
                m.GetGenericArguments().Length == 2 &&
                m.GetParameters().Length == 2)
                            .MakeGenericMethod(typeof(T), type)
                            .Invoke(null, new object[] { source, lambda.Compile() });

            return((IOrderedEnumerable <T>)result);
        }
예제 #15
0
        /// <summary>
        /// Apply ordering to sort queryable result.
        /// </summary>
        /// <typeparam name="T">Type of queryable objects.</typeparam>
        /// <param name="query">Query.</param>
        /// <param name="propertyName">Name of property.</param>
        /// <param name="method">Flag of order method.</param>
        /// <returns>
        /// Ordered queryable object (IOrderedQueryable).
        /// </returns>
        /// <remarks>
        /// Use reflection (not ComponentModel) to mirror LINQ.
        /// </remarks>
        private static IOrderedQueryable <T> Order <T>(IQueryable <T> query, string propertyName, OrderMethod method)
        {
            Ensure.NotNull(query, nameof(query));
            Ensure.NotEmpty(propertyName, nameof(propertyName));

            string[]            propertyNameParts = propertyName.Split('.');
            Type                type       = typeof(T);
            ParameterExpression arg        = Expression.Parameter(type, "x");
            Expression          expression = arg;

            foreach (string propertyNamePart in propertyNameParts)
            {
                PropertyInfo propertyInfo = type.GetProperty(propertyNamePart, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance);
                if (propertyInfo == null)
                {
                    throw new InvalidOperationException($"Nested property with name {propertyName} for type {typeof(T).Name} was not found.");
                }
                expression = Expression.Property(expression, propertyInfo);
                type       = propertyInfo.PropertyType;
            }
            Type             delegateType = typeof(Func <,>).MakeGenericType(typeof(T), type);
            LambdaExpression lambda       = Expression.Lambda(delegateType, expression, arg);

            object result = typeof(Queryable).GetMethods().Single(
                m => m.Name == method.ToString() &&
                m.IsGenericMethodDefinition &&
                m.GetGenericArguments().Length == 2 &&
                m.GetParameters().Length == 2)
                            .MakeGenericMethod(typeof(T), type)
                            .Invoke(null, new object[] { query, lambda });

            return((IOrderedQueryable <T>)result);
        }
예제 #16
0
        public int flake_set_defaults(FlakeWriterSettings settings)
        {
            // default to level 7 params
            window_function = WindowFunction.Flattop | WindowFunction.Tukey;
            order_method = OrderMethod.Akaike;
            stereo_method = StereoMethod.Evaluate;
            window_method = WindowMethod.Evaluate;
            block_time_ms = 105;			
            prediction_type = PredictionType.Search;
            estimation_depth = 1;
            variable_block_size = 0;
            lpc_min_precision_search = 1;
            lpc_max_precision_search = 1;
            do_seektable = true;
            development_mode = -1;

            // differences from level 7
            switch (settings.EncoderModeIndex)
            {
                case 0:
                    block_time_ms = 53;
                    prediction_type = PredictionType.Fixed;
                    stereo_method = StereoMethod.Independent;
                    break;
                case 1:
                    prediction_type = PredictionType.Levinson;
                    stereo_method = StereoMethod.Independent;
                    window_function = WindowFunction.Bartlett;
                    break;
                case 2:
                    stereo_method = StereoMethod.Independent;
                    window_function = WindowFunction.Bartlett;
                    break;
                case 3:
                    stereo_method = StereoMethod.Estimate;
                    window_function = WindowFunction.Bartlett;
                    break;
                case 4:
                    stereo_method = StereoMethod.Estimate;
                    window_function = WindowFunction.Bartlett;
                    break;
                case 5:
                    stereo_method = StereoMethod.Estimate;
                    window_method = WindowMethod.Estimate;
                    break;
                case 6:
                    stereo_method = StereoMethod.Estimate;
                    break;
                case 7:
                    break;
                case 8:
                    estimation_depth = 2;
                    lpc_min_precision_search = 0;
                    break;
                case 9:
                    window_function = WindowFunction.Bartlett;
                    break;
                case 10:
                    //lpc_max_precision_search = 2;
                    break;
                case 11:
                    estimation_depth = 5;
                    //lpc_max_precision_search = 2;
                    variable_block_size = 4;
                    break;
            }

            return 0;
        }
예제 #17
0
		public int set_defaults(int lvl)
		{
			compression = lvl;

			if ((lvl < 0 || lvl > 12) && (lvl != 99))
			{
				return -1;
			}

			// default to level 5 params
			window_function = WindowFunction.Flattop | WindowFunction.Tukey;
			order_method = OrderMethod.Estimate;
			stereo_method = StereoMethod.Evaluate;
			window_method = WindowMethod.Evaluate;
			block_size = 0;
			block_time_ms = 105;
			min_modifier = 4;
			max_modifier = 4;
			min_prediction_order = 1;
			max_prediction_order = 12;
			estimation_depth = 1;
			adaptive_passes = 0;
			do_seektable = false;
			chunk_size = 5;

			// differences from level 6
			switch (lvl)
			{
				case 0:
					stereo_method = StereoMethod.Independent;
					window_function = WindowFunction.Hann;
					max_prediction_order = 6;
					break;
				case 1:
					stereo_method = StereoMethod.Independent;
					window_function = WindowFunction.Hann;
					max_prediction_order = 8;
					break;
				case 2:
					stereo_method = StereoMethod.Estimate;
					window_function = WindowFunction.Hann;
					max_prediction_order = 6;
					break;
				case 3:
					stereo_method = StereoMethod.Estimate;
					window_function = WindowFunction.Hann;
					max_prediction_order = 8;
					break;
				case 4:
					stereo_method = StereoMethod.Estimate;
					window_method = WindowMethod.Estimate;
					max_prediction_order = 8;
					break;
				case 5:
					stereo_method = StereoMethod.Estimate;
					window_method = WindowMethod.Estimate;
					break;
				case 6:
					stereo_method = StereoMethod.Estimate;
					break;
				case 7:
					stereo_method = StereoMethod.Estimate;
					adaptive_passes = 1;
					min_modifier = 2;
					break;
				case 8:
					adaptive_passes = 1;
					min_modifier = 2;
					break;
				case 9:
					adaptive_passes = 1;
					max_prediction_order = 30;
					min_modifier = 2;
					break;
				case 10:
					estimation_depth = 2;
					adaptive_passes = 2;
					max_prediction_order = 30;
					min_modifier = 2;
					break;
			}

			return 0;
		}