Skip to content

Commit c8a9a4d

Browse files
committed
Changed code structure to avoid code duplication.
1 parent ab1f7dc commit c8a9a4d

3 files changed

Lines changed: 55 additions & 58 deletions

File tree

UUIDUtil/UUIDv1.cs

Lines changed: 22 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -200,19 +200,7 @@ public static DateTime ToDateTime(Uuid uuid)
200200
if (!IsUUIDv1(uuid))
201201
throw new ArgumentException(String.Format("{0} is not a Version 1 UUID.", uuid), nameof(uuid));
202202

203-
Byte[] time = new Byte[8];
204-
Byte[] hex = uuid.ToByteArray();
205-
206-
time[0] = (Byte)(hex[6] & 0x0F);
207-
time[1] = hex[7];
208-
time[2] = hex[4];
209-
time[3] = hex[5];
210-
time[4] = hex[0];
211-
time[5] = hex[1];
212-
time[6] = hex[2];
213-
time[7] = hex[3];
214-
215-
Int64 timeInterval = System.Net.IPAddress.NetworkToHostOrder(BitConverter.ToInt64(time, 0));
203+
long timeInterval = GetTimeInterval(uuid);
216204
TimeSpan timeSpan = TimeSpan.FromTicks(timeInterval);
217205

218206
return s_epoch.ToUniversalTime() + timeSpan;
@@ -229,21 +217,11 @@ public static Uuid ToUUIDv6(Uuid uuid)
229217
if (!IsUUIDv1(uuid))
230218
throw new ArgumentException(String.Format("{0} is not a Version 1 UUID.", uuid), nameof(uuid));
231219

232-
Byte[] time = new Byte[8];
233-
Byte[] hex = uuid.ToByteArray();
220+
Int64 timeInterval = GetTimeInterval(uuid);
234221

235-
time[0] = (Byte)(hex[6] & 0x0F);
236-
time[1] = hex[7];
237-
time[2] = hex[4];
238-
time[3] = hex[5];
239-
time[4] = hex[0];
240-
time[5] = hex[1];
241-
time[6] = hex[2];
242-
time[7] = hex[3];
243-
244-
Int64 timeInterval = System.Net.IPAddress.NetworkToHostOrder(BitConverter.ToInt64(time, 0));
222+
Byte[] hex = uuid.ToByteArray();
245223
timeInterval <<= 4;
246-
time = BitConverter.GetBytes(System.Net.IPAddress.HostToNetworkOrder(timeInterval));
224+
Byte[] time = BitConverter.GetBytes(System.Net.IPAddress.HostToNetworkOrder(timeInterval));
247225

248226
hex[0] = time[0];
249227
hex[1] = time[1];
@@ -258,5 +236,23 @@ public static Uuid ToUUIDv6(Uuid uuid)
258236

259237
return new Uuid(hex);
260238
}
239+
240+
private static Int64 GetTimeInterval(Uuid uuid)
241+
{
242+
Byte[] hex = uuid.ToByteArray();
243+
Byte[] time = new Byte[8];
244+
245+
time[0] = (Byte)(hex[6] & 0x0F);
246+
time[1] = hex[7];
247+
time[2] = hex[4];
248+
time[3] = hex[5];
249+
time[4] = hex[0];
250+
time[5] = hex[1];
251+
time[6] = hex[2];
252+
time[7] = hex[3];
253+
254+
Int64 timeInterval = System.Net.IPAddress.NetworkToHostOrder(BitConverter.ToInt64(time, 0));
255+
return timeInterval;
256+
}
261257
}
262258
}

UUIDUtil/UUIDv6.cs

Lines changed: 23 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -184,20 +184,7 @@ public static DateTime ToDateTime(Uuid uuid)
184184
if (!IsUUIDv6(uuid))
185185
throw new ArgumentException(String.Format("{0} is not a Version 6 UUID.", uuid), nameof(uuid));
186186

187-
Byte[] time = new Byte[8];
188-
Byte[] hex = uuid.ToByteArray();
189-
190-
time[0] = hex[0];
191-
time[1] = hex[1];
192-
time[2] = hex[2];
193-
time[3] = hex[3];
194-
time[4] = hex[4];
195-
time[5] = hex[5];
196-
time[6] = (Byte)((Byte)((hex[6] & 0x0F) << 4) + (hex[7] >> 4));
197-
time[7] = (Byte)(hex[7] << 4);
198-
199-
Int64 timeInterval = System.Net.IPAddress.NetworkToHostOrder(BitConverter.ToInt64(time, 0));
200-
timeInterval >>= 4;
187+
long timeInterval = GetTimeInterval(uuid);
201188
TimeSpan timeSpan = TimeSpan.FromTicks(timeInterval);
202189

203190
return s_epoch.ToUniversalTime() + timeSpan;
@@ -214,21 +201,10 @@ public static Uuid ToUUIDv1(Uuid uuid)
214201
if (!IsUUIDv6(uuid))
215202
throw new ArgumentException(String.Format("{0} is not a Version 6 UUID.", uuid), nameof(uuid));
216203

217-
Byte[] time = new Byte[8];
218-
Byte[] hex = uuid.ToByteArray();
219-
220-
time[0] = hex[0];
221-
time[1] = hex[1];
222-
time[2] = hex[2];
223-
time[3] = hex[3];
224-
time[4] = hex[4];
225-
time[5] = hex[5];
226-
time[6] = (Byte)((Byte)((hex[6] & 0x0F) << 4) + (hex[7] >> 4));
227-
time[7] = (Byte)(hex[7] << 4);
204+
Int64 timeInterval = GetTimeInterval(uuid);
228205

229-
Int64 timeInterval = System.Net.IPAddress.NetworkToHostOrder(BitConverter.ToInt64(time, 0));
230-
timeInterval >>= 4;
231-
time = BitConverter.GetBytes(System.Net.IPAddress.HostToNetworkOrder(timeInterval));
206+
Byte[] hex = uuid.ToByteArray();
207+
Byte[] time = BitConverter.GetBytes(System.Net.IPAddress.HostToNetworkOrder(timeInterval));
232208

233209
hex[0] = time[4];
234210
hex[1] = time[5];
@@ -243,5 +219,24 @@ public static Uuid ToUUIDv1(Uuid uuid)
243219

244220
return new Uuid(hex);
245221
}
222+
223+
private static Int64 GetTimeInterval(Uuid uuid)
224+
{
225+
Byte[] hex = uuid.ToByteArray();
226+
Byte[] time = new Byte[8];
227+
228+
time[0] = hex[0];
229+
time[1] = hex[1];
230+
time[2] = hex[2];
231+
time[3] = hex[3];
232+
time[4] = hex[4];
233+
time[5] = hex[5];
234+
time[6] = (Byte)((Byte)((hex[6] & 0x0F) << 4) + (hex[7] >> 4));
235+
time[7] = (Byte)(hex[7] << 4);
236+
237+
Int64 timeInterval = System.Net.IPAddress.NetworkToHostOrder(BitConverter.ToInt64(time, 0));
238+
timeInterval >>= 4;
239+
return timeInterval;
240+
}
246241
}
247242
}

UUIDUtil/UUIDv7.cs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -226,8 +226,16 @@ public static DateTime ToDateTime(Uuid uuid)
226226
if (!IsUUIDv7(uuid))
227227
throw new ArgumentException(String.Format("{0} is not a Version 7 UUID.", uuid), nameof(uuid));
228228

229-
Byte[] time = new Byte[8];
229+
long timeInterval = GetTimeInterval(uuid);
230+
TimeSpan timeSpan = TimeSpan.FromMilliseconds(timeInterval);
231+
232+
return s_epoch.ToUniversalTime() + timeSpan;
233+
}
234+
235+
private static Int64 GetTimeInterval(Uuid uuid)
236+
{
230237
Byte[] hex = uuid.ToByteArray();
238+
Byte[] time = new Byte[8];
231239

232240
time[0] = hex[0];
233241
time[1] = hex[1];
@@ -240,9 +248,7 @@ public static DateTime ToDateTime(Uuid uuid)
240248

241249
Int64 timeInterval = System.Net.IPAddress.NetworkToHostOrder(BitConverter.ToInt64(time, 0));
242250
timeInterval >>= 16;
243-
TimeSpan timeSpan = TimeSpan.FromMilliseconds(timeInterval);
244-
245-
return s_epoch.ToUniversalTime() + timeSpan;
251+
return timeInterval;
246252
}
247253
}
248254
}

0 commit comments

Comments
 (0)