1e269f434b1f4e81974b2c68abf84d4b64419edd4Anton Korobeynikov//===--- StringSet.h - The LLVM Compiler Driver -----------------*- C++ -*-===// 2e269f434b1f4e81974b2c68abf84d4b64419edd4Anton Korobeynikov// 3e269f434b1f4e81974b2c68abf84d4b64419edd4Anton Korobeynikov// The LLVM Compiler Infrastructure 4e269f434b1f4e81974b2c68abf84d4b64419edd4Anton Korobeynikov// 5e269f434b1f4e81974b2c68abf84d4b64419edd4Anton Korobeynikov// This file is distributed under the University of Illinois Open 6e269f434b1f4e81974b2c68abf84d4b64419edd4Anton Korobeynikov// Source License. See LICENSE.TXT for details. 7e269f434b1f4e81974b2c68abf84d4b64419edd4Anton Korobeynikov// 8e269f434b1f4e81974b2c68abf84d4b64419edd4Anton Korobeynikov//===----------------------------------------------------------------------===// 9e269f434b1f4e81974b2c68abf84d4b64419edd4Anton Korobeynikov// 10e269f434b1f4e81974b2c68abf84d4b64419edd4Anton Korobeynikov// StringSet - A set-like wrapper for the StringMap. 11e269f434b1f4e81974b2c68abf84d4b64419edd4Anton Korobeynikov// 12e269f434b1f4e81974b2c68abf84d4b64419edd4Anton Korobeynikov//===----------------------------------------------------------------------===// 13e269f434b1f4e81974b2c68abf84d4b64419edd4Anton Korobeynikov 14e269f434b1f4e81974b2c68abf84d4b64419edd4Anton Korobeynikov#ifndef LLVM_ADT_STRINGSET_H 15e269f434b1f4e81974b2c68abf84d4b64419edd4Anton Korobeynikov#define LLVM_ADT_STRINGSET_H 16e269f434b1f4e81974b2c68abf84d4b64419edd4Anton Korobeynikov 17e269f434b1f4e81974b2c68abf84d4b64419edd4Anton Korobeynikov#include "llvm/ADT/StringMap.h" 18e269f434b1f4e81974b2c68abf84d4b64419edd4Anton Korobeynikov 19e269f434b1f4e81974b2c68abf84d4b64419edd4Anton Korobeynikovnamespace llvm { 20e269f434b1f4e81974b2c68abf84d4b64419edd4Anton Korobeynikov 21dfe91cefd25614bc9ac1626d67df4d5ad5d3553fDaniel Dunbar /// StringSet - A wrapper for StringMap that provides set-like functionality. 22e269f434b1f4e81974b2c68abf84d4b64419edd4Anton Korobeynikov template <class AllocatorTy = llvm::MallocAllocator> 23e269f434b1f4e81974b2c68abf84d4b64419edd4Anton Korobeynikov class StringSet : public llvm::StringMap<char, AllocatorTy> { 24e269f434b1f4e81974b2c68abf84d4b64419edd4Anton Korobeynikov typedef llvm::StringMap<char, AllocatorTy> base; 25e269f434b1f4e81974b2c68abf84d4b64419edd4Anton Korobeynikov public: 26f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar StringSet() = default; 27f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar StringSet(std::initializer_list<StringRef> S) { 28f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar for (StringRef X : S) 29f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar insert(X); 30f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar } 31dfe91cefd25614bc9ac1626d67df4d5ad5d3553fDaniel Dunbar 3237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines std::pair<typename base::iterator, bool> insert(StringRef Key) { 33dfe91cefd25614bc9ac1626d67df4d5ad5d3553fDaniel Dunbar assert(!Key.empty()); 3437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines return base::insert(std::make_pair(Key, '\0')); 35e269f434b1f4e81974b2c68abf84d4b64419edd4Anton Korobeynikov } 36de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar 37de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar template <typename InputIt> 38de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar void insert(const InputIt &Begin, const InputIt &End) { 39de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar for (auto It = Begin; It != End; ++It) 40de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar base::insert(std::make_pair(*It, '\0')); 41de2d8694e25a814696358e95141f4b1aa4d8847ePirama Arumuga Nainar } 42e269f434b1f4e81974b2c68abf84d4b64419edd4Anton Korobeynikov }; 43e269f434b1f4e81974b2c68abf84d4b64419edd4Anton Korobeynikov} 44e269f434b1f4e81974b2c68abf84d4b64419edd4Anton Korobeynikov 45e269f434b1f4e81974b2c68abf84d4b64419edd4Anton Korobeynikov#endif // LLVM_ADT_STRINGSET_H 46