DWARFAttribute.h revision d996d0c32b483c2190e1eb288cd3bbbd259c2960
1f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com//===-- DWARFAttribute.h ----------------------------------------*- C++ -*-===//
2a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org//
3a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org//                     The LLVM Compiler Infrastructure
4a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org//
5a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org// This file is distributed under the University of Illinois Open Source
6a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org// License. See LICENSE.TXT for details.
7a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org//
8a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org//===----------------------------------------------------------------------===//
9a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org
10a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org#ifndef SymbolFileDWARF_DWARFAttribute_h_
11a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org#define SymbolFileDWARF_DWARFAttribute_h_
12a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org
13a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org#include "DWARFDefines.h"
14a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org#include <vector>
15a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org
16a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgclass DWARFAttribute
17a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org{
18a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgpublic:
19a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org    DWARFAttribute(dw_attr_t attr, dw_form_t form) :
20a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        m_attr_form ( attr << 16 | form )
21a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org    {
22a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org    }
23a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org
24a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org    void        set(dw_attr_t attr, dw_form_t form) { m_attr_form = (attr << 16) | form; }
25a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org    void        set_attr(dw_attr_t attr) { m_attr_form = (m_attr_form & 0x0000ffffu) | (attr << 16); }
26a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org    void        set_form(dw_form_t form) { m_attr_form = (m_attr_form & 0xffff0000u) | form; }
27a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org    dw_attr_t   get_attr() const { return m_attr_form >> 16; }
28a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org    dw_form_t   get_form() const { return m_attr_form; }
29a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org    void        get(dw_attr_t& attr, dw_form_t& form)  const
302e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org    {
31a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        register uint32_t attr_form = m_attr_form;
321510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        attr = attr_form >> 16;
33a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org        form = attr_form;
34a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org    }
35a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org    bool        operator == (const DWARFAttribute& rhs) const { return m_attr_form == rhs.m_attr_form; }
36a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org    typedef std::vector<DWARFAttribute> collection;
37a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org    typedef collection::iterator iterator;
38a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org    typedef collection::const_iterator const_iterator;
39a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org
407516f05132429850aa326421ed3e25f23b4c071blrn@chromium.orgprotected:
417516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org    uint32_t    m_attr_form;    // Upper 16 bits is attribute, lower 16 bits is form
42a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org};
43a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org
44a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org
45a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org#endif  // SymbolFileDWARF_DWARFAttribute_h_
46a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org