TypeFormat.h revision f509c5ec066599a3399fced39ea36996184939e8
1//===-- TypeFormat.h ----------------------------------------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10#ifndef lldb_TypeFormat_h_ 11#define lldb_TypeFormat_h_ 12 13// C Includes 14 15// C++ Includes 16#include <string> 17 18// Other libraries and framework includes 19 20// Project includes 21#include "lldb/lldb-public.h" 22#include "lldb/lldb-enumerations.h" 23 24#include "lldb/Core/ValueObject.h" 25 26namespace lldb_private { 27 class TypeFormatImpl 28 { 29 public: 30 class Flags 31 { 32 public: 33 34 Flags () : 35 m_flags (lldb::eTypeOptionCascade) 36 {} 37 38 Flags (const Flags& other) : 39 m_flags (other.m_flags) 40 {} 41 42 Flags (uint32_t value) : 43 m_flags (value) 44 {} 45 46 Flags& 47 operator = (const Flags& rhs) 48 { 49 if (&rhs != this) 50 m_flags = rhs.m_flags; 51 52 return *this; 53 } 54 55 Flags& 56 operator = (const uint32_t& rhs) 57 { 58 m_flags = rhs; 59 return *this; 60 } 61 62 Flags& 63 Clear() 64 { 65 m_flags = 0; 66 return *this; 67 } 68 69 bool 70 GetCascades () const 71 { 72 return (m_flags & lldb::eTypeOptionCascade) == lldb::eTypeOptionCascade; 73 } 74 75 Flags& 76 SetCascades (bool value = true) 77 { 78 if (value) 79 m_flags |= lldb::eTypeOptionCascade; 80 else 81 m_flags &= ~lldb::eTypeOptionCascade; 82 return *this; 83 } 84 85 bool 86 GetSkipPointers () const 87 { 88 return (m_flags & lldb::eTypeOptionSkipPointers) == lldb::eTypeOptionSkipPointers; 89 } 90 91 Flags& 92 SetSkipPointers (bool value = true) 93 { 94 if (value) 95 m_flags |= lldb::eTypeOptionSkipPointers; 96 else 97 m_flags &= ~lldb::eTypeOptionSkipPointers; 98 return *this; 99 } 100 101 bool 102 GetSkipReferences () const 103 { 104 return (m_flags & lldb::eTypeOptionSkipReferences) == lldb::eTypeOptionSkipReferences; 105 } 106 107 Flags& 108 SetSkipReferences (bool value = true) 109 { 110 if (value) 111 m_flags |= lldb::eTypeOptionSkipReferences; 112 else 113 m_flags &= ~lldb::eTypeOptionSkipReferences; 114 return *this; 115 } 116 117 uint32_t 118 GetValue () 119 { 120 return m_flags; 121 } 122 123 void 124 SetValue (uint32_t value) 125 { 126 m_flags = value; 127 } 128 129 private: 130 uint32_t m_flags; 131 }; 132 133 TypeFormatImpl (lldb::Format f = lldb::eFormatInvalid, 134 const Flags& flags = Flags()); 135 136 typedef STD_SHARED_PTR(TypeFormatImpl) SharedPointer; 137 typedef bool(*ValueCallback)(void*, ConstString, const lldb::TypeFormatImplSP&); 138 139 ~TypeFormatImpl () 140 { 141 } 142 143 bool 144 Cascades () const 145 { 146 return m_flags.GetCascades(); 147 } 148 bool 149 SkipsPointers () const 150 { 151 return m_flags.GetSkipPointers(); 152 } 153 bool 154 SkipsReferences () const 155 { 156 return m_flags.GetSkipReferences(); 157 } 158 159 void 160 SetCascades (bool value) 161 { 162 m_flags.SetCascades(value); 163 } 164 165 void 166 SetSkipsPointers (bool value) 167 { 168 m_flags.SetSkipPointers(value); 169 } 170 171 void 172 SetSkipsReferences (bool value) 173 { 174 m_flags.SetSkipReferences(value); 175 } 176 177 lldb::Format 178 GetFormat () const 179 { 180 return m_format; 181 } 182 183 void 184 SetFormat (lldb::Format fmt) 185 { 186 m_format = fmt; 187 } 188 189 uint32_t 190 GetOptions () 191 { 192 return m_flags.GetValue(); 193 } 194 195 void 196 SetOptions (uint32_t value) 197 { 198 m_flags.SetValue(value); 199 } 200 201 uint32_t& 202 GetRevision () 203 { 204 return m_my_revision; 205 } 206 207 std::string 208 GetDescription(); 209 210 protected: 211 Flags m_flags; 212 lldb::Format m_format; 213 uint32_t m_my_revision; 214 215 private: 216 DISALLOW_COPY_AND_ASSIGN(TypeFormatImpl); 217 }; 218} // namespace lldb_private 219 220#endif // lldb_TypeFormat_h_ 221