// 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) {} int Vread(void *ptr, size_t size, size_t nmemb); int Vwrite(const void *ptr, size_t size, size_t nmemb) {str.append((const char*)ptr,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,strlen(s)); return 0;} int Vgetc(); char *Vgets(char *s, int size); int Vprintf(const char *format, va_list args); int Vseek(long offset, int whence); int Vtell() {return pos;} void Vrewind() {pos=0;} 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):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