/*
 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:   Signal.cpp
 * Author: alain
 *
 * Created on May 6, 2018, 5:32 PM
 */
#include "SourceCompile/SymbolTable.h"
#include "FileContent.h"
#include "Signal.h"

using namespace SURELOG;

Signal::Signal(FileContent* fileContent, NodeId nodeId, VObjectType type,
               VObjectType direction)
    : m_fileContent(fileContent),
      m_nodeId(nodeId),
      m_type(type),
      m_direction(direction),
      m_interfaceDef(NULL),
      m_interfaceNameId(0) {}

Signal::Signal(FileContent* fileContent, NodeId interfaceDef,
               NodeId interfaceNameId)
    : m_fileContent(fileContent),
      m_nodeId(interfaceDef),
      m_type(VObjectType::slNoType),
      m_direction(VObjectType::slNoType),
      m_interfaceDef(NULL),
      m_interfaceNameId(interfaceNameId) {}

Signal::~Signal() {}
