Exemplo n.º 1
0
        /// <summary>
        /// init
        /// </summary>
        /// <param name="arrNodes"></param>
        public void Init(string[] arrNodes)
        {
            if (arrNodes == null || arrNodes.Length == 0)
            {
                throw new ArgumentNullException("arrNodes");
            }

            this._arrNodes = arrNodes.Distinct().ToArray();

            this._dic.Clear();
            this._keys = null;

            var listKeys = new List <uint>();

            foreach (var node in arrNodes)
            {
                for (int i = 0; i < 250; i++)
                {
                    var key = ModifiedFNV1_32.GetHashCode(Encoding.UTF8.GetBytes(string.Concat(node, "-", i.ToString())));
                    if (this._dic.ContainsKey(key))
                    {
                        continue;
                    }

                    this._dic[key] = node;
                    listKeys.Add(key);
                }
            }

            listKeys.Sort();
            this._keys = listKeys.ToArray();
        }
Exemplo n.º 2
0
        /// <summary>
        /// calc
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public string GetNode(string key)
        {
            if (key == null)
            {
                throw new ArgumentNullException("key");
            }

            var hash = ModifiedFNV1_32.GetHashCode(Encoding.UTF8.GetBytes(key));

            return(this._arrNodes[hash % this._arrNodes.Length]);
        }
Exemplo n.º 3
0
        /// <summary>
        /// calc
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public string GetNode(string key)
        {
            if (key == null)
            {
                throw new ArgumentNullException("key");
            }

            var i = Array.BinarySearch(this._keys, ModifiedFNV1_32.GetHashCode(Encoding.UTF8.GetBytes(key)));

            if (i < 0)
            {
                i = ~i;
                if (i >= this._keys.Length)
                {
                    i = 0;
                }
            }
            return(this._dic[this._keys[i]]);
        }