Exemple #1
0
        /// <summary>
        /// 前置插入数据
        /// </summary>
        /// <param name="parser"></param>
        private void insertBefore(ref OperationParameter.NodeParser parser)
        {
            int index = parser.GetValueData(int.MinValue);
            LinkNode <valueType> node = getNode(index);

            if (node != null)
            {
                if (parser.LoadValueData() && parser.IsEnd && parser.ValueData.Type == ValueData.Data <valueType> .DataType)
                {
                    LinkNode <valueType> newNode = new LinkNode <valueType>(node.Previous, node, ValueData.Data <valueType> .GetData(ref parser.ValueData));
                    if (node.InsertBefore(newNode))
                    {
                        head = newNode;
                    }
                    ++count;
                    parser.SetOperationReturnParameter();
                }
                else
                {
                    parser.ReturnParameter.ReturnType = ReturnType.ValueDataLoadError;
                }
            }
            else if ((count | index) == 0)
            {
                if (parser.LoadValueData() && parser.IsEnd && parser.ValueData.Type == ValueData.Data <valueType> .DataType)
                {
                    setHeadEnd(ref parser, ValueData.Data <valueType> .GetData(ref parser.ValueData));
                }
                else
                {
                    parser.ReturnParameter.ReturnType = ReturnType.ValueDataLoadError;
                }
            }
            else
            {
                parser.ReturnParameter.ReturnType = ReturnType.LinkIndexOutOfRange;
            }
        }