]> git.tdb.fi Git - libs/datafile.git/commitdiff
Move NeedsCollection into its own header and adjust for new Sfinae struct
authorMikko Rasa <tdb@tdb.fi>
Fri, 24 May 2019 17:04:36 +0000 (20:04 +0300)
committerMikko Rasa <tdb@tdb.fi>
Fri, 24 May 2019 17:04:36 +0000 (20:04 +0300)
source/collection.h
source/meta.h [new file with mode: 0644]

index 89e801ffa87850ebcba5b5452c03a4a15a4dbf0b..34b1260c4c42b729311964736b2efc02343c03fb 100644 (file)
@@ -2,10 +2,10 @@
 #define MSP_DATAFILE_COLLECTION_H_
 
 #include <msp/core/maputils.h>
 #define MSP_DATAFILE_COLLECTION_H_
 
 #include <msp/core/maputils.h>
-#include <msp/core/meta.h>
 #include <msp/core/refptr.h>
 #include "collectionsource.h"
 #include "loader.h"
 #include <msp/core/refptr.h>
 #include "collectionsource.h"
 #include "loader.h"
+#include "meta.h"
 
 /* XXX This file is a big mess with too many things in it.  However, the
 dependencies between those things make it difficult to split up. */
 
 /* XXX This file is a big mess with too many things in it.  However, the
 dependencies between those things make it difficult to split up. */
@@ -13,20 +13,6 @@ dependencies between those things make it difficult to split up. */
 namespace Msp {
 namespace DataFile {
 
 namespace Msp {
 namespace DataFile {
 
-/**
-Helper struct to determine whether a Loader has a Collection typedef.
-*/
-template<typename T>
-struct NeedsCollection: public Sfinae
-{
-       template<typename U>
-       static Yes f(typename U::Collection *);
-       template<typename U>
-       static No f(...);
-
-       enum { value = Evaluate<sizeof(f<T>(0))>::value };
-};
-
 class CollectionItemTypeBase;
 
 template<typename T>
 class CollectionItemTypeBase;
 
 template<typename T>
diff --git a/source/meta.h b/source/meta.h
new file mode 100644 (file)
index 0000000..ac6ec1b
--- /dev/null
@@ -0,0 +1,24 @@
+#ifndef MSP_DATAFILE_META_H_
+#define MSP_DATAFILE_META_H_
+
+#include <msp/core/meta.h>
+
+namespace Msp {
+namespace DataFile {
+
+/**
+Helper struct to determine whether a Loader has a Collection typedef.
+*/
+struct CheckCollectionType: Sfinae
+{
+       template<typename T>
+       static Yes f(typename T::Collection *);
+       using Sfinae::f;
+};
+
+template<typename T> struct NeedsCollection: Sfinae::Evaluate<CheckCollectionType, T> { };
+
+} // namespace DataFile
+} // namespace Msp
+
+#endif