// Copyright (c) Alexandre Mutel. All rights reserved.
// Licensed under the BSD-Clause 2 license.
// See license.txt file in the project root for full license information.
namespace CppAst
{
    /// 
    /// Base class for C++ types.
    /// 
    public abstract class CppType : CppElement
    {
        /// 
        /// Constructor with the specified type kind.
        /// 
        /// 
        protected CppType(CppTypeKind typeKind)
        {
            TypeKind = typeKind;
        }
        /// 
        /// Gets the  of this instance.
        /// 
        public CppTypeKind TypeKind { get; }
        public abstract int SizeOf { get; set; }
        /// 
        /// Gets the canonical type of this type instance.
        /// 
        /// A canonical type of this type instance
        public abstract CppType GetCanonicalType();
        /// 
        /// We can use this name in exporter to use this type.
        /// 
        public virtual string FullName
        {
            get
            {
                return ToString();
            }
        }
    }
}