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. 10 // 11 //===----------------------------------------------------------------------===// 12 13 #ifndef LLVM_ADT_STRINGSET_H 14 #define LLVM_ADT_STRINGSET_H 15 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> 22 23 namespace llvm { 24 25 /// StringSet - A wrapper for StringMap that provides set-like functionality. 26 template <class AllocatorTy = MallocAllocator> 27 class StringSet : public StringMap<NoneType, AllocatorTy> { 28 using base = StringMap<NoneType, AllocatorTy>; 29 30 public: 31 StringSet() = default; StringSet(std::initializer_list<StringRef> S)32 StringSet(std::initializer_list<StringRef> S) { 33 for (StringRef X : S) 34 insert(X); 35 } StringSet(AllocatorTy A)36 explicit StringSet(AllocatorTy A) : base(A) {} 37 insert(StringRef Key)38 std::pair<typename base::iterator, bool> insert(StringRef Key) { 39 assert(!Key.empty()); 40 return base::insert(std::make_pair(Key, None)); 41 } 42 43 template <typename InputIt> insert(const InputIt & Begin,const InputIt & End)44 void insert(const InputIt &Begin, const InputIt &End) { 45 for (auto It = Begin; It != End; ++It) 46 base::insert(std::make_pair(*It, None)); 47 } 48 49 template <typename ValueTy> 50 std::pair<typename base::iterator, bool> insert(const StringMapEntry<ValueTy> & MapEntry)51 insert(const StringMapEntry<ValueTy> &MapEntry) { 52 return insert(MapEntry.getKey()); 53 } 54 }; 55 56 } // end namespace llvm 57 58 #endif // LLVM_ADT_STRINGSET_H 59