Line data Source code
1 : /*
2 : * Copyright 2011 Google Inc. All Rights Reserved.
3 : *
4 : * Licensed under the Apache License, Version 2.0 (the "License");
5 : * you may not use this file except in compliance with the License.
6 : * You may obtain a copy of the License at
7 : *
8 : * http://www.apache.org/licenses/LICENSE-2.0
9 : *
10 : * Unless required by applicable law or agreed to in writing, software
11 : * distributed under the License is distributed on an "AS IS" BASIS,
12 : * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 : * See the License for the specific language governing permissions and
14 : * limitations under the License.
15 : */
16 :
17 : #ifndef SFNTLY_CPP_SRC_SFNTLY_DATA_FONT_INPUT_STREAM_H_
18 : #define SFNTLY_CPP_SRC_SFNTLY_DATA_FONT_INPUT_STREAM_H_
19 :
20 : #include "sfntly/port/type.h"
21 : #include "sfntly/port/input_stream.h"
22 :
23 : namespace sfntly {
24 :
25 : // An input stream for reading font data.
26 : // The data types used are as listed:
27 : // BYTE 8-bit unsigned integer.
28 : // CHAR 8-bit signed integer.
29 : // USHORT 16-bit unsigned integer.
30 : // SHORT 16-bit signed integer.
31 : // UINT24 24-bit unsigned integer.
32 : // ULONG 32-bit unsigned integer.
33 : // LONG 32-bit signed integer.
34 : // Fixed 32-bit signed fixed-point number (16.16)
35 : // FUNIT Smallest measurable distance in the em space.
36 : // FWORD 16-bit signed integer (SHORT) that describes a quantity in FUnits.
37 : // UFWORD 16-bit unsigned integer (USHORT) that describes a quantity in
38 : // FUnits.
39 : // F2DOT14 16-bit signed fixed number with the low 14 bits of fraction (2.14)
40 : // LONGDATETIME Date represented in number of seconds since 12:00 midnight,
41 : // January 1, 1904. The value is represented as a signed 64-bit
42 : // integer.
43 :
44 : // Note: Original class inherits from Java's FilterOutputStream, which wraps
45 : // an InputStream within. In C++, we directly do the wrapping without
46 : // defining another layer of abstraction. The wrapped output stream is
47 : // *NOT* reference counted (because it's meaningless to ref-count an I/O
48 : // stream).
49 : class FontInputStream : public InputStream {
50 : public:
51 : // Constructor.
52 : // @param is input stream to wrap
53 : explicit FontInputStream(InputStream* is);
54 :
55 : // Constructor for a bounded font input stream.
56 : // @param is input stream to wrap
57 : // @param length the maximum length of bytes to read
58 : FontInputStream(InputStream* is, size_t length);
59 :
60 : virtual ~FontInputStream();
61 :
62 :
63 : virtual int32_t Available();
64 : virtual void Close();
65 : virtual void Mark(int32_t readlimit);
66 : virtual bool MarkSupported();
67 : virtual void Reset();
68 :
69 : virtual int32_t Read();
70 : virtual int32_t Read(ByteVector* buffer);
71 : virtual int32_t Read(ByteVector* buffer, int32_t offset, int32_t length);
72 :
73 : // Get the current position in the stream in bytes.
74 : // @return the current position in bytes
75 0 : virtual int64_t position() { return position_; }
76 :
77 : virtual int32_t ReadChar();
78 : virtual int32_t ReadUShort();
79 : virtual int32_t ReadShort();
80 : virtual int32_t ReadUInt24();
81 : virtual int64_t ReadULong();
82 : virtual int32_t ReadULongAsInt();
83 : virtual int32_t ReadLong();
84 : virtual int32_t ReadFixed();
85 : virtual int64_t ReadDateTimeAsLong();
86 : virtual int64_t Skip(int64_t n); // n can be negative.
87 :
88 : private:
89 : InputStream* stream_;
90 : int64_t position_;
91 : int64_t length_; // Bound on length of data to read.
92 : bool bounded_;
93 : };
94 :
95 : } // namespace sfntly
96 :
97 : #endif // SFNTLY_CPP_SRC_SFNTLY_DATA_FONT_INPUT_STREAM_H_
|