public static ITupleFormatter <T> CreateAppender([NotNull] ITuple prefix) { Contract.NotNull(prefix, nameof(prefix)); return(new AnonymousTupleFormatter <T>( (value) => prefix.Append <T>(value), (tuple) => { if (tuple.Count != prefix.Count + 1) { throw new ArgumentException("Tuple size is invalid", "tuple"); } if (!TupleHelpers.StartsWith(tuple, prefix)) { throw new ArgumentException("Tuple does not start with the expected prefix", "tuple"); } return tuple.Last <T>(); } )); }
/// <summary>Create a formatter that just add or remove a prefix to values</summary> public static ITupleFormatter <T> CreateAppender(ITuple prefix) { if (prefix == null) { throw new ArgumentNullException(nameof(prefix)); } return(new AnonymousTupleFormatter <T>( (value) => prefix.Append <T>(value), (tuple) => { if (tuple.Count != prefix.Count + 1) { throw new ArgumentException("Tuple size is invalid", nameof(tuple)); } if (!STuple.StartsWith(tuple, prefix)) { throw new ArgumentException("Tuple does not start with the expected prefix", nameof(tuple)); } return tuple.Last <T>(); } )); }
public PrefixedTuple Append <T>(T value) { return(new PrefixedTuple(m_prefix, m_items.Append <T>(value))); }
/// <summary>Returns the key of a specific field of an HashSet: (subspace, id, field, )</summary> /// <param name="id"></param> /// <param name="field"></param> /// <returns></returns> protected virtual Slice GetFieldKey(ITuple id, string field) { //REVIEW: should the id be encoded as a an embedded tuple or not? return(this.Subspace.Keys.Pack(id.Append(field))); }