#include <sstream>
+
+// TODO: replace if in Text::readParToken() with compile time switch
+#if 0
+
+#include "support/metahash.h"
+
+typedef boost::mpl::string<'\\end','_lay','out'> end_layout;
+typedef boost::mpl::string<'\\end','in','set'> end_inset;
+
+void foo()
+{
+ std::string token = "\\end_layout";
+
+ switch (boost::hash_value(token)) {
+ case lyx::support::hash_string<end_layout>::value:
+ return;
+ case lyx::support::hash_string<end_inset>::value:
+ return;
+ default: ;
+ };
+
+}
+#endif
+
+
using namespace std;
using namespace lyx::support;
}
+
void Text::readParToken(Paragraph & par, Lexer & lex,
string const & token, Font & font, Change & change, ErrorList & errorList)
{
--- /dev/null
+// -*- C++ -*-
+/**
+ * \file methash.h
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author Peter Kümmel
+ *
+ * Full author contact details are available in file CREDITS.
+ *
+ * Code by Tor Brede Vekterli
+ * http://arcticinteractive.com/2009/04/18/compile-time-string-hashing-boost-mpl/
+ * (Boost 1.0 license.)
+ *
+ */
+
+#ifndef LYX_META_HASH_H
+#define LYX_META_HASH_H
+
+#include <boost/mpl/string.hpp>
+#include <boost/mpl/fold.hpp>
+#include <boost/mpl/size_t.hpp>
+#include <boost/functional/hash.hpp>
+
+
+
+namespace lyx {
+namespace support {
+
+#ifdef _MSC_VER
+#pragma warning(push)
+// disable addition overflow warning
+#pragma warning(disable:4307)
+#endif
+
+ template <typename Seed, typename Value>
+ struct hash_combine
+ {
+ typedef boost::mpl::size_t<
+ Seed::value ^ (static_cast<std::size_t>(Value::value)
+ + 0x9e3779b9 + (Seed::value << 6) + (Seed::value >> 2))
+ > type;
+ };
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
+
+ // Hash any sequence of integral wrapper types
+ template <typename Sequence>
+ struct hash_sequence
+ : boost::mpl::fold<
+ Sequence
+ , boost::mpl::size_t<0>
+ , hash_combine<boost::mpl::_1, boost::mpl::_2>
+ >::type
+ {};
+
+ // For hashing std::strings et al that don't include the zero-terminator
+ template <typename String>
+ struct hash_string : hash_sequence<String>
+ {};
+
+ // Hash including terminating zero for char arrays
+ template <typename String>
+ struct hash_cstring
+ : hash_combine< hash_sequence<String>, boost::mpl::size_t<0> >::type
+ {};
+
+}
+}
+
+#endif