15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2009 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef COURGETTE_ADJUSTMENT_METHOD_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define COURGETTE_ADJUSTMENT_METHOD_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace courgette { 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AssemblyProgram; 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AdjustmentMethod { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Factory methods for making adjusters. 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the adjustment method used in production. 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static AdjustmentMethod* MakeProductionAdjustmentMethod() { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return MakeShingleAdjustmentMethod(); 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns and adjustement method that makes no adjustments. 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static AdjustmentMethod* MakeNullAdjustmentMethod(); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the original adjustment method. 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static AdjustmentMethod* MakeTrieAdjustmentMethod(); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the new shingle tiling adjustment method. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static AdjustmentMethod* MakeShingleAdjustmentMethod(); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AdjustmentMethod interface: 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adjusts |program| to increase similarity to |model|. |program| can be 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // changed in any way provided that it still produces the same output when 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // assembled. 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Adjust(const AssemblyProgram& model, 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssemblyProgram* program) = 0; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Deletes 'this' adjustment method. 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Destroy(); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AdjustmentMethod() {} 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~AdjustmentMethod() {} 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AdjustmentMethod); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace courgette 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // COURGETTE_ADJUSTMENT_METHOD_H_ 52