FileIO

#ifndef FILEIO_H
#define FILEIO_H

#include
#include

#include "bitfield.h"

class FileIO
: public BitField
{
public:
FileIO(char* fileName, unsigned long flags = FileIO::isVirtual);
~FileIO();

/// Inline get functions
inline char* getData() {return this->dataPointer;}
inline unsigned long getDataLength() {return this->dataLength;}

inline char* getFileName() {return this->fileName;}

inline unsigned long getCursorPosition() {return this->cursorPosition;}
inline bool isCursorAtEnd() {return (this->cursorPosition == this->dataLength);}

/// Inline set functions
inline void setCursorPosition(unsigned long cursorPosition) {this->cursorPosition = cursorPosition;}
inline void nextCursorPosition() {this->cursorPosition++;}
inline void resetCursor() {this->cursorPosition = 0;}

inline void begin() {if(!getFlag(isLoaded)) load();}
inline void end() {if(getFlag(isVirtual)) unload();}

void load();
void unload();
void save();
void streamDataIn(unsigned char* inputPointer, unsigned long dataLength);
void streamDataOut(unsigned char* outputPointer, unsigned long dataLength);

char* getDataUntil(char token); /// Get the data until a token is reached
char* getDataUntil(char* tokenList, int numTokens); /// Get the data until a token is reached

static char* trimString(char* inputPointer); /// Trim spaces and tabs off string
static char* scanString(char* inputPointer); /// Scan data for float
static float scanFloat(char* inputPointer); /// Scan data for float
static unsigned short scanUnsignedShort(char* inputPointer); /// Scan data for short
static unsigned long scanUnsignedLong(char* inputPointer); /// Scan data for long
static bool compareString(char* string1, char* string2);/// Compare 2 strings to see if they are the same

static void tokenize(char* inputPointer, char** outputPointerArray, char* midTokenList=" \t",int midTokenCount=2, char* endTokenList="\n\0", int endTokenCount=2); /// Scan data and tokenize

enum Flags
{
isDirty = 0x00000001,
isVirtual = 0x00000002,
isLoaded = 0x00000004,
doesExist = 0x00000008,
saveOnUnload = 0x00000010
};

protected:
private:
char* dataPointer;
unsigned long cursorPosition;
unsigned long dataLength;
char *fileName;

static bool isToken(char letter, char* tokenList, int numTokens); ///Check character to see if its a token

};

#endif // FILEIO_H