#ifndef MSP_DATAFILE_TYPE_H_
#define MSP_DATAFILE_TYPE_H_
+#include <msp/core/inttypes.h>
#include <msp/strings/lexicalcast.h>
namespace Msp {
std::string name;
template<typename T>
- Symbol(const T &n): name(lexical_cast(n)) { }
+ Symbol(const T &n): name(lexical_cast<std::string>(n)) { }
template<typename T> operator T() const { return lexical_cast<T>(name); }
};
struct IntType
{
static const char signature = 'i';
-#ifdef MSVC
- typedef __int64 Store;
-#else
- typedef long long int Store;
-#endif
+ typedef Int64 Store;
typedef Store Load;
};
typedef Symbol Store;
};
+const char valid_signatures[] =
+{
+ IntType::signature,
+ FloatType::signature,
+ BoolType::signature,
+ StringType::signature,
+ SymbolType::signature,
+ 0
+};
+
template<typename T>
struct HasLoadType
{
template<>
struct TypeInfo<unsigned long int, false>: IntType { };
-#ifdef MSVC
+#if defined(_MSC_VER)
template<>
struct TypeInfo<__int64, false>: IntType { };
template<>
struct TypeInfo<unsigned __int64, false>: IntType { };
-#else
+#elif defined(__GNUC__)
template<>
struct TypeInfo<long long int, false>: IntType { };
template<>
struct TypeInfo<std::string, false>: StringType { };
+template<>
+struct TypeInfo<char *, false>: StringType { };
+
+template<>
+struct TypeInfo<const char *, false>: StringType { };
+
template<typename T>
struct TypeInfo<const T, false>: TypeInfo<T> { };