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