1254721Semaste//===-- ClangExternalASTSourceCommon.cpp ------------------------*- 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#include "lldb/Symbol/ClangExternalASTSourceCommon.h"
11254721Semaste#include "lldb/Core/Stream.h"
12254721Semaste
13254721Semasteusing namespace lldb_private;
14254721Semaste
15254721Semaste#define ClangExternalASTSourceCommon_MAGIC  (0x00112233aabbccddull)
16254721Semaste
17254721Semasteuint64_t g_TotalSizeOfMetadata = 0;
18254721Semaste
19254721SemasteClangExternalASTSourceCommon::ClangExternalASTSourceCommon() : clang::ExternalASTSource()
20254721Semaste{
21254721Semaste    m_magic = ClangExternalASTSourceCommon_MAGIC;
22254721Semaste
23254721Semaste    g_TotalSizeOfMetadata += m_metadata.size();
24254721Semaste}
25254721Semaste
26254721SemasteClangExternalASTSourceCommon::~ClangExternalASTSourceCommon()
27254721Semaste{
28254721Semaste    g_TotalSizeOfMetadata -= m_metadata.size();
29254721Semaste}
30254721Semaste
31254721SemasteClangASTMetadata *
32254721SemasteClangExternalASTSourceCommon::GetMetadata (const void *object)
33254721Semaste{
34254721Semaste    assert (m_magic == ClangExternalASTSourceCommon_MAGIC);
35254721Semaste
36254721Semaste    if (HasMetadata (object))
37254721Semaste        return &m_metadata[object];
38254721Semaste    else
39254721Semaste        return NULL;
40254721Semaste}
41254721Semaste
42254721Semastevoid
43254721SemasteClangExternalASTSourceCommon::SetMetadata (const void *object, ClangASTMetadata &metadata)
44254721Semaste{
45254721Semaste    assert (m_magic == ClangExternalASTSourceCommon_MAGIC);
46254721Semaste
47254721Semaste    uint64_t orig_size = m_metadata.size();
48254721Semaste    m_metadata[object] = metadata;
49254721Semaste    uint64_t new_size = m_metadata.size();
50254721Semaste    g_TotalSizeOfMetadata += (new_size - orig_size);
51254721Semaste}
52254721Semaste
53254721Semastebool
54254721SemasteClangExternalASTSourceCommon::HasMetadata (const void *object)
55254721Semaste{
56254721Semaste    assert (m_magic == ClangExternalASTSourceCommon_MAGIC);
57254721Semaste
58254721Semaste    return m_metadata.find(object) != m_metadata.end();
59254721Semaste}
60254721Semaste
61254721Semastevoid
62254721SemasteClangASTMetadata::Dump (Stream *s)
63254721Semaste{
64254721Semaste    lldb::user_id_t uid = GetUserID ();
65254721Semaste
66254721Semaste    if (uid != LLDB_INVALID_UID)
67254721Semaste    {
68254721Semaste        s->Printf ("uid=0x%" PRIx64, uid);
69254721Semaste    }
70254721Semaste
71254721Semaste    uint64_t isa_ptr = GetISAPtr ();
72254721Semaste    if (isa_ptr != 0)
73254721Semaste    {
74254721Semaste        s->Printf ("isa_ptr=0x%" PRIx64, isa_ptr);
75254721Semaste    }
76254721Semaste
77254721Semaste    const char *obj_ptr_name = GetObjectPtrName();
78254721Semaste    if (obj_ptr_name)
79254721Semaste    {
80254721Semaste        s->Printf ("obj_ptr_name=\"%s\" ", obj_ptr_name);
81254721Semaste    }
82254721Semaste
83254721Semaste    if (m_is_dynamic_cxx)
84254721Semaste    {
85254721Semaste        s->Printf ("is_dynamic_cxx=%i ", m_is_dynamic_cxx);
86254721Semaste    }
87254721Semaste    s->EOL();
88254721Semaste}
89254721Semaste
90