public int DecreaseReferenceCount(NFSFolderBranchNode node)
        {
            if (node == null)
            {
                throw new ArgumentNullException("node");
            }

            lock (mapLock)
            {
                int count;
                var map = this.refCountMap;
                if (map.TryGetValue(node, out count))
                {
                    if (--count == 0)
                    {
                        map.Remove(node);
                    }
                    else
                    {
                        map[node] = count;
                    }
                }
                return(count);
            }
        }
        public bool HasReference(NFSFolderBranchNode node)
        {
            if (node == null)
            {
                throw new ArgumentNullException("node");
            }

            lock (mapLock)
                return(this.refCountMap.ContainsKey(node));
        }
            public NFSFolderNodePair(NFSFolder folder, NFSFolderBranchNode node)
            {
                if (folder == null)
                {
                    throw new ArgumentNullException("folder");
                }
                if (node == null)
                {
                    throw new ArgumentNullException("node");
                }
                if (folder.Name != node.Name)
                {
                    throw new ArgumentException("folder and node are mismatched");
                }

                this.folder = folder;
                this.node   = node;
            }