- add sources.
[platform/framework/web/crosswalk.git] / src / remoting / protocol / name_value_map.h
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>
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>
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