Browse Source

Add some templates for cleaner array iteration.

Stephen Kelly 12 years ago
parent
commit
73d7705416
1 changed files with 28 additions and 0 deletions
  1. 28 0
      Source/cmStandardIncludes.h

+ 28 - 0
Source/cmStandardIncludes.h

@@ -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