/// <summary>
        /// create
        /// </summary>
        /// < param  name = " mapping " > storage mapper </ param >
        /// <returns></returns>
        public Guid Create(IDataSourceMapper mapping)
        {
            var content = new byte[16];
            var time    = BitConverter.GetBytes(DateTime.Now.Ticks);
            var seed    = BitConverter.GetBytes(GetNextSeed(time));

            Array.Copy(Hash, 0, content, 0, 6);
            Array.Copy(seed, 0, content, 6, 4);
            Array.Copy(time, 2, content, 10, 6);

            if (mapping == null)
            {
                return(new Guid(content));
            }
            else
            {
                return(new Guid(StorageMapping.Format(content, mapping)));
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// formatting
        /// </summary>
        /// <param name="input"></param>
        /// <param name="mapping"></param>
        /// <returns></returns>
        public static byte[] Format(byte[] input, IDataSourceMapper mapping)
        {
            if (input == null)
            {
                throw new ArgumentNullException("input");
            }
            if (mapping == null)
            {
                throw new ArgumentNullException("mapping");
            }
            if (input.Length != 16)
            {
                throw new ArgumentOutOfRangeException("input");
            }

            var context = mapping.GetMapping();
            var result  = new byte[16];

            for (var i = 0; i < result.Length; i++)
            {
                result[context[i]] = input[i];
            }
            return(result);
        }