1d2592a34a059e7cbb2b11dc53649ac4912422909Argyrios Kyrtzidis// Copyright (c) 2012 The Chromium Authors. All rights reserved.
277349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek// Use of this source code is governed by a BSD-style license that can be
377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek// found in the LICENSE file.
477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek//
577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek// Helper functions that allow to map enum values to strings.
677349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek
777349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#include <stddef.h>
877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek
977349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek#include "base/logging.h"
10b387a3f23e423d62c053be86294b703da1d1a222Ted Kremenek
11d2592a34a059e7cbb2b11dc53649ac4912422909Argyrios Kyrtzidisnamespace remoting {
12b387a3f23e423d62c053be86294b703da1d1a222Ted Kremeneknamespace protocol {
1377349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek
1477349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenektemplate <typename T>
1577349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenekstruct NameMapElement {
16d2592a34a059e7cbb2b11dc53649ac4912422909Argyrios Kyrtzidis  const T value;
17d2592a34a059e7cbb2b11dc53649ac4912422909Argyrios Kyrtzidis  const char* const name;
18d065d6080f0620bb80b933f3f5d52d37bb2ea770Ted Kremenek};
1930a2e16f6c27f888dd11eba6bbbae1e980078fcbChandler Carruth
2030a2e16f6c27f888dd11eba6bbbae1e980078fcbChandler Carruthtemplate <typename T, size_t N>
214ef19205b6912316296db74a9073ad6fa60e4ccaTed Kremenekconst char* ValueToName(const NameMapElement<T> (&map)[N], T value) {
2230a2e16f6c27f888dd11eba6bbbae1e980078fcbChandler Carruth  for (size_t i = 0; i < N; ++i) {
239b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenek    if (map[i].value == value)
249b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenek      return map[i].name;
2518c66fdc3c4008d335885695fe36fb5353c5f672Ted Kremenek  }
265903a373db3d27794c90b25687e0dd6adb0e497dAnna Zaks  NOTREACHED();
2730a2e16f6c27f888dd11eba6bbbae1e980078fcbChandler Carruth  return NULL;
2877349cb20bfd7069d081f84c91975bfa8ef60a32Ted Kremenek}
291eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
305a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidistemplate <typename T, size_t N>
311d26f48dc2eea1c07431ca1519d7034a21b9bcffTed Kremenekbool NameToValue(const NameMapElement<T> (&map)[N],
32337e4dbc6859589b8878146a88bebf754e916702Ted Kremenek                 const std::string& name,
33c35fb7d67d515659ad2325b4f6ec97c9fe64fb63Benjamin Kramer                 T* result) {
34c35fb7d67d515659ad2325b4f6ec97c9fe64fb63Benjamin Kramer  for (size_t i = 0; i < N; ++i) {
35c35fb7d67d515659ad2325b4f6ec97c9fe64fb63Benjamin Kramer    if (map[i].name == name) {
36c35fb7d67d515659ad2325b4f6ec97c9fe64fb63Benjamin Kramer      *result = map[i].value;
37c35fb7d67d515659ad2325b4f6ec97c9fe64fb63Benjamin Kramer      return true;
38c35fb7d67d515659ad2325b4f6ec97c9fe64fb63Benjamin Kramer    }
39c35fb7d67d515659ad2325b4f6ec97c9fe64fb63Benjamin Kramer  }
405a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidis  return false;
41b1b5daf30d2597e066936772bd206500232d7d65Ted Kremenek}
429ef6537a894c33003359b1f9b9676e9178e028b7Ted Kremenek
435a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidis}  // namespace protocol
445e2d2c2ee3cf410643e0f9a5701708e51409d973Benjamin Kramer}  // namespace remoting
45740d490593e0de8732a697c9f77b90ddd463863bJordan Rose