/**
         * updates the request ranking
         */
        private void updateRequest(PointingNode pNode, Url newRequest)
        {
            if (pNode == null || newRequest == null)
            {
                return;
            }

            LinkedListNode <RankNode> pLinkNode = pNode.getRankNode();

            // the request has been token before
            if (pLinkNode == null)
            {
                return;
            }

            pLinkNode.Value.addReference(newRequest.getRank());
            int newRank = Convert.ToInt32(pLinkNode.Value.calcRank());

            if (newRank != pNode.getRankTableEntry().getRankLevel())
            {
                RankNode rankNode = pLinkNode.Value;
                pNode.getRankTableEntry().removeNode(pLinkNode);
                pNode.setRankTableEntry(_rankLevels[newRank]);
                LinkedListNode <RankNode> newNode = pNode.getRankTableEntry().addFirstNode(rankNode);
                pNode.setRankNode(newNode);

                //if (newRank < _minRank) _minRank = newRank;
                //if (newRank > _maxRank) _maxRank = newRank;
                update();
            }
        }
        /**
         * returns the max ranked element (pop)
         */
        public Url pop()
        {
            if (_count <= 0)
            {
                return(null);
            }

            RankNode rankNode = _rankLevels[_maxRank].readFirstNode();

            _rankLevels[_maxRank].removeFirstNode();
            bool match = _urlTrie.Matcher.NewMatch(rankNode.getRequest().getUrl().Trim());

            if (match == true)
            {
                PointingNode pNode = _urlTrie.Matcher.GetExactMatch();
                pNode.setRankTableEntry(null);
                pNode.setRankNode(null);
            }
            _count--;
            update();

            Url request = rankNode.getRequest();
            int rank    = Convert.ToInt32(rankNode.calcRank());

            return(new Url(request.getUrl(), request.getUrlHashCode(), rank, request.getDomain(), request.getDomainHashCode()));
        }
 /**
  * adds the specfied node to the members of this level, and returns reference
  * to the warpper node
  */
 public LinkedListNode <RankNode> addFirstNode(RankNode rankNode)
 {
     return(_nodeList.AddFirst(rankNode));
 }
 /**
  * adds the specfied node to the members of this level, and returns reference
  * to the warpper node
  */
 public LinkedListNode<RankNode> addFirstNode(RankNode rankNode)
 {
     return _nodeList.AddFirst(rankNode);
 }