/*
 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:   TfPortItem.h
 * Author: alain
 *
 * Created on May 12, 2019, 9:06 PM
 */

#ifndef TFPORTITEM_H
#define TFPORTITEM_H

#include "../Testbench/Variable.h"

namespace SURELOG {
class Procedure;
class Value;
   
class TfPortItem : public Variable {
public:
    TfPortItem(Procedure* parent, FileContent* fc, NodeId id, NodeId range,std::string name, DataType* type, Value* default_value, VObjectType direction) : 
          Variable(type, fc, id, range, name), 
       m_parent(parent), m_default(default_value), m_direction(direction) {}     
    virtual ~TfPortItem();
    
    Procedure*   getParent() { return m_parent; }
    Value*       getDefault() { return m_default; }
    VObjectType  getDirection() { return m_direction; }
private:
    Procedure*  m_parent;
    Value*      m_default;
    VObjectType m_direction;
};

};



#endif /* TFPORTITEM_H */


