| // Copyright 2013 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #ifndef TOOLS_IPC_FUZZER_MESSAGE_LIB_MESSAGE_NAMES_H_ | 
 | #define TOOLS_IPC_FUZZER_MESSAGE_LIB_MESSAGE_NAMES_H_ | 
 |  | 
 | #include <map> | 
 | #include <string> | 
 | #include "base/basictypes.h" | 
 | #include "base/logging.h" | 
 |  | 
 | namespace ipc_fuzzer { | 
 |  | 
 | class MessageNames { | 
 |  public: | 
 |   MessageNames(); | 
 |   ~MessageNames(); | 
 |   static MessageNames* GetInstance(); | 
 |  | 
 |   void Add(uint32 type, const std::string& name) { | 
 |     name_map_[type] = name; | 
 |     type_map_[name] = type; | 
 |   } | 
 |  | 
 |   bool TypeExists(uint32 type) { | 
 |     return name_map_.find(type) != name_map_.end(); | 
 |   } | 
 |  | 
 |   bool NameExists(const std::string& name) { | 
 |     return type_map_.find(name) != type_map_.end(); | 
 |   } | 
 |  | 
 |   const std::string& TypeToName(uint32 type) { | 
 |     TypeToNameMap::iterator it = name_map_.find(type); | 
 |     CHECK(it != name_map_.end()); | 
 |     return it->second; | 
 |   } | 
 |  | 
 |   uint32 NameToType(const std::string& name) { | 
 |     NameToTypeMap::iterator it = type_map_.find(name); | 
 |     CHECK(it != type_map_.end()); | 
 |     return it->second; | 
 |   } | 
 |  | 
 |  private: | 
 |   typedef std::map<uint32, std::string> TypeToNameMap; | 
 |   typedef std::map<std::string, uint32> NameToTypeMap; | 
 |   TypeToNameMap name_map_; | 
 |   NameToTypeMap type_map_; | 
 |  | 
 |   static MessageNames* all_names_; | 
 |  | 
 |   DISALLOW_COPY_AND_ASSIGN(MessageNames); | 
 | }; | 
 |  | 
 | }  // namespace ipc_fuzzer | 
 |  | 
 | #endif  // TOOLS_IPC_FUZZER_MESSAGE_LIB_MESSAGE_NAMES_H_ |