From 2120ce4fcd935d74442ad7f63c06c52287665f35 Mon Sep 17 00:00:00 2001 From: Alexander Neundorf Date: Thu, 23 Aug 2007 16:13:15 -0400 Subject: ENH: add support for a default value, fix case when there is no item except the own group Alex --- Source/cmCommandArgumentsHelper.cxx | 7 +++++-- Source/cmCommandArgumentsHelper.h | 6 +++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Source/cmCommandArgumentsHelper.cxx b/Source/cmCommandArgumentsHelper.cxx index 3fb5642..2c311e1 100644 --- a/Source/cmCommandArgumentsHelper.cxx +++ b/Source/cmCommandArgumentsHelper.cxx @@ -23,6 +23,7 @@ cmCommandArgument::cmCommandArgument(cmCommandArgumentsHelper* args, :Key(key) ,Group(group) ,WasActive(false) +,ArgumentsBeforeEmpty(true) ,CurrentIndex(0) { if (args!=0) @@ -45,6 +46,7 @@ void cmCommandArgument::Reset() void cmCommandArgument::Follows(const cmCommandArgument* arg) { + this->ArgumentsBeforeEmpty = false; this->ArgumentsBefore.insert(arg); } @@ -52,6 +54,7 @@ void cmCommandArgument::FollowsGroup(const cmCommandArgumentGroup* group) { if (group!=0) { + this->ArgumentsBeforeEmpty = false; for(std::vector::const_iterator argIt= group->ContainedArguments.begin(); argIt != group->ContainedArguments.end(); @@ -64,7 +67,7 @@ void cmCommandArgument::FollowsGroup(const cmCommandArgumentGroup* group) bool cmCommandArgument::MayFollow(const cmCommandArgument* current) const { - if (this->ArgumentsBefore.empty()) + if (this->ArgumentsBeforeEmpty) { return true; } @@ -180,7 +183,7 @@ bool cmCAString::DoConsume(const std::string& arg, unsigned int index) void cmCAString::DoReset() { - this->String = ""; + this->String = this->DefaultString; } cmCAEnabler::cmCAEnabler(cmCommandArgumentsHelper* args, diff --git a/Source/cmCommandArgumentsHelper.h b/Source/cmCommandArgumentsHelper.h index 1d7ba61..e22d838 100644 --- a/Source/cmCommandArgumentsHelper.h +++ b/Source/cmCommandArgumentsHelper.h @@ -87,6 +87,7 @@ class cmCommandArgument std::set ArgumentsBefore; cmCommandArgumentGroup* Group; bool WasActive; + bool ArgumentsBeforeEmpty; unsigned int CurrentIndex; virtual bool DoConsume(const std::string& arg, unsigned int index) = 0; @@ -128,8 +129,12 @@ class cmCAString : public cmCommandArgument /// Return the string const std::string& GetString() const {return this->String;} + const char* GetCString() const {return this->String.c_str();} + void SetDefaultString(const char* text) + {this->DefaultString = (text ? text : "");} private: std::string String; + std::string DefaultString; unsigned int DataStart; virtual bool DoConsume(const std::string& arg, unsigned int index); virtual void DoReset(); @@ -197,7 +202,6 @@ class cmCommandArgumentsHelper /// Parse the argument list void Parse(const std::vector* args, std::vector* unconsumedArgs); - /// Add an argument. void AddArgument(cmCommandArgument* arg); private: -- cgit v0.12