1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "base/posix/global_descriptors.h" 6 7 #include <vector> 8 #include <utility> 9 10 #include "base/logging.h" 11 12 namespace base { 13 14 // static 15 GlobalDescriptors* GlobalDescriptors::GetInstance() { 16 typedef Singleton<base::GlobalDescriptors, 17 LeakySingletonTraits<base::GlobalDescriptors> > 18 GlobalDescriptorsSingleton; 19 return GlobalDescriptorsSingleton::get(); 20 } 21 22 int GlobalDescriptors::Get(Key key) const { 23 const int ret = MaybeGet(key); 24 25 if (ret == -1) 26 DLOG(FATAL) << "Unknown global descriptor: " << key; 27 return ret; 28 } 29 30 int GlobalDescriptors::MaybeGet(Key key) const { 31 for (Mapping::const_iterator 32 i = descriptors_.begin(); i != descriptors_.end(); ++i) { 33 if (i->first == key) 34 return i->second; 35 } 36 37 return -1; 38 } 39 40 void GlobalDescriptors::Set(Key key, int fd) { 41 for (Mapping::iterator 42 i = descriptors_.begin(); i != descriptors_.end(); ++i) { 43 if (i->first == key) { 44 i->second = fd; 45 return; 46 } 47 } 48 49 descriptors_.push_back(std::make_pair(key, fd)); 50 } 51 52 void GlobalDescriptors::Reset(const Mapping& mapping) { 53 descriptors_ = mapping; 54 } 55 56 GlobalDescriptors::GlobalDescriptors() {} 57 58 GlobalDescriptors::~GlobalDescriptors() {} 59 60 } // namespace base 61