/// <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))); } }
/// <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); }