@@ -877,6 +877,7 @@ internal static Slice UnescapeByteStringSlow([NotNull] byte[] buffer, int offset
877877 }
878878
879879 /// <summary>Parse a tuple segment containing a byte array</summary>
880+ [ Pure ]
880881 public static Slice ParseBytes ( Slice slice )
881882 {
882883 Contract . Requires ( slice . HasValue && slice [ 0 ] == TupleTypes . Bytes && slice [ - 1 ] == 0 ) ;
@@ -888,6 +889,7 @@ public static Slice ParseBytes(Slice slice)
888889 }
889890
890891 /// <summary>Parse a tuple segment containing an ASCII string stored as a byte array</summary>
892+ [ Pure ]
891893 public static string ParseAscii ( Slice slice )
892894 {
893895 Contract . Requires ( slice . HasValue && slice [ 0 ] == TupleTypes . Bytes && slice [ - 1 ] == 0 ) ;
@@ -900,6 +902,7 @@ public static string ParseAscii(Slice slice)
900902 }
901903
902904 /// <summary>Parse a tuple segment containing a unicode string</summary>
905+ [ Pure ]
903906 public static string ParseUnicode ( Slice slice )
904907 {
905908 Contract . Requires ( slice . HasValue && slice [ 0 ] == TupleTypes . Utf8 && slice [ - 1 ] == 0 ) ;
@@ -911,6 +914,7 @@ public static string ParseUnicode(Slice slice)
911914 }
912915
913916 /// <summary>Parse a tuple segment containing an embedded tuple</summary>
917+ [ Pure ]
914918 public static ITuple ParseTuple ( Slice slice )
915919 {
916920 Contract . Requires ( slice . HasValue && slice [ 0 ] == TupleTypes . TupleStart && slice [ - 1 ] == 0 ) ;
@@ -920,6 +924,7 @@ public static ITuple ParseTuple(Slice slice)
920924 }
921925
922926 /// <summary>Parse a tuple segment containing a single precision number (float32)</summary>
927+ [ Pure ]
923928 public static float ParseSingle ( Slice slice )
924929 {
925930 Contract . Requires ( slice . HasValue && slice [ 0 ] == TupleTypes . Single ) ;
@@ -950,6 +955,7 @@ public static float ParseSingle(Slice slice)
950955 }
951956
952957 /// <summary>Parse a tuple segment containing a double precision number (float64)</summary>
958+ [ Pure ]
953959 public static double ParseDouble ( Slice slice )
954960 {
955961 Contract . Requires ( slice . HasValue && slice [ 0 ] == TupleTypes . Double ) ;
@@ -981,6 +987,7 @@ public static double ParseDouble(Slice slice)
981987 }
982988
983989 /// <summary>Parse a tuple segment containing a quadruple precision number (float128)</summary>
990+ [ Pure ]
984991 public static decimal ParseDecimal ( Slice slice )
985992 {
986993 Contract . Requires ( slice . HasValue && slice [ 0 ] == TupleTypes . Decimal ) ;
@@ -994,6 +1001,7 @@ public static decimal ParseDecimal(Slice slice)
9941001 }
9951002
9961003 /// <summary>Parse a tuple segment containing a 128-bit GUID</summary>
1004+ [ Pure ]
9971005 public static Guid ParseGuid ( Slice slice )
9981006 {
9991007 Contract . Requires ( slice . HasValue && slice [ 0 ] == TupleTypes . Uuid128 ) ;
@@ -1008,6 +1016,7 @@ public static Guid ParseGuid(Slice slice)
10081016 }
10091017
10101018 /// <summary>Parse a tuple segment containing a 128-bit UUID</summary>
1019+ [ Pure ]
10111020 public static Uuid128 ParseUuid128 ( Slice slice )
10121021 {
10131022 Contract . Requires ( slice . HasValue && slice [ 0 ] == TupleTypes . Uuid128 ) ;
@@ -1021,6 +1030,7 @@ public static Uuid128 ParseUuid128(Slice slice)
10211030 }
10221031
10231032 /// <summary>Parse a tuple segment containing a 64-bit UUID</summary>
1033+ [ Pure ]
10241034 public static Uuid64 ParseUuid64 ( Slice slice )
10251035 {
10261036 Contract . Requires ( slice . HasValue && slice [ 0 ] == TupleTypes . Uuid64 ) ;
@@ -1033,6 +1043,20 @@ public static Uuid64 ParseUuid64(Slice slice)
10331043 return Uuid64 . Read ( slice . Substring ( 1 , 8 ) ) ;
10341044 }
10351045
1046+ /// <summary>Parse a tuple segment containing an 80-bit or 96-bit VersionStamp</summary>
1047+ [ Pure ]
1048+ public static VersionStamp ParseVersionStamp ( Slice slice )
1049+ {
1050+ Contract . Requires ( slice . HasValue && ( slice [ 0 ] == TupleTypes . VersionStamp80 || slice [ 0 ] == TupleTypes . VersionStamp96 ) ) ;
1051+
1052+ if ( slice . Count != 11 && slice . Count != 13 )
1053+ {
1054+ throw new FormatException ( "Slice has invalid size for a VersionStamp" ) ;
1055+ }
1056+
1057+ return VersionStamp . Parse ( slice . Substring ( 1 ) ) ;
1058+ }
1059+
10361060 #endregion
10371061
10381062 #region Parsing...
0 commit comments