diff options
author | Chuck Atkins <chuck.atkins@kitware.com> | 2014-10-17 17:07:26 (GMT) |
---|---|---|
committer | Chuck Atkins <chuck.atkins@kitware.com> | 2014-11-12 13:21:46 (GMT) |
commit | 1abd7cd930022ba045c3c0cd34406cbe19db84d3 (patch) | |
tree | 9514de06c2c7c9a072991560597139357510063d /Source/cmPathLabel.cxx | |
parent | 2a9ac4bd83f7247539616545ef0772fea1f4a1fc (diff) | |
download | CMake-1abd7cd930022ba045c3c0cd34406cbe19db84d3.zip CMake-1abd7cd930022ba045c3c0cd34406cbe19db84d3.tar.gz CMake-1abd7cd930022ba045c3c0cd34406cbe19db84d3.tar.bz2 |
Use containers of labeled search paths instead of individual members
Manage classes of search paths in labeled containers. This removes the
need to have a seperate member variable for each type of search path, but
also allows path types to be grouped togethor in various different ways
and manipulated as subsets of the full set of search paths.
Diffstat (limited to 'Source/cmPathLabel.cxx')
-rw-r--r-- | Source/cmPathLabel.cxx | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/Source/cmPathLabel.cxx b/Source/cmPathLabel.cxx new file mode 100644 index 0000000..67d56e1 --- /dev/null +++ b/Source/cmPathLabel.cxx @@ -0,0 +1,41 @@ +/*============================================================================ + 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 "cmPathLabel.h" + +//---------------------------------------------------------------------------- +cmPathLabel::cmPathLabel(const std::string& label) +: Label(label), Hash(0) +{ + // Use a Jenkins one-at-a-time hash with under/over-flow protection + for(size_t i = 0; i < this->Label.size(); ++i) + { + this->Hash += this->Label[i]; + this->Hash += ((this->Hash & 0x003FFFFF) << 10); + this->Hash ^= ((this->Hash & 0xFFFFFFC0) >> 6); + } + this->Hash += ((this->Hash & 0x1FFFFFFF) << 3); + this->Hash ^= ((this->Hash & 0xFFFFF800) >> 11); + this->Hash += ((this->Hash & 0x0001FFFF) << 15); +} + +//---------------------------------------------------------------------------- +bool cmPathLabel::operator < (const cmPathLabel& l) const +{ + return this->Hash < l.Hash; +} + +//---------------------------------------------------------------------------- +bool cmPathLabel::operator == (const cmPathLabel& l) const +{ + return this->Hash == l.Hash; +} |