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