xref: /llvm-project/libc/src/search/hcreate_r.cpp (revision 5ff3ff33ff930e4ec49da7910612d8a41eb068cb)
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