DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Mercurial (fbecf6c8a86f)

VCS Links

Line Code
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 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is [Open Source Virtual Machine.].
*
* The Initial Developer of the Original Code is
* Adobe System Incorporated.
* Portions created by the Initial Developer are Copyright (C) 2004-2006
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*   Adobe AS3 Team
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */

#ifndef __avmshell_File__
#define __avmshell_File__

#include "avmshell.h"

namespace avmshell
{
	/**
	* Abstract base class for performing platform-specific file operations
	* This class needs to be derived and its methods implemented by platform to enable the shell to perform file I/O
	*/
	class File
	{
	public:
		/**
		*  An enum defining the open modes for a file
		*/
		typedef enum 
		{
			OPEN_READ = 0,
			OPEN_WRITE,
			OPEN_APPEND,
			OPEN_READ_BINARY,
			OPEN_WRITE_BINARY,
			OPEN_APPEND_BINARY
		}OpenAttribute;

		/**
		* Virtual Destructor
		*/
		virtual ~File() {}

		/**
		* Method to open a file on platform's file system
		* The implementation should open the file with the given name and attributes for open mode
		* @param filename represents the path and name of the file to be opened.  filename is UTF-8
		* @param flags one of the values from OpenAttribute enumeration indicating the  mode of file
		* @return true if file was opened successfully, false otherwise
		* @see enum OpenAttribute
		*/
		virtual bool open(const char* filename, OpenAttribute flags) = 0;

		/**
		* Method to close an opened file.
		* If the file was not opened this method should do nothing
		* @return none
		*/
		virtual void close() = 0;

		/**
		* Method to read a chunk of data from the file
		* This method can return 0 in event of a read error or if the file marker was at end-of-file.
		* So a return value of zero should not be treated as an error condition by default.
		* Instead method isEOF() should be used to detect a end-of-file .
		* @param buffer buffer to read the data into
		* @param bytesToRead number of bytes to read
		* @return number of bytes actually read.  0 or less than bytesToRead in case of error or end-of-file was reached
		*/
		virtual size_t read(void* buffer, size_t bytesToRead) = 0;

		/**
		* Method to write a chunk of data to the file
		* @param buffer buffer containing the data to write to file
		* @param bytesToWrite number of bytes to write from the buffer
		* @return number of bytes actually written.  If this value is less than bytesToWrite then that indicates an error
		*/
		virtual size_t write(const void* buffer, size_t bytesToWrite) = 0;

		/**
		* Method to get the current position of the file head
		* @return returns the current byte position of the file head, -1 if an error occurred
		*/
		virtual int64_t getPosition() const = 0;

		/**
		* Method to move the file head to a certain position
		* @param pos number indicating the byte position in file to move the file head to
		* @return returns true if the operation was successful, false if an error occurred
		*/
		virtual bool setPosition(int64_t pos) = 0;

		/**
		* Method to get the size of file
		* @return size of the file, -1 if an error occurred
		*/
		virtual int64_t size() const = 0;

		/**
		* Method to check if the end-of-file has reached
		* @return true if end if reached, false otherwise
		*/
		virtual bool isEOF() const = 0;
	};
}

#endif /* __avmshell_File__ */