// This file is a part of the Framsticks GDK. // Copyright (C) 1999-2014 Maciej Komosinski and Szymon Ulatowski. See LICENSE.txt for details. // Refer to http://www.framsticks.com/ for further information. #ifndef _STRINGFILE_H_ #define _STRINGFILE_H_ #include "virtfile.h" #include class StringFILE : public VirtFILE { protected: SString& str; long pos; public: StringFILE(SString& s) :str(s), pos(0) {} size_t Vread(void *ptr, size_t size, size_t nmemb); size_t Vwrite(const void *ptr, size_t size, size_t nmemb) { str.append((const char*)ptr, (int)(size*nmemb)); return size*nmemb; } int Veof() { return pos >= str.len(); } int Vputc(int c) { str += (char)c; return c; } int Vputs(const char *s) { str.append(s, (int)strlen(s)); return 0; } int Vgetc(); char *Vgets(char *s, int size); int Vseek(long offset, int whence); long Vtell() { return pos; } int Vflush() { return 0; } }; /** this version owns the string object */ class StringFILE2 : public StringFILE { SString string; public: StringFILE2(const SString& s) :StringFILE(string), string(s) {} StringFILE2() :StringFILE(string) {} const SString& getString() { return string; } }; class StringFileSystem : public VirtFileSystem { public: VirtFileSystem *chain; StringFileSystem(VirtFileSystem *_chain = NULL) :chain(_chain) {} VirtFILE *Vfopen(const char* path, const char*mode); int Vfexists(const char* path); VirtDIR *Vopendir(const char* path); static const char PREFIX[]; static bool isStringPath(const char* path); }; #endif