Xerces-C++ 3.1.3

- Main Page
- Related Pages
- Classes
- Files

- File List
- File Members

BinMemInputStream.hpp
Go to the documentation of this file.
1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 /*
19 * $Id: BinMemInputStream.hpp 670359 2008-06-22 13:43:45Z borisk $
20 */
21
22 #if !defined(XERCESC_INCLUDE_GUARD_BINMEMINPUTSTREAM_HPP)
23 #define XERCESC_INCLUDE_GUARD_BINMEMINPUTSTREAM_HPP
24
25 #include <xercesc/util/BinInputStream.hpp>
26 #include <xercesc/util/PlatformUtils.hpp>
27
28 XERCES_CPP_NAMESPACE_BEGIN
29
30 class XMLUTIL_EXPORT BinMemInputStream : public BinInputStream
31 {
32 public :
33 // -----------------------------------------------------------------------
34 // Class specific types
35 // -----------------------------------------------------------------------
36 enum BufOpts
37 {
38 BufOpt_Adopt
39 , BufOpt_Copy
40 , BufOpt_Reference
41 };
42
43
44 // -----------------------------------------------------------------------
45 // Constructors and Destructor
46 // -----------------------------------------------------------------------
47 BinMemInputStream
48 (
49 const XMLByte* const initData
50 , const XMLSize_t capacity
51 , const BufOpts bufOpt = BufOpt_Copy
52 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager
53 );
54 virtual ~BinMemInputStream();
55
56
57 // -----------------------------------------------------------------------
58 // Stream management methods
59 // -----------------------------------------------------------------------
60 void reset();
61
62
63 // -----------------------------------------------------------------------
64 // Implementation of the input stream interface
65 // -----------------------------------------------------------------------
66 virtual XMLFilePos curPos() const;
67
68 virtual XMLSize_t readBytes
69 (
70 XMLByte* const toFill
71 , const XMLSize_t maxToRead
72 );
73
74 virtual const XMLCh* getContentType() const;
75
76 inline XMLSize_t getSize() const;
77
78 private :
79 // -----------------------------------------------------------------------
80 // Unimplemented constructors and operators
81 // -----------------------------------------------------------------------
82 BinMemInputStream(const BinMemInputStream&);
83 BinMemInputStream& operator=(const BinMemInputStream&);
84 // -----------------------------------------------------------------------
85 // Private data members
86 //
87 // fBuffer
88 // The buffer of bytes that we are streaming.
89 //
90 // fBufOpt
91 // Indicates the ownership status of the buffer. The caller can have
92 // us adopt it (we delete it), reference it, or just make our own
93 // copy of it.
94 //
95 // fCapacity
96 // The size of the buffer being streamed.
97 //
98 // fCurIndex
99 // The current index where the next byte will be read from. When it
100 // hits fCapacity, we are done.
101 // -----------------------------------------------------------------------
102 const XMLByte* fBuffer;
103 BufOpts fBufOpt;
104 XMLSize_t fCapacity;
105 XMLSize_t fCurIndex;
106 MemoryManager* fMemoryManager;
107 };
108
109
110 // ---------------------------------------------------------------------------
111 // BinMemInputStream: Stream management methods
112 // ---------------------------------------------------------------------------
113 inline void BinMemInputStream::reset()
114 {
115 fCurIndex = 0;
116 }
117
118
119 // ---------------------------------------------------------------------------
120 // BinMemInputStream: Implementation of the input stream interface
121 // ---------------------------------------------------------------------------
122 inline XMLFilePos BinMemInputStream::curPos() const
123 {
124 return fCurIndex;
125 }
126
127 inline XMLSize_t BinMemInputStream::getSize() const
128 {
129 return fCapacity;
130 }
131
132 XERCES_CPP_NAMESPACE_END
133
134 #endif