181e3e7e5SSchrodinger ZHU Yifan //===-- Implementation of hcreate_r -----------------------------*- C++ -*-===// 281e3e7e5SSchrodinger ZHU Yifan // 381e3e7e5SSchrodinger ZHU Yifan // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 481e3e7e5SSchrodinger ZHU Yifan // See https://llvm.org/LICENSE.txt for license information. 581e3e7e5SSchrodinger ZHU Yifan // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 681e3e7e5SSchrodinger ZHU Yifan // 781e3e7e5SSchrodinger ZHU Yifan //===----------------------------------------------------------------------===// 881e3e7e5SSchrodinger ZHU Yifan 981e3e7e5SSchrodinger ZHU Yifan #include "src/search/hcreate_r.h" 1081e3e7e5SSchrodinger ZHU Yifan #include "src/__support/HashTable/randomness.h" 1181e3e7e5SSchrodinger ZHU Yifan #include "src/__support/HashTable/table.h" 12*5ff3ff33SPetr Hosek #include "src/__support/macros/config.h" 1381e3e7e5SSchrodinger ZHU Yifan #include "src/errno/libc_errno.h" 1481e3e7e5SSchrodinger ZHU Yifan 15*5ff3ff33SPetr Hosek namespace LIBC_NAMESPACE_DECL { 1681e3e7e5SSchrodinger ZHU Yifan LLVM_LIBC_FUNCTION(int, hcreate_r, 1781e3e7e5SSchrodinger ZHU Yifan (size_t capacity, struct hsearch_data *htab)) { 1881e3e7e5SSchrodinger ZHU Yifan if (htab == nullptr) { 1981e3e7e5SSchrodinger ZHU Yifan libc_errno = EINVAL; 2081e3e7e5SSchrodinger ZHU Yifan return 0; 2181e3e7e5SSchrodinger ZHU Yifan } 2281e3e7e5SSchrodinger ZHU Yifan uint64_t randomness = internal::randomness::next_random_seed(); 2381e3e7e5SSchrodinger ZHU Yifan internal::HashTable *table = 2481e3e7e5SSchrodinger ZHU Yifan internal::HashTable::allocate(capacity, randomness); 2581e3e7e5SSchrodinger ZHU Yifan if (table == nullptr) { 2681e3e7e5SSchrodinger ZHU Yifan libc_errno = ENOMEM; 2781e3e7e5SSchrodinger ZHU Yifan return 0; 2881e3e7e5SSchrodinger ZHU Yifan } 2981e3e7e5SSchrodinger ZHU Yifan htab->__opaque = table; 3081e3e7e5SSchrodinger ZHU Yifan return 1; 3181e3e7e5SSchrodinger ZHU Yifan } 3281e3e7e5SSchrodinger ZHU Yifan 33*5ff3ff33SPetr Hosek } // namespace LIBC_NAMESPACE_DECL 34