ue2_literal: add hash_value()

This commit is contained in:
Justin Viiret 2017-04-24 09:26:35 +10:00 committed by Matthew Barr
parent bb29aeb298
commit 8a7ac432c0
2 changed files with 20 additions and 2 deletions

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2016, Intel Corporation * Copyright (c) 2016-2017, Intel Corporation
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
@ -34,6 +34,7 @@
#ifndef UTIL_HASH_H #ifndef UTIL_HASH_H
#define UTIL_HASH_H #define UTIL_HASH_H
#include <iterator>
#include <boost/functional/hash/hash_fwd.hpp> #include <boost/functional/hash/hash_fwd.hpp>
namespace ue2 { namespace ue2 {
@ -69,6 +70,15 @@ size_t hash_all(Args&&... args) {
return v; return v;
} }
/**
* \brief Compute the hash of all the elements of any range on which we can
* call std::begin() and std::end().
*/
template<typename Range>
size_t hash_range(const Range &r) {
return boost::hash_range(std::begin(r), std::end(r));
}
} // namespace ue2 } // namespace ue2
#endif // UTIL_HASH_H #endif // UTIL_HASH_H

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2015-2016, Intel Corporation * Copyright (c) 2015-2017, Intel Corporation
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
@ -35,6 +35,7 @@
#include "ue2common.h" #include "ue2common.h"
#include "util/charreach.h" #include "util/charreach.h"
#include "util/hash.h"
#include <iterator> #include <iterator>
#include <string> #include <string>
@ -206,6 +207,13 @@ private:
std::vector<bool> nocase; /* for trolling value */ std::vector<bool> nocase; /* for trolling value */
}; };
inline
size_t hash_value(const ue2_literal::elem &elem) {
return hash_all(elem.c, elem.nocase);
}
inline
size_t hash_value(const ue2_literal &lit) { return hash_range(lit); }
/// Return a reversed copy of this literal. /// Return a reversed copy of this literal.
ue2_literal reverse_literal(const ue2_literal &in); ue2_literal reverse_literal(const ue2_literal &in);