/// <summary>Read a string using a <see cref="Memory.Strings.StringStorage"/> encoding and a provided character length</summary> /// <param name="encoding">The encoding to use for character streaming</param> /// <param name="length">Length, in characters, of the string.</param> /// <returns></returns> /// <remarks> /// Length can be non-positive if <paramref name="encoding"/>'s storage defines /// or doesn't require an explicit character length. If you do provide the /// length, this operation will perform faster in some cases. /// </remarks> public string ReadString(Text.StringStorageEncoding encoding, int length) { Contract.Requires(encoding != null); ValidateStringStorageForStreaming(encoding.Storage, length); return(encoding.ReadString(this, length)); }
/// <summary>Writes string using a <see cref="Text.StringStorageEncoding"/></summary> /// <param name="value">String value to write. Null defaults to an empty string</param> /// <param name="encoding">Encoding to use for character streaming</param> public void Write(string value, Text.StringStorageEncoding encoding) { Contract.Requires(encoding != null); byte[] bytes = encoding.GetBytes(value ?? string.Empty); base.Write(bytes); }
public static void Assert(IO.EndianReader s, string expected, Text.StringStorageEncoding encoding) { Contract.Requires(s != null); Contract.Requires(!string.IsNullOrEmpty(expected)); Contract.Requires(encoding != null); string signature = s.ReadString(encoding, expected.Length); if (signature != expected) { throw new SignatureMismatchException(s.BaseStream, expected, signature); } }
public EndianStream Stream(ref string value, Text.StringStorageEncoding encoding, int length) { Contract.Requires(encoding != null); if (IsReading) { value = Reader.ReadString(encoding, length); } else if (IsWriting) { Writer.Write(value, encoding); } return(this); }
public EndianStream StreamSignature(string signature, Text.StringStorageEncoding encoding) { Contract.Requires(!string.IsNullOrEmpty(signature)); Contract.Requires(encoding != null); if (IsReading) { SignatureMismatchException.Assert(Reader, signature, encoding); } else if (IsWriting) { Writer.Write(signature, encoding); } return(this); }
/// <summary> /// Read a string using a <see cref="Memory.Strings.StringStorage"/> encoding. /// String length defaults to <see cref="Memory.Strings.StringStorage.FixedLegnth"/> /// </summary> /// <param name="encoding">The encoding to use for character streaming</param> /// <returns></returns> public string ReadString(Text.StringStorageEncoding encoding) { Contract.Requires(encoding != null); return(ReadString(encoding, encoding.Storage.FixedLength)); }
/// <summary>Create a <see cref="StringMemoryPool"/> from a <see cref="StringMemoryPoolSettings"/> definition</summary> /// <param name="definition"></param> public StringMemoryPool(StringMemoryPoolSettings definition) { Settings = definition; InitializeCollections(kEntryStartCount); mEncoding = new Text.StringStorageEncoding(definition.Storage); }