• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
GetInstance()15 GlobalDescriptors* GlobalDescriptors::GetInstance() {
16   typedef Singleton<base::GlobalDescriptors,
17                     LeakySingletonTraits<base::GlobalDescriptors> >
18       GlobalDescriptorsSingleton;
19   return GlobalDescriptorsSingleton::get();
20 }
21 
Get(Key key) const22 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 
MaybeGet(Key key) const30 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 
Set(Key key,int fd)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 
Reset(const Mapping & mapping)54 void GlobalDescriptors::Reset(const Mapping& mapping) {
55   descriptors_ = mapping;
56 }
57 
GlobalDescriptors()58 GlobalDescriptors::GlobalDescriptors() {}
59 
~GlobalDescriptors()60 GlobalDescriptors::~GlobalDescriptors() {}
61 
62 }  // namespace base
63