//===-- Declaration.h -------------------------------------------*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#ifndef liblldb_Declaration_h_
#define liblldb_Declaration_h_

#include "lldb/lldb-private.h"
#include "lldb/Host/FileSpec.h"

namespace lldb_private {

//----------------------------------------------------------------------
/// @class Declaration Declaration.h "lldb/Symbol/Declaration.h"
/// @brief A class that describes the declaration location of a
///        lldb object.
///
/// The declarations include the file specification, line number, and
/// the column info and can help track where functions, blocks, inlined
/// functions, types, variables, any many other debug core objects were
/// declared.
//----------------------------------------------------------------------
class Declaration
{
public:
    //------------------------------------------------------------------
    /// Default constructor.
    //------------------------------------------------------------------
    Declaration () :
        m_file (),
        m_line (0)
#ifdef LLDB_ENABLE_DECLARATION_COLUMNS
        ,m_column (0)
#endif
    {
    }
    

    //------------------------------------------------------------------
    /// Construct with file specification, and optional line and column.
    ///
    /// @param[in] file_spec
    ///     The file specification that describes where this was
    ///     declared.
    ///
    /// @param[in] line
    ///     The line number that describes where this was declared. Set
    ///     to zero if there is no line number information.
    ///
    /// @param[in] column
    ///     The column number that describes where this was declared.
    ///     Set to zero if there is no column number information.
    //------------------------------------------------------------------
    Declaration (const FileSpec& file_spec, uint32_t line = 0, uint32_t column = 0) :
        m_file (file_spec),
        m_line (line)
#ifdef LLDB_ENABLE_DECLARATION_COLUMNS
        ,m_column (column)
#endif
    {
    }

    //------------------------------------------------------------------
    /// Construct with a reference to another Declaration object.
    //------------------------------------------------------------------
    Declaration (const Declaration& rhs) :
        m_file (rhs.m_file),
        m_line (rhs.m_line)
#ifdef LLDB_ENABLE_DECLARATION_COLUMNS
        ,m_column (rhs.m_column)
#endif
    {
        
    }

    //------------------------------------------------------------------
    /// Construct with a pointer to another Declaration object.
    //------------------------------------------------------------------
    Declaration(const Declaration* decl_ptr) :
        m_file(),
        m_line(0)
#ifdef LLDB_ENABLE_DECLARATION_COLUMNS
        ,m_column(0)
#endif
    {
        if (decl_ptr)
            *this = *decl_ptr;
    }

    //------------------------------------------------------------------
    /// Clear the object's state.
    ///
    /// Sets the file specification to be empty, and the line and column
    /// to zero.
    //------------------------------------------------------------------
    void
    Clear ()
    {
        m_file.Clear();
        m_line= 0;
#ifdef LLDB_ENABLE_DECLARATION_COLUMNS
        m_column = 0;
#endif
    }

    //------------------------------------------------------------------
    /// Compare two declaration objects.
    ///
    /// Compares the two file specifications from \a lhs and \a rhs. If
    /// the file specifications are equal, then continue to compare the
    /// line number and column numbers respectively.
    ///
    /// @param[in] lhs
    ///     The Left Hand Side const Declaration object reference.
    ///
    /// @param[in] rhs
    ///     The Right Hand Side const Declaration object reference.
    ///
    /// @return
    ///     @li -1 if lhs < rhs
    ///     @li 0 if lhs == rhs
    ///     @li 1 if lhs > rhs
    //------------------------------------------------------------------
    static int
    Compare (const Declaration& lhs, const Declaration& rhs);

    //------------------------------------------------------------------
    /// Dump a description of this object to a Stream.
    ///
    /// Dump a description of the contents of this object to the
    /// supplied stream \a s.
    ///
    /// @param[in] s
    ///     The stream to which to dump the object descripton.
    //------------------------------------------------------------------
    void
    Dump (Stream *s, bool show_fullpaths) const;

    void
    DumpStopContext (Stream *s, bool show_fullpaths) const;
    //------------------------------------------------------------------
    /// Get accessor for the declaration column number.
    ///
    /// @return
    ///     Non-zero indicates a valid column number, zero indicates no
    ///     column information is available.
    //------------------------------------------------------------------
    uint32_t
    GetColumn () const
    {
#ifdef LLDB_ENABLE_DECLARATION_COLUMNS
        return m_column;
#else
        return 0;
#endif
    }

    //------------------------------------------------------------------
    /// Get accessor for file specification.
    ///
    /// @return
    ///     A reference to the file specification object.
    //------------------------------------------------------------------
    FileSpec&
    GetFile ()
    {
        return m_file;
    }

    //------------------------------------------------------------------
    /// Get const accessor for file specification.
    ///
    /// @return
    ///     A const reference to the file specification object.
    //------------------------------------------------------------------
    const FileSpec&
    GetFile () const
    {
        return m_file;
    }

    //------------------------------------------------------------------
    /// Get accessor for the declaration line number.
    ///
    /// @return
    ///     Non-zero indicates a valid line number, zero indicates no
    ///     line information is available.
    //------------------------------------------------------------------
    uint32_t
    GetLine () const
    {
        return m_line;
    }


    bool
    IsValid() const
    {
        return m_file && m_line != 0;
    }

    //------------------------------------------------------------------
    /// Get the memory cost of this object.
    ///
    /// @return
    ///     The number of bytes that this object occupies in memory.
    ///     The returned value does not include the bytes for any
    ///     shared string values.
    ///
    /// @see ConstString::StaticMemorySize ()
    //------------------------------------------------------------------
    size_t
    MemorySize () const;

    //------------------------------------------------------------------
    /// Set accessor for the declaration column number.
    ///
    /// @param[in] column
    ///     Non-zero indicates a valid column number, zero indicates no
    ///     column information is available.
    //------------------------------------------------------------------
    void
    SetColumn (uint32_t column)
    {
#ifdef LLDB_ENABLE_DECLARATION_COLUMNS
        m_column = col;
#endif
    }

    //------------------------------------------------------------------
    /// Set accessor for the declaration file specification.
    ///
    /// @param[in] file_spec
    ///     The new declaration file specifciation.
    //------------------------------------------------------------------
    void
    SetFile (const FileSpec& file_spec)
    {
        m_file = file_spec;
    }

    //------------------------------------------------------------------
    /// Set accessor for the declaration line number.
    ///
    /// @param[in] line
    ///     Non-zero indicates a valid line number, zero indicates no
    ///     line information is available.
    //------------------------------------------------------------------
    void
    SetLine (uint32_t line)
    {
        m_line = line;
    }
protected:
    //------------------------------------------------------------------
    /// Member variables.
    //------------------------------------------------------------------
    FileSpec m_file;    ///< The file specification that points to the
                        ///< source file where the declaration occurred.
    uint32_t m_line;    ///< Non-zero values indicates a valid line number,
                        ///< zero indicates no line number information is available.
#ifdef LLDB_ENABLE_DECLARATION_COLUMNS
    uint32_t m_column;  ///< Non-zero values indicates a valid column number,
                        ///< zero indicates no column information is available.
#endif
};

bool
operator == (const Declaration &lhs, const Declaration &rhs);

} // namespace lldb_private

#endif  // liblldb_Declaration_h_
