From 1136b8fcdc59da033bb073795fe0d7c99732cbeb Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Wed, 29 Oct 2014 23:42:53 -0400 Subject: [PATCH] CLI - Implemented ::isIDSequence. --- src/CLI.cpp | 36 ++++++++++++++++++++++++++++++++++++ src/CLI.h | 1 + 2 files changed, 37 insertions(+) diff --git a/src/CLI.cpp b/src/CLI.cpp index 1d540ba4b..56e18946a 100644 --- a/src/CLI.cpp +++ b/src/CLI.cpp @@ -485,6 +485,7 @@ void CLI::addArg (const std::string& arg) isConfigOverride (arg) || isUUIDList (arg) || isUUID (arg) || + isIDSequence (arg) || isID (arg) || isPattern (arg) || isSubstitution (arg)) @@ -1741,6 +1742,41 @@ bool CLI::isUUID (const std::string& raw) const return false; } +//////////////////////////////////////////////////////////////////////////////// +bool CLI::isIDSequence (const std::string& raw) const +{ + if (raw.find_first_not_of ("0123456789,-") == std::string::npos) + { + // Split the ID list into elements. + std::vector elements; + split (elements, raw, ','); + + std::vector ::iterator e; + for (e = elements.begin (); e != elements.end (); ++e) + { + // Split the ID range into min/max. + std::vector terms; + split (terms, *e, '-'); + + if (terms.size () == 1 && + ! isID (terms[0])) + return false; + + else if (terms.size () == 2 && + (! isID (terms[0]) || + ! isID (terms[1]))) + return false; + + else if (terms.size () > 2) + return false; + } + + return true; + } + + return false; +} + //////////////////////////////////////////////////////////////////////////////// bool CLI::isID (const std::string& raw) const { diff --git a/src/CLI.h b/src/CLI.h index 077b1534e..9ac5d777a 100644 --- a/src/CLI.h +++ b/src/CLI.h @@ -102,6 +102,7 @@ private: bool isConfigOverride (const std::string&) const; bool isUUIDList (const std::string&) const; bool isUUID (const std::string&) const; + bool isIDSequence (const std::string&) const; bool isID (const std::string&) const; bool isPattern (const std::string&) const; bool isSubstitution (const std::string&) const;