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 #ifndef _LOG4CXX_HELPERS_FILEINPUTSTREAM_H
19 #define _LOG4CXX_HELPERS_FILEINPUTSTREAM_H
20 
21 #include <log4cxx/helpers/inputstream.h>
22 #include <log4cxx/file.h>
23 #include <log4cxx/helpers/pool.h>
24 
25 
26 namespace log4cxx
27 {
28 
29 namespace helpers
30 {
31 
32 /**
33  * InputStream implemented on top of APR file IO.
34  *
35  */
36 class LOG4CXX_EXPORT FileInputStream : public InputStream
37 {
38 	private:
39 		Pool pool;
40 		apr_file_t* fileptr;
41 
42 	public:
43 		DECLARE_ABSTRACT_LOG4CXX_OBJECT(FileInputStream)
44 		BEGIN_LOG4CXX_CAST_MAP()
45 		LOG4CXX_CAST_ENTRY(FileInputStream)
46 		LOG4CXX_CAST_ENTRY_CHAIN(InputStream)
47 		END_LOG4CXX_CAST_MAP()
48 
49 		/**
50 		 * Creates a FileInputStream by opening a connection to an actual
51 		 * file, the file named by the path name name in the file system.
52 		 *
53 		 * @param filename The system-dependent file name.
54 		 */
55 		FileInputStream(const LogString& filename);
56 		FileInputStream(const logchar* filename);
57 
58 		/**
59 		 * Creates a FileInputStream by opening a connection to an actual
60 		 * file, the file named by the File object file in the file system.
61 		 *
62 		 * @param aFile The file to be opened for reading.
63 		 */
64 		FileInputStream(const File& aFile);
65 
66 		virtual ~FileInputStream();
67 
68 		/**
69 		 * Closes this file input stream and releases any system
70 		 * resources associated with the stream.
71 		 */
72 		virtual void close();
73 
74 		/**
75 		 * Reads a sequence of bytes into the given buffer.
76 		 *
77 		 * @param buf The buffer into which bytes are to be transferred.
78 		 * @return the total number of bytes read into the buffer, or -1 if there
79 		 *         is no more data because the end of the stream has been reached.
80 		 */
81 		virtual int read(ByteBuffer& buf);
82 
83 	private:
84 
85 		FileInputStream(const FileInputStream&);
86 
87 		FileInputStream& operator=(const FileInputStream&);
88 		void open(const LogString&);
89 
90 };
91 
92 LOG4CXX_PTR_DEF(FileInputStream);
93 } // namespace helpers
94 
95 }  //namespace log4cxx
96 
97 #endif //_LOG4CXX_HELPERS_FILEINPUTSTREAM_H
98