1f3b41502Scgyurgyik //===-- Implementation of strspn ------------------------------------------===//
2f3b41502Scgyurgyik //
3f3b41502Scgyurgyik // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4f3b41502Scgyurgyik // See https://llvm.org/LICENSE.txt for license information.
5f3b41502Scgyurgyik // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6f3b41502Scgyurgyik //
7f3b41502Scgyurgyik //===----------------------------------------------------------------------===//
8f3b41502Scgyurgyik 
9f3b41502Scgyurgyik #include "src/string/strspn.h"
10f3b41502Scgyurgyik 
11*f362aea4SSiva Chandra Reddy #include "src/__support/CPP/Bitset.h"
12f3b41502Scgyurgyik #include "src/__support/common.h"
13f3b41502Scgyurgyik #include <stddef.h>
14f3b41502Scgyurgyik 
15f3b41502Scgyurgyik namespace __llvm_libc {
16f3b41502Scgyurgyik 
17a0b65a7bSMichael Jones LLVM_LIBC_FUNCTION(size_t, strspn, (const char *src, const char *segment)) {
18f3b41502Scgyurgyik   const char *initial = src;
19f3b41502Scgyurgyik   cpp::Bitset<256> bitset;
20f3b41502Scgyurgyik 
21f3b41502Scgyurgyik   for (; *segment; ++segment)
22f3b41502Scgyurgyik     bitset.set(*segment);
23f3b41502Scgyurgyik   for (; *src && bitset.test(*src); ++src)
24f3b41502Scgyurgyik     ;
25f3b41502Scgyurgyik   return src - initial;
26f3b41502Scgyurgyik }
27f3b41502Scgyurgyik 
28f3b41502Scgyurgyik } // namespace __llvm_libc
29