예제 #1
0
        private bool Add(Node node, bool raiseNodeAdded)
        {
            if (node == null)
            {
                throw new ArgumentNullException("node");
            }

            Bucket bucket = buckets.Find(delegate(Bucket b) { return(b.CanContain(node)); });

            if (bucket != null && bucket.Nodes.Contains(node))
            {
                return(false);
            }

            bool added = bucket.Add(node);

            if (!added && bucket.CanContain(LocalNode))
            {
                if (Split(bucket))
                {
                    return(Add(node, raiseNodeAdded));
                }
            }

            return(added);
        }
        bool Add(Node node, bool raiseNodeAdded)
        {
            if (node == null)
            {
                throw new ArgumentNullException(nameof(node));
            }

            Bucket bucket = Buckets.Find(b => b.CanContain(node)) !;

            if (bucket.Nodes.Contains(node))
            {
                return(false);
            }

            bool added = bucket.Add(node);

            if (!added && bucket.CanContain(LocalNode))
            {
                if (Split(bucket))
                {
                    return(Add(node, raiseNodeAdded));
                }
            }

            return(added);
        }