Ejemplo n.º 1
0
        /// <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));
        }
Ejemplo n.º 2
0
        /// <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);
            }
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        /// <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));
        }
Ejemplo n.º 7
0
 /// <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);
 }