Loading...
common/PerfectHash.h dyld-1340 /dev/null
--- dyld/dyld-1340/common/PerfectHash.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (c) 2019 Apple Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- *
- * This file contains Original Code and/or Modifications of Original Code
- * as defined in and that are subject to the Apple Public Source License
- * Version 2.0 (the 'License'). You may not use this file except in
- * compliance with the License. Please obtain a copy of the License at
- * http://www.opensource.apple.com/apsl/ and read it before using this
- * file.
- *
- * The Original Code and all software distributed under the License are
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
- * Please see the License for the specific language governing rights and
- * limitations under the License.
- *
- * @APPLE_LICENSE_HEADER_END@
- */
-
-#ifndef PerfectHash_h
-#define PerfectHash_h
-
-#include <stdint.h>
-#include <stdlib.h>
-
-#include "Defines.h"
-
-#include "Array.h"
-#include "Map.h"
-
-#if BUILDING_CACHE_BUILDER || BUILDING_UNIT_TESTS || BUILDING_CACHE_BUILDER_UNIT_TESTS
-#include <unordered_map>
-#include <vector>
-#endif
-
-namespace objc {
-uint64_t lookup8(const uint8_t *k, size_t length, uint64_t level);
-
-#if BUILDING_CACHE_BUILDER || BUILDING_UNIT_TESTS || BUILDING_CACHE_BUILDER_UNIT_TESTS
-
-// An objc string is at a certain offset in to its buffer. Eg, a selector is a given offset
-// in to the selector strings buffer
-typedef std::pair<std::string_view, uint32_t> ObjCString;
-
-struct eqstr {
-    bool operator()(const char* s1, const char* s2) const {
-        return strcmp(s1, s2) == 0;
-    }
-};
-
-struct hashstr {
-    size_t operator()(const char *s) const {
-        return (size_t)objc::lookup8((uint8_t *)s, strlen(s), 0);
-    }
-};
-
-// cstring => cstring's vmaddress
-// (used for selector names and class names)
-typedef std::unordered_map<const char *, uint64_t, hashstr, eqstr> string_map;
-
-// cstring => cstring's vmaddress
-// (used for selector names and class names)
-typedef std::unordered_map<const char *, uint64_t, hashstr, eqstr> string_map;
-
-// protocol name => protocol vmaddress
-typedef std::unordered_map<const char *, uint64_t, hashstr, eqstr> legacy_protocol_map;
-
-// protocol name => (protocol vmaddress, dylib objc index)
-typedef std::unordered_multimap<const char *, std::pair<uint64_t, uint16_t>, hashstr, eqstr> protocol_map;
-
-// class name => (class vmaddress, dylib objc index)
-typedef std::unordered_multimap<const char *, std::pair<uint64_t, uint16_t>, hashstr, eqstr> class_map;
-
-struct VIS_HIDDEN PerfectHash {
-    uint32_t capacity   = 0;
-    uint32_t occupied   = 0;
-    uint32_t shift      = 0;
-    uint32_t mask       = 0;
-    uint64_t salt       = 0;
-
-    uint32_t scramble[256];
-    dyld3::OverflowSafeArray<uint8_t> tab; // count == mask+1
-
-    /* representation of a key */
-    struct key
-    {
-        uint8_t        *name1_k;        /* the actual key */
-        uint32_t         len1_k;        /* the length of the actual key */
-        uint8_t        *name2_k;        /* the actual key */
-        uint32_t         len2_k;        /* the length of the actual key */
-        uint32_t         hash_k;        /* the initial hash value for this key */
-        /* beyond this point is mapping-dependent */
-        uint32_t         a_k;           /* a, of the key maps to (a,b) */
-        uint32_t         b_k;           /* b, of the key maps to (a,b) */
-        struct key *nextb_k;            /* next key with this b */
-    };
-
-    // For the shared cache builder swift maps
-    static void make_perfect(dyld3::OverflowSafeArray<key>& keys, PerfectHash& result);
-
-    // For the shared cache builder selector/class/protocol maps
-    static void make_perfect(const std::vector<ObjCString>& strings, objc::PerfectHash& phash);
-};
-
-#endif // BUILDING_CACHE_BUILDER || BUILDING_UNIT_TESTS || BUILDING_CACHE_BUILDER_UNIT_TESTS
-
-} // namespace objc
-
-#endif /* PerfectHash_h */