COMP: Fix build with concept checking of STL.

- Fix cmSourceGroup to not use std::vector with an incomplete type.
This commit is contained in:
Brad King 2008-05-16 16:56:41 -04:00
parent f43748e1dd
commit 10db44a81d
4 changed files with 59 additions and 14 deletions

View File

@ -532,7 +532,7 @@ void cmLocalVisualStudio6Generator
} }
} }
std::vector<cmSourceGroup> children = sg->GetGroupChildren(); std::vector<cmSourceGroup> const& children = sg->GetGroupChildren();
for(unsigned int i=0;i<children.size();++i) for(unsigned int i=0;i<children.size();++i)
{ {

View File

@ -1473,7 +1473,7 @@ void cmLocalVisualStudio7Generator
} }
} }
std::vector<cmSourceGroup> children = sg->GetGroupChildren(); std::vector<cmSourceGroup> const& children = sg->GetGroupChildren();
for(unsigned int i=0;i<children.size();++i) for(unsigned int i=0;i<children.size();++i)
{ {

View File

@ -16,12 +16,46 @@
=========================================================================*/ =========================================================================*/
#include "cmSourceGroup.h" #include "cmSourceGroup.h"
class cmSourceGroupInternals
{
public:
std::vector<cmSourceGroup> GroupChildren;
};
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
cmSourceGroup::cmSourceGroup(const char* name, const char* regex): Name(name) cmSourceGroup::cmSourceGroup(const char* name, const char* regex): Name(name)
{ {
this->Internal = new cmSourceGroupInternals;
this->SetGroupRegex(regex); this->SetGroupRegex(regex);
} }
//----------------------------------------------------------------------------
cmSourceGroup::~cmSourceGroup()
{
delete this->Internal;
}
//----------------------------------------------------------------------------
cmSourceGroup::cmSourceGroup(cmSourceGroup const& r)
{
this->Name = r.Name;
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) void cmSourceGroup::SetGroupRegex(const char* regex)
{ {
@ -85,15 +119,17 @@ std::vector<const cmSourceFile*>& cmSourceGroup::GetSourceFiles()
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
void cmSourceGroup::AddChild(cmSourceGroup child) void cmSourceGroup::AddChild(cmSourceGroup child)
{ {
this->GroupChildren.push_back(child); this->Internal->GroupChildren.push_back(child);
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
cmSourceGroup *cmSourceGroup::lookupChild(const char* name) cmSourceGroup *cmSourceGroup::lookupChild(const char* name)
{ {
// initializing iterators // initializing iterators
std::vector<cmSourceGroup>::iterator iter = this->GroupChildren.begin(); std::vector<cmSourceGroup>::iterator iter =
std::vector<cmSourceGroup>::iterator end = this->GroupChildren.end(); this->Internal->GroupChildren.begin();
std::vector<cmSourceGroup>::iterator end =
this->Internal->GroupChildren.end();
// st // st
for(;iter!=end; ++iter) for(;iter!=end; ++iter)
@ -114,8 +150,10 @@ cmSourceGroup *cmSourceGroup::lookupChild(const char* name)
cmSourceGroup *cmSourceGroup::MatchChildrenFiles(const char *name) cmSourceGroup *cmSourceGroup::MatchChildrenFiles(const char *name)
{ {
// initializing iterators // initializing iterators
std::vector<cmSourceGroup>::iterator iter = this->GroupChildren.begin(); std::vector<cmSourceGroup>::iterator iter =
std::vector<cmSourceGroup>::iterator end = this->GroupChildren.end(); this->Internal->GroupChildren.begin();
std::vector<cmSourceGroup>::iterator end =
this->Internal->GroupChildren.end();
if(this->MatchesFiles(name)) if(this->MatchesFiles(name))
{ {
@ -136,8 +174,10 @@ cmSourceGroup *cmSourceGroup::MatchChildrenFiles(const char *name)
cmSourceGroup *cmSourceGroup::MatchChildrenRegex(const char *name) cmSourceGroup *cmSourceGroup::MatchChildrenRegex(const char *name)
{ {
// initializing iterators // initializing iterators
std::vector<cmSourceGroup>::iterator iter = this->GroupChildren.begin(); std::vector<cmSourceGroup>::iterator iter =
std::vector<cmSourceGroup>::iterator end = this->GroupChildren.end(); this->Internal->GroupChildren.begin();
std::vector<cmSourceGroup>::iterator end =
this->Internal->GroupChildren.end();
if(this->MatchesRegex(name)) if(this->MatchesRegex(name))
{ {
@ -154,7 +194,8 @@ cmSourceGroup *cmSourceGroup::MatchChildrenRegex(const char *name)
return 0; return 0;
} }
std::vector<cmSourceGroup> cmSourceGroup::GetGroupChildren() const std::vector<cmSourceGroup> const&
cmSourceGroup::GetGroupChildren() const
{ {
return this->GroupChildren; return this->Internal->GroupChildren;
} }

View File

@ -22,6 +22,8 @@
class cmSourceFile; class cmSourceFile;
class cmSourceGroupInternals;
/** \class cmSourceGroup /** \class cmSourceGroup
* \brief Hold a group of sources as specified by a SOURCE_GROUP command. * \brief Hold a group of sources as specified by a SOURCE_GROUP command.
* *
@ -36,7 +38,9 @@ class cmSourceGroup
{ {
public: public:
cmSourceGroup(const char* name, const char* regex); cmSourceGroup(const char* name, const char* regex);
~cmSourceGroup() {} cmSourceGroup(cmSourceGroup const& r);
~cmSourceGroup();
cmSourceGroup& operator=(cmSourceGroup const&);
/** /**
* Set the regular expression for this group. * Set the regular expression for this group.
@ -97,7 +101,7 @@ public:
const std::vector<const cmSourceFile*>& GetSourceFiles() const; const std::vector<const cmSourceFile*>& GetSourceFiles() const;
std::vector<const cmSourceFile*>& GetSourceFiles(); std::vector<const cmSourceFile*>& GetSourceFiles();
std::vector<cmSourceGroup> GetGroupChildren() const; std::vector<cmSourceGroup> const& GetGroupChildren() const;
private: private:
/** /**
* The name of the source group. * The name of the source group.
@ -120,7 +124,7 @@ private:
*/ */
std::vector<const cmSourceFile*> SourceFiles; std::vector<const cmSourceFile*> SourceFiles;
std::vector<cmSourceGroup> GroupChildren; cmSourceGroupInternals* Internal;
}; };
#endif #endif