Ejemplo n.º 1
0
        public virtual void InsertCq(Record cq, Key key)
        {
            string strSp = cq.SampleKey;

            //是否需要添加 Sample 到集合中
            if (!Samples.Contains(strSp))
            {
                InsertSample(strSp);
            }

            LLNCC node = Buoy[key];
            //根据 Key 找出 Cq 集合
            CqCollection cqs = null;

            //判断 Buoy 是否有指向
            if (node == null)//Buoy 没指向
            {
                //实例新的集合
                cqs = new CqCollection()
                {
                    Key = key
                };

                cqs.Samples = Samples;
                cqs[strSp]  = cq;
                if (key.Previous != null)
                {
                    node = Lists.AddAfter(Buoy[key.Previous], cqs);
                }
                else
                {
                    node = Lists.AddFirst(cqs);
                }
                Buoy[key] = node;
            }
            else//Buoy 有指向
            {
                LLNCC preNode = null;
                if (key.Previous != null)
                {
                    preNode = Buoy[key.Previous].Next;
                }
                else
                {
                    preNode = Lists.First;
                }


                while (preNode != null && preNode != node.Next)
                {
                    cqs = preNode.Value;
                    if (cqs[strSp] == null)
                    {
                        cqs[strSp] = cq;
                        break;
                    }

                    preNode = preNode.Next;
                }

                if (node.Next == preNode)
                {
                    cqs = new CqCollection()
                    {
                        Key = key
                    };
                    cqs.Samples = Samples;
                    cqs[strSp]  = cq;
                    node        = Lists.AddAfter(node, cqs);
                    Buoy[key]   = node;
                }
            }
        }