15b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com// Copyright (c) 2010 Google Inc. 25b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com// All rights reserved. 35b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com// 45b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com// Redistribution and use in source and binary forms, with or without 55b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com// modification, are permitted provided that the following conditions are 65b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com// met: 75b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com// 85b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com// * Redistributions of source code must retain the above copyright 95b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com// notice, this list of conditions and the following disclaimer. 105b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com// * Redistributions in binary form must reproduce the above 115b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com// copyright notice, this list of conditions and the following disclaimer 125b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com// in the documentation and/or other materials provided with the 135b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com// distribution. 145b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com// * Neither the name of Google Inc. nor the names of its 155b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com// contributors may be used to endorse or promote products derived from 165b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com// this software without specific prior written permission. 175b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com// 185b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 195b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 205b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 215b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 225b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 235b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 245b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 255b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 265b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 275b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 285b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 295b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com// 305b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com// module_factory.h: ModuleFactory a factory that provides 315b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com// an interface for creating a Module and deferring instantiation to subclasses 325b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com// BasicModuleFactory and FastModuleFactory. 335b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com 345b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com// Author: Siyang Xie (lambxsy@google.com) 355b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com 365b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com#ifndef PROCESSOR_MODULE_FACTORY_H__ 375b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com#define PROCESSOR_MODULE_FACTORY_H__ 385b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com 395b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com#include "processor/basic_source_line_resolver_types.h" 4041f998fe5a0630506d6d2a1bae78b1be179fe850SiyangXie@gmail.com#include "processor/fast_source_line_resolver_types.h" 4141f998fe5a0630506d6d2a1bae78b1be179fe850SiyangXie@gmail.com#include "processor/source_line_resolver_base_types.h" 425b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com 435b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.comnamespace google_breakpad { 445b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com 455b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.comclass ModuleFactory { 465b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com public: 475b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com virtual ~ModuleFactory() { }; 4808730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com virtual SourceLineResolverBase::Module* CreateModule( 4908730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com const string &name) const = 0; 505b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com}; 515b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com 525b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.comclass BasicModuleFactory : public ModuleFactory { 535b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com public: 545b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com virtual ~BasicModuleFactory() { } 5508730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com virtual BasicSourceLineResolver::Module* CreateModule( 5608730fc9a639e5b962f9a803ae8f5e91630e9484SiyangXie@gmail.com const string &name) const { 575b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com return new BasicSourceLineResolver::Module(name); 585b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com } 595b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com}; 605b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com 6141f998fe5a0630506d6d2a1bae78b1be179fe850SiyangXie@gmail.comclass FastModuleFactory : public ModuleFactory { 6241f998fe5a0630506d6d2a1bae78b1be179fe850SiyangXie@gmail.com public: 6341f998fe5a0630506d6d2a1bae78b1be179fe850SiyangXie@gmail.com virtual ~FastModuleFactory() { } 6441f998fe5a0630506d6d2a1bae78b1be179fe850SiyangXie@gmail.com virtual FastSourceLineResolver::Module* CreateModule( 6541f998fe5a0630506d6d2a1bae78b1be179fe850SiyangXie@gmail.com const string &name) const { 6641f998fe5a0630506d6d2a1bae78b1be179fe850SiyangXie@gmail.com return new FastSourceLineResolver::Module(name); 6741f998fe5a0630506d6d2a1bae78b1be179fe850SiyangXie@gmail.com } 6841f998fe5a0630506d6d2a1bae78b1be179fe850SiyangXie@gmail.com}; 6941f998fe5a0630506d6d2a1bae78b1be179fe850SiyangXie@gmail.com 705b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com} // namespace google_breakpad 715b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com 725b117cf53af46f357d28761ced3a1d94aeb5df91SiyangXie@gmail.com#endif // PROCESSOR_MODULE_FACTORY_H__ 73