/*
 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:   DesignElement.cpp
 * Author: alain
 * 
 * Created on June 8, 2017, 8:05 PM
 */
#include "../SourceCompile/SymbolTable.h"
#include "TimeInfo.h"
#include "DesignElement.h"

using namespace SURELOG;

DesignElement::DesignElement(SymbolId name, SymbolId fileId, ElemType type, SymbolId uniqueId, unsigned int line, SymbolId parent) : 
m_name(name), m_fileId(fileId), m_type(type), m_uniqueId(uniqueId), m_line(line), m_parent(parent), m_node(0), m_context(NULL) {} 

DesignElement::~DesignElement () { }


