Home | History | Annotate | Download | only in posix
      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