Merge topic 'cmarray-templates'
d169b1f
Genex: Use cmArraySize for targetPolicyWhitelist86d5d80
Genex: Remove use of TransitiveWhitelistCompare73d7705
Add some templates for cleaner array iteration.
This commit is contained in:
commit
078530b448
|
@ -703,17 +703,6 @@ std::string getLinkedTargetsContent(const std::vector<std::string> &libraries,
|
|||
return linkedTargetsContent;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
struct TransitiveWhitelistCompare
|
||||
{
|
||||
explicit TransitiveWhitelistCompare(const std::string &needle)
|
||||
: Needle(needle) {}
|
||||
bool operator() (const char *item)
|
||||
{ return strcmp(item, this->Needle.c_str()) == 0; }
|
||||
private:
|
||||
std::string Needle;
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
static const struct TargetPropertyNode : public cmGeneratorExpressionNode
|
||||
{
|
||||
|
@ -864,8 +853,7 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
|
|||
return std::string();
|
||||
case cmGeneratorExpressionDAGChecker::ALREADY_SEEN:
|
||||
for (size_t i = 1;
|
||||
i < (sizeof(targetPropertyTransitiveWhitelist) /
|
||||
sizeof(*targetPropertyTransitiveWhitelist));
|
||||
i < cmArraySize(targetPropertyTransitiveWhitelist);
|
||||
++i)
|
||||
{
|
||||
if (targetPropertyTransitiveWhitelist[i] == propertyName)
|
||||
|
@ -928,12 +916,13 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
|
|||
|
||||
cmTarget *headTarget = context->HeadTarget ? context->HeadTarget : target;
|
||||
|
||||
const char **transBegin = targetPropertyTransitiveWhitelist + 1;
|
||||
const char **transEnd = targetPropertyTransitiveWhitelist
|
||||
+ (sizeof(targetPropertyTransitiveWhitelist) /
|
||||
sizeof(*targetPropertyTransitiveWhitelist));
|
||||
const char * const *transBegin =
|
||||
cmArrayBegin(targetPropertyTransitiveWhitelist) + 1;
|
||||
const char * const *transEnd =
|
||||
cmArrayEnd(targetPropertyTransitiveWhitelist);
|
||||
|
||||
if (std::find_if(transBegin, transEnd,
|
||||
TransitiveWhitelistCompare(propertyName)) != transEnd)
|
||||
cmStrCmp(propertyName)) != transEnd)
|
||||
{
|
||||
|
||||
std::vector<std::string> libs;
|
||||
|
@ -949,7 +938,7 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
|
|||
}
|
||||
}
|
||||
else if (std::find_if(transBegin, transEnd,
|
||||
TransitiveWhitelistCompare(interfacePropertyName)) != transEnd)
|
||||
cmStrCmp(interfacePropertyName)) != transEnd)
|
||||
{
|
||||
const cmTarget::LinkImplementation *impl = target->GetLinkImplementation(
|
||||
context->Config,
|
||||
|
@ -996,8 +985,7 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
|
|||
}
|
||||
|
||||
for (size_t i = 1;
|
||||
i < (sizeof(targetPropertyTransitiveWhitelist) /
|
||||
sizeof(*targetPropertyTransitiveWhitelist));
|
||||
i < cmArraySize(targetPropertyTransitiveWhitelist);
|
||||
++i)
|
||||
{
|
||||
if (targetPropertyTransitiveWhitelist[i] == interfacePropertyName)
|
||||
|
@ -1113,10 +1101,7 @@ static const struct TargetPolicyNode : public cmGeneratorExpressionNode
|
|||
|
||||
context->HadContextSensitiveCondition = true;
|
||||
|
||||
for (size_t i = 1;
|
||||
i < (sizeof(targetPolicyWhitelist) /
|
||||
sizeof(*targetPolicyWhitelist));
|
||||
++i)
|
||||
for (size_t i = 1; i < cmArraySize(targetPolicyWhitelist); ++i)
|
||||
{
|
||||
const char *policy = targetPolicyWhitelist[i];
|
||||
if (parameters.front() == policy)
|
||||
|
|
|
@ -377,6 +377,34 @@ static thisClass* SafeDownCast(cmObject *c) \
|
|||
return 0;\
|
||||
}
|
||||
|
||||
#if defined(_MSC_VER) && _MSC_VER < 1300
|
||||
|
||||
#define cmArrayBegin(a) a
|
||||
#define cmArraySize(a) (sizeof(a)/sizeof(*a))
|
||||
#define cmArrayEnd(a) a + cmArraySize(a)
|
||||
|
||||
#else
|
||||
|
||||
template<typename T, size_t N>
|
||||
const T* cmArrayBegin(const T (&a)[N]) { return a; }
|
||||
template<typename T, size_t N>
|
||||
const T* cmArrayEnd(const T (&a)[N]) { return a + N; }
|
||||
template<typename T, size_t N>
|
||||
size_t cmArraySize(const T (&)[N]) { return N; }
|
||||
|
||||
#endif
|
||||
|
||||
struct cmStrCmp {
|
||||
cmStrCmp(const char *test) : m_test(test) {}
|
||||
cmStrCmp(std::string &test) : m_test(test.c_str()) {}
|
||||
|
||||
bool operator()(const char * input)
|
||||
{
|
||||
return strcmp(input, m_test) == 0;
|
||||
}
|
||||
|
||||
private:
|
||||
const char *m_test;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue