[SLP] limit vectorization of Constant subclasses (PR33958)
[llvm-core.git] / include / llvm / ADT / StringSet.h
blobaf3a44a7b32c40a6ddf6b56f81013360a085bd3b
1 //===- StringSet.h - The LLVM Compiler Driver -------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // StringSet - A set-like wrapper for the StringMap.
11 //===----------------------------------------------------------------------===//
13 #ifndef LLVM_ADT_STRINGSET_H
14 #define LLVM_ADT_STRINGSET_H
16 #include "llvm/ADT/StringMap.h"
17 #include "llvm/ADT/StringRef.h"
18 #include "llvm/Support/Allocator.h"
19 #include <cassert>
20 #include <initializer_list>
21 #include <utility>
23 namespace llvm {
25 /// StringSet - A wrapper for StringMap that provides set-like functionality.
26 template <class AllocatorTy = MallocAllocator>
27 class StringSet : public StringMap<char, AllocatorTy> {
28 using base = StringMap<char, AllocatorTy>;
30 public:
31 StringSet() = default;
32 StringSet(std::initializer_list<StringRef> S) {
33 for (StringRef X : S)
34 insert(X);
36 explicit StringSet(AllocatorTy A) : base(A) {}
38 std::pair<typename base::iterator, bool> insert(StringRef Key) {
39 assert(!Key.empty());
40 return base::insert(std::make_pair(Key, '\0'));
43 template <typename InputIt>
44 void insert(const InputIt &Begin, const InputIt &End) {
45 for (auto It = Begin; It != End; ++It)
46 base::insert(std::make_pair(*It, '\0'));
49 template <typename ValueTy>
50 std::pair<typename base::iterator, bool>
51 insert(const StringMapEntry<ValueTy> &MapEntry) {
52 return insert(MapEntry.getKey());
56 } // end namespace llvm
58 #endif // LLVM_ADT_STRINGSET_H