Home | History | Annotate | Download | only in base
      1 // Copyright (c) 2009 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/global_descriptors_posix.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     LOG(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   // In order to make unittests pass, we define a default mapping from keys to
     38   // descriptors by adding a fixed offset:
     39   return kBaseDescriptor + key;
     40 }
     41 
     42 void GlobalDescriptors::Set(Key key, int fd) {
     43   for (Mapping::iterator
     44        i = descriptors_.begin(); i != descriptors_.end(); ++i) {
     45     if (i->first == key) {
     46       i->second = fd;
     47       return;
     48     }
     49   }
     50 
     51   descriptors_.push_back(std::make_pair(key, fd));
     52 }
     53 
     54 void GlobalDescriptors::Reset(const Mapping& mapping) {
     55   descriptors_ = mapping;
     56 }
     57 
     58 GlobalDescriptors::GlobalDescriptors() {}
     59 
     60 GlobalDescriptors::~GlobalDescriptors() {}
     61 
     62 }  // namespace base
     63