summaryrefslogtreecommitdiff
path: root/Source/cmSourceGroup.cxx
diff options
context:
space:
mode:
authorAnas Nashif <anas.nashif@intel.com>2012-10-30 15:39:57 -0700
committerAnas Nashif <anas.nashif@intel.com>2012-10-30 15:39:57 -0700
commit035c7fabc3b82cbc9a346c11abe2e9462b4c0379 (patch)
tree7e40f5a790eae329a8c5d3e59f046451767956ff /Source/cmSourceGroup.cxx
downloadcmake-035c7fabc3b82cbc9a346c11abe2e9462b4c0379.tar.gz
cmake-035c7fabc3b82cbc9a346c11abe2e9462b4c0379.tar.bz2
cmake-035c7fabc3b82cbc9a346c11abe2e9462b4c0379.zip
Imported Upstream version 2.8.9upstream/2.8.9
Diffstat (limited to 'Source/cmSourceGroup.cxx')
-rw-r--r--Source/cmSourceGroup.cxx204
1 files changed, 204 insertions, 0 deletions
diff --git a/Source/cmSourceGroup.cxx b/Source/cmSourceGroup.cxx
new file mode 100644
index 000000000..2b34f2bfc
--- /dev/null
+++ b/Source/cmSourceGroup.cxx
@@ -0,0 +1,204 @@
+/*============================================================================
+ CMake - Cross Platform Makefile Generator
+ Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
+
+ Distributed under the OSI-approved BSD License (the "License");
+ see accompanying file Copyright.txt for details.
+
+ This software is distributed WITHOUT ANY WARRANTY; without even the
+ implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the License for more information.
+============================================================================*/
+#include "cmSourceGroup.h"
+
+class cmSourceGroupInternals
+{
+public:
+ std::vector<cmSourceGroup> GroupChildren;
+};
+
+//----------------------------------------------------------------------------
+cmSourceGroup::cmSourceGroup(const char* name, const char* regex,
+ const char* parentName): Name(name)
+{
+ this->Internal = new cmSourceGroupInternals;
+ this->SetGroupRegex(regex);
+ if(parentName)
+ {
+ this->FullName = parentName;
+ this->FullName += "\\";
+ }
+ this->FullName += this->Name;
+}
+
+//----------------------------------------------------------------------------
+cmSourceGroup::~cmSourceGroup()
+{
+ delete this->Internal;
+}
+
+//----------------------------------------------------------------------------
+cmSourceGroup::cmSourceGroup(cmSourceGroup const& r)
+{
+ this->Name = r.Name;
+ this->FullName = r.FullName;
+ this->GroupRegex = r.GroupRegex;
+ this->GroupFiles = r.GroupFiles;
+ this->SourceFiles = r.SourceFiles;
+ this->Internal = new cmSourceGroupInternals(*r.Internal);
+}
+
+//----------------------------------------------------------------------------
+cmSourceGroup& cmSourceGroup::operator=(cmSourceGroup const& r)
+{
+ this->Name = r.Name;
+ this->GroupRegex = r.GroupRegex;
+ this->GroupFiles = r.GroupFiles;
+ this->SourceFiles = r.SourceFiles;
+ *(this->Internal) = *(r.Internal);
+ return *this;
+}
+
+//----------------------------------------------------------------------------
+void cmSourceGroup::SetGroupRegex(const char* regex)
+{
+ if(regex)
+ {
+ this->GroupRegex.compile(regex);
+ }
+ else
+ {
+ this->GroupRegex.compile("^$");
+ }
+}
+
+//----------------------------------------------------------------------------
+void cmSourceGroup::AddGroupFile(const char* name)
+{
+ this->GroupFiles.insert(name);
+}
+
+//----------------------------------------------------------------------------
+const char* cmSourceGroup::GetName() const
+{
+ return this->Name.c_str();
+}
+
+//----------------------------------------------------------------------------
+const char* cmSourceGroup::GetFullName() const
+{
+ return this->FullName.c_str();
+}
+
+//----------------------------------------------------------------------------
+bool cmSourceGroup::MatchesRegex(const char* name)
+{
+ return this->GroupRegex.find(name);
+}
+
+//----------------------------------------------------------------------------
+bool cmSourceGroup::MatchesFiles(const char* name)
+{
+ std::set<cmStdString>::const_iterator i = this->GroupFiles.find(name);
+ if(i != this->GroupFiles.end())
+ {
+ return true;
+ }
+ return false;
+}
+
+//----------------------------------------------------------------------------
+void cmSourceGroup::AssignSource(const cmSourceFile* sf)
+{
+ this->SourceFiles.push_back(sf);
+}
+
+//----------------------------------------------------------------------------
+const std::vector<const cmSourceFile*>& cmSourceGroup::GetSourceFiles() const
+{
+ return this->SourceFiles;
+}
+
+//----------------------------------------------------------------------------
+void cmSourceGroup::AddChild(cmSourceGroup child)
+{
+ this->Internal->GroupChildren.push_back(child);
+}
+
+//----------------------------------------------------------------------------
+cmSourceGroup *cmSourceGroup::lookupChild(const char* name)
+{
+ // initializing iterators
+ std::vector<cmSourceGroup>::iterator iter =
+ this->Internal->GroupChildren.begin();
+ std::vector<cmSourceGroup>::iterator end =
+ this->Internal->GroupChildren.end();
+
+ // st
+ for(;iter!=end; ++iter)
+ {
+ std::string sgName = iter->GetName();
+
+ // look if descenened is the one were looking for
+ if(sgName == name)
+ {
+ return &(*iter); // if it so return it
+ }
+ }
+
+ // if no child with this name was found return NULL
+ return NULL;
+}
+
+cmSourceGroup *cmSourceGroup::MatchChildrenFiles(const char *name)
+{
+ // initializing iterators
+ std::vector<cmSourceGroup>::iterator iter =
+ this->Internal->GroupChildren.begin();
+ std::vector<cmSourceGroup>::iterator end =
+ this->Internal->GroupChildren.end();
+
+ if(this->MatchesFiles(name))
+ {
+ return this;
+ }
+ for(;iter!=end;++iter)
+ {
+ cmSourceGroup *result = iter->MatchChildrenFiles(name);
+ if(result)
+ {
+ return result;
+ }
+ }
+ return 0;
+}
+
+
+cmSourceGroup *cmSourceGroup::MatchChildrenRegex(const char *name)
+{
+ // initializing iterators
+ std::vector<cmSourceGroup>::iterator iter =
+ this->Internal->GroupChildren.begin();
+ std::vector<cmSourceGroup>::iterator end =
+ this->Internal->GroupChildren.end();
+
+ if(this->MatchesRegex(name))
+ {
+ return this;
+ }
+ for(;iter!=end; ++iter)
+ {
+ cmSourceGroup *result = iter->MatchChildrenRegex(name);
+ if(result)
+ {
+ return result;
+ }
+ }
+ return 0;
+}
+
+std::vector<cmSourceGroup> const&
+cmSourceGroup::GetGroupChildren() const
+{
+ return this->Internal->GroupChildren;
+}