1254721Semaste//===-- TypeFormat.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 lldb_TypeFormat_h_ 11254721Semaste#define lldb_TypeFormat_h_ 12254721Semaste 13254721Semaste// C Includes 14254721Semaste 15254721Semaste// C++ Includes 16254721Semaste#include <string> 17254721Semaste 18254721Semaste// Other libraries and framework includes 19254721Semaste 20254721Semaste// Project includes 21254721Semaste#include "lldb/lldb-public.h" 22254721Semaste#include "lldb/lldb-enumerations.h" 23254721Semaste 24254721Semaste#include "lldb/Core/ValueObject.h" 25254721Semaste 26254721Semastenamespace lldb_private { 27254721Semaste class TypeFormatImpl 28254721Semaste { 29254721Semaste public: 30254721Semaste class Flags 31254721Semaste { 32254721Semaste public: 33254721Semaste 34254721Semaste Flags () : 35254721Semaste m_flags (lldb::eTypeOptionCascade) 36254721Semaste {} 37254721Semaste 38254721Semaste Flags (const Flags& other) : 39254721Semaste m_flags (other.m_flags) 40254721Semaste {} 41254721Semaste 42254721Semaste Flags (uint32_t value) : 43254721Semaste m_flags (value) 44254721Semaste {} 45254721Semaste 46254721Semaste Flags& 47254721Semaste operator = (const Flags& rhs) 48254721Semaste { 49254721Semaste if (&rhs != this) 50254721Semaste m_flags = rhs.m_flags; 51254721Semaste 52254721Semaste return *this; 53254721Semaste } 54254721Semaste 55254721Semaste Flags& 56254721Semaste operator = (const uint32_t& rhs) 57254721Semaste { 58254721Semaste m_flags = rhs; 59254721Semaste return *this; 60254721Semaste } 61254721Semaste 62254721Semaste Flags& 63254721Semaste Clear() 64254721Semaste { 65254721Semaste m_flags = 0; 66254721Semaste return *this; 67254721Semaste } 68254721Semaste 69254721Semaste bool 70254721Semaste GetCascades () const 71254721Semaste { 72254721Semaste return (m_flags & lldb::eTypeOptionCascade) == lldb::eTypeOptionCascade; 73254721Semaste } 74254721Semaste 75254721Semaste Flags& 76254721Semaste SetCascades (bool value = true) 77254721Semaste { 78254721Semaste if (value) 79254721Semaste m_flags |= lldb::eTypeOptionCascade; 80254721Semaste else 81254721Semaste m_flags &= ~lldb::eTypeOptionCascade; 82254721Semaste return *this; 83254721Semaste } 84254721Semaste 85254721Semaste bool 86254721Semaste GetSkipPointers () const 87254721Semaste { 88254721Semaste return (m_flags & lldb::eTypeOptionSkipPointers) == lldb::eTypeOptionSkipPointers; 89254721Semaste } 90254721Semaste 91254721Semaste Flags& 92254721Semaste SetSkipPointers (bool value = true) 93254721Semaste { 94254721Semaste if (value) 95254721Semaste m_flags |= lldb::eTypeOptionSkipPointers; 96254721Semaste else 97254721Semaste m_flags &= ~lldb::eTypeOptionSkipPointers; 98254721Semaste return *this; 99254721Semaste } 100254721Semaste 101254721Semaste bool 102254721Semaste GetSkipReferences () const 103254721Semaste { 104254721Semaste return (m_flags & lldb::eTypeOptionSkipReferences) == lldb::eTypeOptionSkipReferences; 105254721Semaste } 106254721Semaste 107254721Semaste Flags& 108254721Semaste SetSkipReferences (bool value = true) 109254721Semaste { 110254721Semaste if (value) 111254721Semaste m_flags |= lldb::eTypeOptionSkipReferences; 112254721Semaste else 113254721Semaste m_flags &= ~lldb::eTypeOptionSkipReferences; 114254721Semaste return *this; 115254721Semaste } 116254721Semaste 117254721Semaste uint32_t 118254721Semaste GetValue () 119254721Semaste { 120254721Semaste return m_flags; 121254721Semaste } 122254721Semaste 123254721Semaste void 124254721Semaste SetValue (uint32_t value) 125254721Semaste { 126254721Semaste m_flags = value; 127254721Semaste } 128254721Semaste 129254721Semaste private: 130254721Semaste uint32_t m_flags; 131254721Semaste }; 132254721Semaste 133254721Semaste TypeFormatImpl (lldb::Format f = lldb::eFormatInvalid, 134254721Semaste const Flags& flags = Flags()); 135254721Semaste 136254721Semaste typedef std::shared_ptr<TypeFormatImpl> SharedPointer; 137254721Semaste typedef bool(*ValueCallback)(void*, ConstString, const lldb::TypeFormatImplSP&); 138254721Semaste 139254721Semaste ~TypeFormatImpl () 140254721Semaste { 141254721Semaste } 142254721Semaste 143254721Semaste bool 144254721Semaste Cascades () const 145254721Semaste { 146254721Semaste return m_flags.GetCascades(); 147254721Semaste } 148254721Semaste bool 149254721Semaste SkipsPointers () const 150254721Semaste { 151254721Semaste return m_flags.GetSkipPointers(); 152254721Semaste } 153254721Semaste bool 154254721Semaste SkipsReferences () const 155254721Semaste { 156254721Semaste return m_flags.GetSkipReferences(); 157254721Semaste } 158254721Semaste 159254721Semaste void 160254721Semaste SetCascades (bool value) 161254721Semaste { 162254721Semaste m_flags.SetCascades(value); 163254721Semaste } 164254721Semaste 165254721Semaste void 166254721Semaste SetSkipsPointers (bool value) 167254721Semaste { 168254721Semaste m_flags.SetSkipPointers(value); 169254721Semaste } 170254721Semaste 171254721Semaste void 172254721Semaste SetSkipsReferences (bool value) 173254721Semaste { 174254721Semaste m_flags.SetSkipReferences(value); 175254721Semaste } 176254721Semaste 177254721Semaste lldb::Format 178254721Semaste GetFormat () const 179254721Semaste { 180254721Semaste return m_format; 181254721Semaste } 182254721Semaste 183254721Semaste void 184254721Semaste SetFormat (lldb::Format fmt) 185254721Semaste { 186254721Semaste m_format = fmt; 187254721Semaste } 188254721Semaste 189254721Semaste uint32_t 190254721Semaste GetOptions () 191254721Semaste { 192254721Semaste return m_flags.GetValue(); 193254721Semaste } 194254721Semaste 195254721Semaste void 196254721Semaste SetOptions (uint32_t value) 197254721Semaste { 198254721Semaste m_flags.SetValue(value); 199254721Semaste } 200254721Semaste 201254721Semaste uint32_t& 202254721Semaste GetRevision () 203254721Semaste { 204254721Semaste return m_my_revision; 205254721Semaste } 206254721Semaste 207254721Semaste std::string 208254721Semaste GetDescription(); 209254721Semaste 210254721Semaste protected: 211254721Semaste Flags m_flags; 212254721Semaste lldb::Format m_format; 213254721Semaste uint32_t m_my_revision; 214254721Semaste 215254721Semaste private: 216254721Semaste DISALLOW_COPY_AND_ASSIGN(TypeFormatImpl); 217254721Semaste }; 218254721Semaste} // namespace lldb_private 219254721Semaste 220254721Semaste#endif // lldb_TypeFormat_h_ 221