• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 // Helper functions that allow to map enum values to strings.
6 
7 #include <stddef.h>
8 
9 #include "base/logging.h"
10 
11 namespace remoting {
12 namespace protocol {
13 
14 template <typename T>
15 struct NameMapElement {
16   const T value;
17   const char* const name;
18 };
19 
20 template <typename T, size_t N>
ValueToName(const NameMapElement<T> (& map)[N],T value)21 const char* ValueToName(const NameMapElement<T> (&map)[N], T value) {
22   for (size_t i = 0; i < N; ++i) {
23     if (map[i].value == value)
24       return map[i].name;
25   }
26   NOTREACHED();
27   return NULL;
28 }
29 
30 template <typename T, size_t N>
NameToValue(const NameMapElement<T> (& map)[N],const std::string & name,T * result)31 bool NameToValue(const NameMapElement<T> (&map)[N],
32                  const std::string& name,
33                  T* result) {
34   for (size_t i = 0; i < N; ++i) {
35     if (map[i].name == name) {
36       *result = map[i].value;
37       return true;
38     }
39   }
40   return false;
41 }
42 
43 }  // namespace protocol
44 }  // namespace remoting
45