LCOV - code coverage report
Current view: top level - src - string-hasher.h (source / functions) Hit Total Coverage
Test: app.info Lines: 0 1 0.0 %
Date: 2019-02-19 Functions: 0 0 -

          Line data    Source code
       1             : // Copyright 2017 the V8 project authors. All rights reserved.
       2             : // Use of this source code is governed by a BSD-style license that can be
       3             : // found in the LICENSE file.
       4             : 
       5             : #ifndef V8_STRING_HASHER_H_
       6             : #define V8_STRING_HASHER_H_
       7             : 
       8             : #include "src/globals.h"
       9             : 
      10             : namespace v8 {
      11             : namespace internal {
      12             : 
      13             : class ConsString;
      14             : class String;
      15             : 
      16             : template <typename T>
      17             : class Vector;
      18             : 
      19             : class V8_EXPORT_PRIVATE StringHasher {
      20             :  public:
      21             :   explicit inline StringHasher(int length, uint64_t seed);
      22             : 
      23             :   template <typename schar>
      24             :   static inline uint32_t HashSequentialString(const schar* chars, int length,
      25             :                                               uint64_t seed);
      26             : 
      27             :   // Reads all the data, even for long strings and computes the utf16 length.
      28             :   static uint32_t ComputeUtf8Hash(Vector<const char> chars, uint64_t seed,
      29             :                                   int* utf16_length_out);
      30             : 
      31             :   // Calculated hash value for a string consisting of 1 to
      32             :   // String::kMaxArrayIndexSize digits with no leading zeros (except "0").
      33             :   // value is represented decimal value.
      34             :   static uint32_t MakeArrayIndexHash(uint32_t value, int length);
      35             : 
      36             :   // No string is allowed to have a hash of zero.  That value is reserved
      37             :   // for internal properties.  If the hash calculation yields zero then we
      38             :   // use 27 instead.
      39             :   static const int kZeroHash = 27;
      40             : 
      41             :   // Reusable parts of the hashing algorithm.
      42             :   V8_INLINE static uint32_t AddCharacterCore(uint32_t running_hash, uint16_t c);
      43             :   V8_INLINE static uint32_t GetHashCore(uint32_t running_hash);
      44             :   template <typename Char>
      45             :   V8_INLINE static uint32_t ComputeRunningHash(uint32_t running_hash,
      46             :                                                const Char* chars, int length);
      47             : 
      48             :  protected:
      49             :   // Returns the value to store in the hash field of a string with
      50             :   // the given length and contents.
      51             :   uint32_t GetHashField();
      52             :   // Returns true if the hash of this string can be computed without
      53             :   // looking at the contents.
      54             :   inline bool has_trivial_hash();
      55             :   // Adds a block of characters to the hash.
      56             :   template <typename Char>
      57             :   inline void AddCharacters(const Char* chars, int len);
      58             : 
      59             :  private:
      60             :   // Add a character to the hash.
      61             :   inline void AddCharacter(uint16_t c);
      62             :   // Update index. Returns true if string is still an index.
      63             :   inline bool UpdateIndex(uint16_t c);
      64             : 
      65             :   int length_;
      66             :   uint32_t raw_running_hash_;
      67             :   uint32_t array_index_;
      68             :   bool is_array_index_;
      69             :   DISALLOW_COPY_AND_ASSIGN(StringHasher);
      70             : };
      71             : 
      72             : class IteratingStringHasher : public StringHasher {
      73             :  public:
      74             :   static inline uint32_t Hash(String string, uint64_t seed);
      75             :   inline void VisitOneByteString(const uint8_t* chars, int length);
      76             :   inline void VisitTwoByteString(const uint16_t* chars, int length);
      77             : 
      78             :  private:
      79             :   inline IteratingStringHasher(int len, uint64_t seed);
      80             :   void VisitConsString(ConsString cons_string);
      81             :   DISALLOW_COPY_AND_ASSIGN(IteratingStringHasher);
      82             : };
      83             : 
      84             : // Useful for std containers that require something ()'able.
      85             : struct SeededStringHasher {
      86             :   explicit SeededStringHasher(uint64_t hashseed) : hashseed_(hashseed) {}
      87             :   inline std::size_t operator()(const char* name) const;
      88             : 
      89             :   uint64_t hashseed_;
      90             : };
      91             : 
      92             : // Useful for std containers that require something ()'able.
      93             : struct StringEquals {
      94             :   bool operator()(const char* name1, const char* name2) const {
      95           0 :     return strcmp(name1, name2) == 0;
      96             :   }
      97             : };
      98             : 
      99             : }  // namespace internal
     100             : }  // namespace v8
     101             : 
     102             : #endif  // V8_STRING_HASHER_H_

Generated by: LCOV version 1.10