/*
 Copyright 2019 Alain Dargelas
 
 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at
 
 http://www.apache.org/licenses/LICENSE-2.0
 
 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
 */

/* 
 * File:   CompileToolbox.h
 * Author: alain
 *
 * Created on June 13, 2018, 9:36 PM
 */

#ifndef COMPILETOOLBOX_H
#define COMPILETOOLBOX_H

namespace SURELOG {

class CompileToolbox {
public:
    CompileToolbox();
    
    virtual ~CompileToolbox();
protected: 
    virtual bool compileInitialBlock_(FileContent* fC, NodeId nodeId, DesignComponent* component);

private:

};

};


#endif /* COMPILETOOLBOX_H */


