• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef COURGETTE_ADJUSTMENT_METHOD_H_
6 #define COURGETTE_ADJUSTMENT_METHOD_H_
7 
8 #include "base/basictypes.h"
9 
10 namespace courgette {
11 
12 class AssemblyProgram;
13 
14 class AdjustmentMethod {
15  public:
16   // Factory methods for making adjusters.
17 
18   // Returns the adjustment method used in production.
MakeProductionAdjustmentMethod()19   static AdjustmentMethod* MakeProductionAdjustmentMethod() {
20     return MakeShingleAdjustmentMethod();
21   }
22 
23   // Returns and adjustement method that makes no adjustments.
24   static AdjustmentMethod* MakeNullAdjustmentMethod();
25 
26   // Returns the original adjustment method.
27   static AdjustmentMethod* MakeTrieAdjustmentMethod();
28 
29   // Returns the new shingle tiling adjustment method.
30   static AdjustmentMethod* MakeShingleAdjustmentMethod();
31 
32   // AdjustmentMethod interface:
33 
34   // Adjusts |program| to increase similarity to |model|.  |program| can be
35   // changed in any way provided that it still produces the same output when
36   // assembled.
37   virtual bool Adjust(const AssemblyProgram& model,
38                       AssemblyProgram* program) = 0;
39 
40   // Deletes 'this' adjustment method.
41   virtual void Destroy();
42 
43  protected:
AdjustmentMethod()44   AdjustmentMethod() {}
~AdjustmentMethod()45   virtual ~AdjustmentMethod() {}
46 
47   DISALLOW_COPY_AND_ASSIGN(AdjustmentMethod);
48 };
49 
50 }  // namespace courgette
51 #endif  // COURGETTE_ADJUSTMENT_METHOD_H_
52