/*
 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:   ClockingBlockHolder.h
 * Author: alain
 *
 * Created on June 1, 2018, 9:08 PM
 */

#ifndef CLOCKINGBLOCKHOLDER_H
#define CLOCKINGBLOCKHOLDER_H
#include <map>
#include "../SourceCompile/SymbolTable.h"
#include "../Design/Signal.h"
#include "../Design/ClockingBlock.h"

namespace SURELOG {

class ClockingBlockHolder {
public:
    ClockingBlockHolder() {}
    virtual ~ClockingBlockHolder() {}
    
    typedef  std::map<SymbolId, ClockingBlock>  ClockingBlockMap;
    ClockingBlockMap& getClockingBlockMap() { return m_clockingBlockMap; }
    void addClockingBlock(SymbolId blockId, ClockingBlock& block);
    ClockingBlock* getClockingBlock(SymbolId blockId);
private:
    ClockingBlockMap m_clockingBlockMap;
};

};

#endif /* CLOCKINGBLOCKHOLDER_H */


