@@ -377,6 +377,40 @@ class StdIStream : public simplecpp::TokenList::Stream {
377377 std::istream &istr;
378378};
379379
380+ class StdCharBufStream : public simplecpp ::TokenList::Stream {
381+ public:
382+ // cppcheck-suppress uninitDerivedMemberVar - we call Stream::init() to initialize the private members
383+ EXPLICIT StdCharBufStream (const char * str, int size)
384+ : str(str)
385+ , size(size)
386+ , pos(-1 )
387+ {
388+ init ();
389+ }
390+
391+ virtual int get () OVERRIDE {
392+ if (pos >= size)
393+ return EOF;
394+ return static_cast <unsigned char >(str[++pos]);
395+ }
396+ virtual int peek () OVERRIDE {
397+ if ((pos+1 ) >= size)
398+ return EOF;
399+ return static_cast <unsigned char >(str[pos+1 ]);
400+ }
401+ virtual void unget () OVERRIDE {
402+ --pos;
403+ }
404+ virtual bool good () OVERRIDE {
405+ return pos < size;
406+ }
407+
408+ private:
409+ const char *str;
410+ const int size;
411+ int pos;
412+ };
413+
380414class FileStream : public simplecpp ::TokenList::Stream {
381415public:
382416 // cppcheck-suppress uninitDerivedMemberVar - we call Stream::init() to initialize the private members
@@ -442,6 +476,13 @@ simplecpp::TokenList::TokenList(std::istream &istr, std::vector<std::string> &fi
442476 readfile (stream,filename,outputList);
443477}
444478
479+ simplecpp::TokenList::TokenList (const char * str, int size, std::vector<std::string> &filenames, const std::string &filename, OutputList *outputList)
480+ : frontToken(nullptr ), backToken(nullptr ), files(filenames)
481+ {
482+ StdCharBufStream stream (str, size);
483+ readfile (stream,filename,outputList);
484+ }
485+
445486simplecpp::TokenList::TokenList (const std::string &filename, std::vector<std::string> &filenames, OutputList *outputList)
446487 : frontToken(nullptr ), backToken(nullptr ), files(filenames)
447488{
0 commit comments