예제 #1
0
        /** 清空 */
        public void clear()
        {
            if (_queue.isEmpty())
            {
                return;
            }

            foreach (T v in _queue)
            {
                if (_releaseFunc != null)
                {
                    _releaseFunc(v);
                }
            }

            _queue.clear();

            if (ShineSetting.openCheck)
            {
                _checkSet.clear();
                _callStackDic.clear();
            }
        }
예제 #2
0
            public long getHeadTime()
            {
                if (_queue.isEmpty())
                {
                    return(0L);
                }

                return(_queue.peek().inTime);
            }
예제 #3
0
        /**
         * 构造失效节点: 一个节点的失效节点所代表的字符串是该节点所表示它的字符串的最大 部分前缀
         */
        private void buildFailNode()
        {
            // 以下构造失效节点
            SQueue <DFANode> queues = new SQueue <DFANode>();

            dfaEntrance.failNode = dfaEntrance;          //

            foreach (DFANode v in dfaEntrance.dfaTransition)
            {
                v.level = 1;
                queues.offer(v);
                v.failNode = dfaEntrance;              // 失效节点指向状态机初始状态
            }
            ;

            DFANode curNode  = null;
            DFANode failNode = null;

            while (!queues.isEmpty())
            {
                curNode  = queues.poll();             // 该节点的失效节点已计算
                failNode = curNode.failNode;


                foreach (var kv in curNode.dfaTransition.entrySet())
                {
                    char    k = kv.key;
                    DFANode v = kv.value;

                    // 如果父节点的失效节点中有条相同的出边,那么失效节点就是父节点的失效节点
                    while (failNode != dfaEntrance && !failNode.dfaTransition.contains(k))
                    {
                        failNode = failNode.failNode;
                    }

                    v.failNode = failNode.dfaTransition.get(k);

                    if (v.failNode == null)
                    {
                        v.failNode = dfaEntrance;
                    }

                    v.level = curNode.level + 1;
                    queues.offer(v);                    // 计算下一层
                }
            }
        }
예제 #4
0
        private static void runLoadOne(int index)
        {
            if (_loadQueue.isEmpty())
            {
                _loadings[index] = null;
                _loaders[index].unload();

                //完毕
                if (_loadingNum == 0)
                {
                    downloadOver();
                }

                return;
            }

            _loadingNum++;
            _loaders[index].loadResource((_loadings[index] = _loadQueue.poll()).name);
        }
예제 #5
0
        /** 执行一次 */
        public void runOnce()
        {
            lock (_queue)
            {
                Action <T> consumer = _consumer;
                SQueue <T> queue    = _queue;

                if (!queue.isEmpty())
                {
                    for (int i = queue.size() - 1; i >= 0; --i)
                    {
                        try
                        {
                            consumer(queue.poll());
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine(e);
                            throw;
                        }
                    }
                }
            }
        }