diff options
Diffstat (limited to 'lldb/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp')
-rw-r--r-- | lldb/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp | 232 |
1 files changed, 116 insertions, 116 deletions
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp index a547695448c..df9371daa8f 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp @@ -28,136 +28,136 @@ using namespace lldb_private; using namespace lldb_private::formatters; namespace lldb_private { - namespace formatters { - class LibcxxStdUnorderedMapSyntheticFrontEnd : public SyntheticChildrenFrontEnd - { - public: - LibcxxStdUnorderedMapSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp); - - ~LibcxxStdUnorderedMapSyntheticFrontEnd() override = default; - - size_t - CalculateNumChildren() override; - - lldb::ValueObjectSP - GetChildAtIndex(size_t idx) override; - - bool - Update() override; - - bool - MightHaveChildren() override; - - size_t - GetIndexOfChildWithName(const ConstString &name) override; - - private: - ValueObject* m_tree; - size_t m_num_elements; - ValueObject* m_next_element; - std::vector<std::pair<ValueObject*, uint64_t> > m_elements_cache; - }; - } // namespace formatters +namespace formatters { +class LibcxxStdUnorderedMapSyntheticFrontEnd + : public SyntheticChildrenFrontEnd { +public: + LibcxxStdUnorderedMapSyntheticFrontEnd(lldb::ValueObjectSP valobj_sp); + + ~LibcxxStdUnorderedMapSyntheticFrontEnd() override = default; + + size_t CalculateNumChildren() override; + + lldb::ValueObjectSP GetChildAtIndex(size_t idx) override; + + bool Update() override; + + bool MightHaveChildren() override; + + size_t GetIndexOfChildWithName(const ConstString &name) override; + +private: + ValueObject *m_tree; + size_t m_num_elements; + ValueObject *m_next_element; + std::vector<std::pair<ValueObject *, uint64_t>> m_elements_cache; +}; +} // namespace formatters } // namespace lldb_private -lldb_private::formatters::LibcxxStdUnorderedMapSyntheticFrontEnd::LibcxxStdUnorderedMapSyntheticFrontEnd (lldb::ValueObjectSP valobj_sp) : - SyntheticChildrenFrontEnd(*valobj_sp), - m_tree(nullptr), - m_num_elements(0), - m_next_element(nullptr), - m_elements_cache() -{ - if (valobj_sp) - Update(); +lldb_private::formatters::LibcxxStdUnorderedMapSyntheticFrontEnd:: + LibcxxStdUnorderedMapSyntheticFrontEnd(lldb::ValueObjectSP valobj_sp) + : SyntheticChildrenFrontEnd(*valobj_sp), m_tree(nullptr), m_num_elements(0), + m_next_element(nullptr), m_elements_cache() { + if (valobj_sp) + Update(); } -size_t -lldb_private::formatters::LibcxxStdUnorderedMapSyntheticFrontEnd::CalculateNumChildren () -{ - if (m_num_elements != UINT32_MAX) - return m_num_elements; - return 0; +size_t lldb_private::formatters::LibcxxStdUnorderedMapSyntheticFrontEnd:: + CalculateNumChildren() { + if (m_num_elements != UINT32_MAX) + return m_num_elements; + return 0; } -lldb::ValueObjectSP -lldb_private::formatters::LibcxxStdUnorderedMapSyntheticFrontEnd::GetChildAtIndex (size_t idx) -{ - if (idx >= CalculateNumChildren()) - return lldb::ValueObjectSP(); - if (m_tree == nullptr) - return lldb::ValueObjectSP(); - - while (idx >= m_elements_cache.size()) - { - if (m_next_element == nullptr) - return lldb::ValueObjectSP(); - - Error error; - ValueObjectSP node_sp = m_next_element->Dereference(error); - if (!node_sp || error.Fail()) - return lldb::ValueObjectSP(); - - ValueObjectSP value_sp = node_sp->GetChildMemberWithName(ConstString("__value_"), true); - ValueObjectSP hash_sp = node_sp->GetChildMemberWithName(ConstString("__hash_"), true); - if (!hash_sp || !value_sp) - return lldb::ValueObjectSP(); - m_elements_cache.push_back({value_sp.get(),hash_sp->GetValueAsUnsigned(0)}); - m_next_element = node_sp->GetChildMemberWithName(ConstString("__next_"),true).get(); - if (!m_next_element || m_next_element->GetValueAsUnsigned(0) == 0) - m_next_element = nullptr; - } - - std::pair<ValueObject*, uint64_t> val_hash = m_elements_cache[idx]; - if (!val_hash.first) - return lldb::ValueObjectSP(); - StreamString stream; - stream.Printf("[%" PRIu64 "]", (uint64_t)idx); - DataExtractor data; +lldb::ValueObjectSP lldb_private::formatters:: + LibcxxStdUnorderedMapSyntheticFrontEnd::GetChildAtIndex(size_t idx) { + if (idx >= CalculateNumChildren()) + return lldb::ValueObjectSP(); + if (m_tree == nullptr) + return lldb::ValueObjectSP(); + + while (idx >= m_elements_cache.size()) { + if (m_next_element == nullptr) + return lldb::ValueObjectSP(); + Error error; - val_hash.first->GetData(data, error); - if (error.Fail()) - return lldb::ValueObjectSP(); - const bool thread_and_frame_only_if_stopped = true; - ExecutionContext exe_ctx = val_hash.first->GetExecutionContextRef().Lock(thread_and_frame_only_if_stopped); - return CreateValueObjectFromData(stream.GetData(), - data, - exe_ctx, - val_hash.first->GetCompilerType()); + ValueObjectSP node_sp = m_next_element->Dereference(error); + if (!node_sp || error.Fail()) + return lldb::ValueObjectSP(); + + ValueObjectSP value_sp = + node_sp->GetChildMemberWithName(ConstString("__value_"), true); + ValueObjectSP hash_sp = + node_sp->GetChildMemberWithName(ConstString("__hash_"), true); + if (!hash_sp || !value_sp) + return lldb::ValueObjectSP(); + m_elements_cache.push_back( + {value_sp.get(), hash_sp->GetValueAsUnsigned(0)}); + m_next_element = + node_sp->GetChildMemberWithName(ConstString("__next_"), true).get(); + if (!m_next_element || m_next_element->GetValueAsUnsigned(0) == 0) + m_next_element = nullptr; + } + + std::pair<ValueObject *, uint64_t> val_hash = m_elements_cache[idx]; + if (!val_hash.first) + return lldb::ValueObjectSP(); + StreamString stream; + stream.Printf("[%" PRIu64 "]", (uint64_t)idx); + DataExtractor data; + Error error; + val_hash.first->GetData(data, error); + if (error.Fail()) + return lldb::ValueObjectSP(); + const bool thread_and_frame_only_if_stopped = true; + ExecutionContext exe_ctx = val_hash.first->GetExecutionContextRef().Lock( + thread_and_frame_only_if_stopped); + return CreateValueObjectFromData(stream.GetData(), data, exe_ctx, + val_hash.first->GetCompilerType()); } -bool -lldb_private::formatters::LibcxxStdUnorderedMapSyntheticFrontEnd::Update() -{ - m_num_elements = UINT32_MAX; - m_next_element = nullptr; - m_elements_cache.clear(); - ValueObjectSP table_sp = m_backend.GetChildMemberWithName(ConstString("__table_"), true); - if (!table_sp) - return false; - ValueObjectSP num_elements_sp = table_sp->GetChildAtNamePath({ConstString("__p2_"),ConstString("__first_")}); - if (!num_elements_sp) - return false; - m_num_elements = num_elements_sp->GetValueAsUnsigned(0); - m_tree = table_sp->GetChildAtNamePath({ConstString("__p1_"),ConstString("__first_"),ConstString("__next_")}).get(); - if (m_num_elements > 0) - m_next_element = table_sp->GetChildAtNamePath({ConstString("__p1_"),ConstString("__first_"),ConstString("__next_")}).get(); +bool lldb_private::formatters::LibcxxStdUnorderedMapSyntheticFrontEnd:: + Update() { + m_num_elements = UINT32_MAX; + m_next_element = nullptr; + m_elements_cache.clear(); + ValueObjectSP table_sp = + m_backend.GetChildMemberWithName(ConstString("__table_"), true); + if (!table_sp) + return false; + ValueObjectSP num_elements_sp = table_sp->GetChildAtNamePath( + {ConstString("__p2_"), ConstString("__first_")}); + if (!num_elements_sp) return false; + m_num_elements = num_elements_sp->GetValueAsUnsigned(0); + m_tree = + table_sp + ->GetChildAtNamePath({ConstString("__p1_"), ConstString("__first_"), + ConstString("__next_")}) + .get(); + if (m_num_elements > 0) + m_next_element = + table_sp + ->GetChildAtNamePath({ConstString("__p1_"), ConstString("__first_"), + ConstString("__next_")}) + .get(); + return false; } -bool -lldb_private::formatters::LibcxxStdUnorderedMapSyntheticFrontEnd::MightHaveChildren () -{ - return true; +bool lldb_private::formatters::LibcxxStdUnorderedMapSyntheticFrontEnd:: + MightHaveChildren() { + return true; } -size_t -lldb_private::formatters::LibcxxStdUnorderedMapSyntheticFrontEnd::GetIndexOfChildWithName (const ConstString &name) -{ - return ExtractIndexFromString(name.GetCString()); +size_t lldb_private::formatters::LibcxxStdUnorderedMapSyntheticFrontEnd:: + GetIndexOfChildWithName(const ConstString &name) { + return ExtractIndexFromString(name.GetCString()); } -SyntheticChildrenFrontEnd* -lldb_private::formatters::LibcxxStdUnorderedMapSyntheticFrontEndCreator (CXXSyntheticChildren*, lldb::ValueObjectSP valobj_sp) -{ - return (valobj_sp ? new LibcxxStdUnorderedMapSyntheticFrontEnd(valobj_sp) : nullptr); +SyntheticChildrenFrontEnd * +lldb_private::formatters::LibcxxStdUnorderedMapSyntheticFrontEndCreator( + CXXSyntheticChildren *, lldb::ValueObjectSP valobj_sp) { + return (valobj_sp ? new LibcxxStdUnorderedMapSyntheticFrontEnd(valobj_sp) + : nullptr); } |