mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-22 10:00:33 +00:00
prepare switch to switch-case in when parsing tex files
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@40232 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
b946aafcbc
commit
8abb5429b9
26
src/Text.cpp
26
src/Text.cpp
@ -70,6 +70,31 @@
|
||||
|
||||
#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;
|
||||
|
||||
@ -316,6 +341,7 @@ InsetText const & Text::inset() const
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Text::readParToken(Paragraph & par, Lexer & lex,
|
||||
string const & token, Font & font, Change & change, ErrorList & errorList)
|
||||
{
|
||||
|
73
src/support/metahash.h
Normal file
73
src/support/metahash.h
Normal file
@ -0,0 +1,73 @@
|
||||
// -*- 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
|
Loading…
Reference in New Issue
Block a user