Home | History | Annotate | Download | only in protocol
      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
     45