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
12namespace base {
13
14// static
15GlobalDescriptors* GlobalDescriptors::GetInstance() {
16  typedef Singleton<base::GlobalDescriptors,
17                    LeakySingletonTraits<base::GlobalDescriptors> >
18      GlobalDescriptorsSingleton;
19  return GlobalDescriptorsSingleton::get();
20}
21
22int 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
30int 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
40void 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
52void GlobalDescriptors::Reset(const Mapping& mapping) {
53  descriptors_ = mapping;
54}
55
56GlobalDescriptors::GlobalDescriptors() {}
57
58GlobalDescriptors::~GlobalDescriptors() {}
59
60}  // namespace base
61