1254721Semaste//===-- ClangNamespaceDecl.h ------------------------------------*- C++ -*-===//
2254721Semaste//
3254721Semaste//                     The LLVM Compiler Infrastructure
4254721Semaste//
5254721Semaste// This file is distributed under the University of Illinois Open Source
6254721Semaste// License. See LICENSE.TXT for details.
7254721Semaste//
8254721Semaste//===----------------------------------------------------------------------===//
9254721Semaste
10254721Semaste#ifndef liblldb_ClangNamespaceDecl_h_
11254721Semaste#define liblldb_ClangNamespaceDecl_h_
12254721Semaste
13263363Semaste#include <string>
14263363Semaste
15254721Semaste#include "lldb/lldb-public.h"
16254721Semaste#include "lldb/Core/ClangForward.h"
17254721Semaste
18254721Semastenamespace lldb_private {
19254721Semaste
20254721Semasteclass ClangNamespaceDecl
21254721Semaste{
22254721Semastepublic:
23254721Semaste    ClangNamespaceDecl () :
24254721Semaste        m_ast (NULL),
25254721Semaste        m_namespace_decl (NULL)
26254721Semaste    {
27254721Semaste    }
28254721Semaste
29254721Semaste    ClangNamespaceDecl (clang::ASTContext *ast, clang::NamespaceDecl *namespace_decl) :
30254721Semaste        m_ast (ast),
31254721Semaste        m_namespace_decl (namespace_decl)
32254721Semaste    {
33254721Semaste    }
34254721Semaste
35254721Semaste    ClangNamespaceDecl (const ClangNamespaceDecl &rhs) :
36254721Semaste        m_ast (rhs.m_ast),
37254721Semaste        m_namespace_decl (rhs.m_namespace_decl)
38254721Semaste    {
39254721Semaste    }
40254721Semaste
41254721Semaste    const ClangNamespaceDecl &
42254721Semaste    operator = (const ClangNamespaceDecl &rhs)
43254721Semaste    {
44254721Semaste        m_ast = rhs.m_ast;
45254721Semaste        m_namespace_decl = rhs.m_namespace_decl;
46254721Semaste        return *this;
47254721Semaste    }
48254721Semaste
49254721Semaste    //------------------------------------------------------------------
50254721Semaste    /// Convert to bool operator.
51254721Semaste    ///
52254721Semaste    /// This allows code to check a ClangNamespaceDecl object to see if
53254721Semaste    /// it contains a valid namespace decl using code such as:
54254721Semaste    ///
55254721Semaste    /// @code
56254721Semaste    /// ClangNamespaceDecl ns_decl(...);
57254721Semaste    /// if (ns_decl)
58254721Semaste    /// { ...
59254721Semaste    /// @endcode
60254721Semaste    ///
61254721Semaste    /// @return
62254721Semaste    ///     /b True this object contains a valid namespace decl, \b
63254721Semaste    ///     false otherwise.
64254721Semaste    //------------------------------------------------------------------
65263363Semaste    explicit operator bool() const
66254721Semaste    {
67254721Semaste        return m_ast != NULL && m_namespace_decl != NULL;
68254721Semaste    }
69254721Semaste
70254721Semaste    clang::ASTContext *
71254721Semaste    GetASTContext() const
72254721Semaste    {
73254721Semaste        return m_ast;
74254721Semaste    }
75254721Semaste
76254721Semaste    void
77254721Semaste    SetASTContext (clang::ASTContext *ast)
78254721Semaste    {
79254721Semaste        m_ast = ast;
80254721Semaste    }
81254721Semaste
82254721Semaste    clang::NamespaceDecl *
83254721Semaste    GetNamespaceDecl () const
84254721Semaste    {
85254721Semaste        return m_namespace_decl;
86254721Semaste    }
87254721Semaste
88254721Semaste    void
89254721Semaste    SetNamespaceDecl (clang::NamespaceDecl *namespace_decl)
90254721Semaste    {
91254721Semaste        m_namespace_decl = namespace_decl;
92254721Semaste    }
93254721Semaste
94254721Semaste    std::string
95254721Semaste    GetQualifiedName () const;
96254721Semaste
97254721Semasteprotected:
98254721Semaste    clang::ASTContext  *m_ast;
99254721Semaste    clang::NamespaceDecl *m_namespace_decl;
100254721Semaste};
101254721Semaste
102254721Semaste
103254721Semaste} // namespace lldb_private
104254721Semaste
105254721Semaste#endif // #ifndef liblldb_ClangNamespaceDecl_h_
106