File: BufStream.h

package info (click to toggle)
storm-lang 0.7.5-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 52,028 kB
  • sloc: ansic: 261,471; cpp: 140,432; sh: 14,891; perl: 9,846; python: 2,525; lisp: 2,504; asm: 860; makefile: 678; pascal: 70; java: 52; xml: 37; awk: 12
file content (68 lines) | stat: -rw-r--r-- 1,408 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#pragma once
#include "Core/Io/Stream.h"

namespace storm {
	namespace server {
		STORM_PKG(core.lang.server);

		/**
		 * Fillable in-memory stream used for parsing of messages.
		 */
		class BufStream : public RIStream {
			STORM_CLASS;
		public:
			// Create.
			STORM_CTOR BufStream();

			// Copy.
			BufStream(const BufStream &o);

			// Deep copy.
			void STORM_FN deepCopy(CloneEnv *env);

			// More data?
			virtual Bool STORM_FN more();

			// Read.
			using RIStream::read;
			virtual Buffer STORM_FN read(Buffer to);

			// Peek.
			using RIStream::peek;
			virtual Buffer STORM_FN peek(Buffer to);

			// Seek.
			virtual void STORM_FN seek(Word to);

			// Tell.
			virtual Word STORM_FN tell();

			// Current length.
			virtual Word STORM_FN length();

			// Get random access version.
			virtual RIStream *STORM_FN randomAccess();

			// Output.
			void STORM_FN toS(StrBuf *to) const;

			// Append more data. May discard any data which has already been read.
			void STORM_FN append(Buffer data);

			// Find the first occurrence of 'b' from 'tell()'. Returns the number of bytes to read
			// before reaching it, or the remaining number of bytes if none is found.
			Nat STORM_FN findByte(Byte b) const;

		private:
			// Data.
			Buffer data;

			// Position.
			Nat pos;

			// Re-allocate 'data' so that it can hold at least 'count' more bytes.
			void realloc(Nat count);
		};

	}
}