From 2c683102be85b0ee9c03c85ddcf5d7fd0f004ab7 Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Fri, 10 Oct 2014 18:33:55 +0200 Subject: [PATCH] Added next_token() function (strtok() replacement) --- kernel/yosys.cc | 19 ++++++++++++++++++- kernel/yosys.h | 2 +- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/kernel/yosys.cc b/kernel/yosys.cc index 7272c073b..96fe5446d 100644 --- a/kernel/yosys.cc +++ b/kernel/yosys.cc @@ -83,6 +83,23 @@ std::string vstringf(const char *fmt, va_list ap) return string; } +std::string next_token(std::string &text, const char *sep) +{ + size_t pos_begin = text.find_first_not_of(sep); + + if (pos_begin == string::npos) + pos_begin = text.size(); + + size_t pos_end = text.find_first_of(sep, pos_begin); + + if (pos_end == string::npos) + pos_end = text.size(); + + std::string token = text.substr(pos_begin, pos_end-pos_begin); + text = text.substr(pos_end); + return token; +} + // this is very similar to fnmatch(). the exact rules used by this // function are: // @@ -94,7 +111,7 @@ std::string vstringf(const char *fmt, va_list ap) // a backslash may be used to escape the next characters in the // pattern. each special character can also simply match itself. // -static bool patmatch(const char *pattern, const char *string) +bool patmatch(const char *pattern, const char *string) { if (*pattern == 0) return *string == 0; diff --git a/kernel/yosys.h b/kernel/yosys.h index a796dd09f..919e3bb98 100644 --- a/kernel/yosys.h +++ b/kernel/yosys.h @@ -84,7 +84,7 @@ namespace RTLIL { std::string stringf(const char *fmt, ...) __attribute__ ((format (printf, 1, 2))); std::string vstringf(const char *fmt, va_list ap); - +std::string next_token(std::string &text, const char *sep); bool patmatch(const char *pattern, const char *string); template int GetSize(const T &obj) { return obj.size(); } -- 2.30.2