Source code drop for the Actionscript virtual machine in the Adobe Flash Player for December 2013
103 lines
3.7 KiB
C++
103 lines
3.7 KiB
C++
/* -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4 -*- */
|
|
/* vi: set ts=4 sw=4 expandtab: (add to ~/.vimrc: set modeline modelines=5) */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#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__ */
|