Skip to content

Commit 09eeea4

Browse files
committed
StdCharBufStream
1 parent 3960aa4 commit 09eeea4

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

simplecpp.cpp

+41
Original file line numberDiff line numberDiff line change
@@ -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+
380414
class FileStream : public simplecpp::TokenList::Stream {
381415
public:
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+
445486
simplecpp::TokenList::TokenList(const std::string &filename, std::vector<std::string> &filenames, OutputList *outputList)
446487
: frontToken(nullptr), backToken(nullptr), files(filenames)
447488
{

simplecpp.h

+2
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,8 @@ namespace simplecpp {
198198
explicit TokenList(std::vector<std::string> &filenames);
199199
/** generates a token list from the given std::istream parameter */
200200
TokenList(std::istream &istr, std::vector<std::string> &filenames, const std::string &filename=std::string(), OutputList *outputList = nullptr);
201+
/** generates a token list from the given char buffer parameter */
202+
TokenList(const char* str, int size, std::vector<std::string> &filenames, const std::string &filename=std::string(), OutputList *outputList = nullptr);
201203
/** generates a token list from the given filename parameter */
202204
TokenList(const std::string &filename, std::vector<std::string> &filenames, OutputList *outputList = nullptr);
203205
TokenList(const TokenList &other);

0 commit comments

Comments
 (0)