003 File Manager
Current Path:
/usr/src/contrib/llvm-project/lldb/include/lldb/Utility
usr
/
src
/
contrib
/
llvm-project
/
lldb
/
include
/
lldb
/
Utility
/
📁
..
📄
AnsiTerminal.h
(4.97 KB)
📄
ArchSpec.h
(17.08 KB)
📄
Args.h
(13.72 KB)
📄
Baton.h
(2.25 KB)
📄
Broadcaster.h
(17.55 KB)
📄
CompletionRequest.h
(9.23 KB)
📄
Connection.h
(6.42 KB)
📄
ConstString.h
(17.92 KB)
📄
DataBuffer.h
(3.39 KB)
📄
DataBufferHeap.h
(3.65 KB)
📄
DataBufferLLVM.h
(1.17 KB)
📄
DataEncoder.h
(8.45 KB)
📄
DataExtractor.h
(39.18 KB)
📄
Endian.h
(865 B)
📄
Environment.h
(2.68 KB)
📄
Event.h
(6.64 KB)
📄
FileSpec.h
(15.41 KB)
📄
Flags.h
(3.39 KB)
📄
GDBRemote.h
(4.15 KB)
📄
IOObject.h
(1.38 KB)
📄
Iterable.h
(5.5 KB)
📄
LLDBAssert.h
(911 B)
📄
Listener.h
(5.2 KB)
📄
Log.h
(10.51 KB)
📄
Logging.h
(2.27 KB)
📄
NameMatches.h
(716 B)
📄
Predicate.h
(8.08 KB)
📄
ProcessInfo.h
(7.92 KB)
📄
RangeMap.h
(23.05 KB)
📄
RegisterValue.h
(7.08 KB)
📄
RegularExpression.h
(3.2 KB)
📄
Reproducer.h
(13.25 KB)
📄
ReproducerInstrumentation.h
(39.38 KB)
📄
Scalar.h
(11.27 KB)
📄
SelectHelper.h
(2.53 KB)
📄
SharedCluster.h
(1.69 KB)
📄
State.h
(2.54 KB)
📄
Status.h
(7.31 KB)
📄
Stream.h
(14.34 KB)
📄
StreamCallback.h
(978 B)
📄
StreamString.h
(1.23 KB)
📄
StreamTee.h
(4.52 KB)
📄
StringExtractor.h
(3.13 KB)
📄
StringExtractorGDBRemote.h
(6.12 KB)
📄
StringLexer.h
(1.31 KB)
📄
StringList.h
(3.47 KB)
📄
StructuredData.h
(15.49 KB)
📄
TildeExpressionResolver.h
(2.42 KB)
📄
Timeout.h
(2.45 KB)
📄
Timer.h
(1.87 KB)
📄
TraceOptions.h
(1.79 KB)
📄
UUID.h
(3.74 KB)
📄
UriParser.h
(1.01 KB)
📄
UserID.h
(2.8 KB)
📄
UserIDResolver.h
(1.8 KB)
📄
VASPrintf.h
(636 B)
📄
VMRange.h
(3.06 KB)
📄
XcodeSDK.h
(2.85 KB)
Editing: Iterable.h
//===-- Iterable.h ----------------------------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef LLDB_UTILITY_ITERABLE_H #define LLDB_UTILITY_ITERABLE_H #include <utility> namespace lldb_private { template <typename I, typename E> E map_adapter(I &iter) { return iter->second; } template <typename I, typename E> E vector_adapter(I &iter) { return *iter; } template <typename I, typename E> E list_adapter(I &iter) { return *iter; } template <typename C, typename E, E (*A)(typename C::const_iterator &)> class AdaptedConstIterator { public: typedef typename C::const_iterator BackingIterator; // Wrapping constructor AdaptedConstIterator(BackingIterator backing_iterator) : m_iter(backing_iterator) {} // Default-constructible AdaptedConstIterator() : m_iter() {} // Copy-constructible AdaptedConstIterator(const AdaptedConstIterator &rhs) : m_iter(rhs.m_iter) {} // Copy-assignable AdaptedConstIterator &operator=(const AdaptedConstIterator &rhs) { m_iter = rhs.m_iter; return *this; } // Destructible ~AdaptedConstIterator() = default; // Comparable bool operator==(const AdaptedConstIterator &rhs) { return m_iter == rhs.m_iter; } bool operator!=(const AdaptedConstIterator &rhs) { return m_iter != rhs.m_iter; } // Rvalue dereferenceable E operator*() { return (*A)(m_iter); } E operator->() { return (*A)(m_iter); } // Offset dereferenceable E operator[](typename BackingIterator::difference_type offset) { return AdaptedConstIterator(m_iter + offset); } // Incrementable AdaptedConstIterator &operator++() { m_iter++; return *this; } // Decrementable AdaptedConstIterator &operator--() { m_iter--; return *this; } // Compound assignment AdaptedConstIterator & operator+=(typename BackingIterator::difference_type offset) { m_iter += offset; return *this; } AdaptedConstIterator & operator-=(typename BackingIterator::difference_type offset) { m_iter -= offset; return *this; } // Arithmetic AdaptedConstIterator operator+(typename BackingIterator::difference_type offset) { return AdaptedConstIterator(m_iter + offset); } AdaptedConstIterator operator-(typename BackingIterator::difference_type offset) { return AdaptedConstIterator(m_iter - offset); } // Comparable bool operator<(AdaptedConstIterator &rhs) { return m_iter < rhs.m_iter; } bool operator<=(AdaptedConstIterator &rhs) { return m_iter <= rhs.m_iter; } bool operator>(AdaptedConstIterator &rhs) { return m_iter > rhs.m_iter; } bool operator>=(AdaptedConstIterator &rhs) { return m_iter >= rhs.m_iter; } template <typename C1, typename E1, E1 (*A1)(typename C1::const_iterator &)> friend AdaptedConstIterator<C1, E1, A1> operator+(typename C1::const_iterator::difference_type, AdaptedConstIterator<C1, E1, A1> &); template <typename C1, typename E1, E1 (*A1)(typename C1::const_iterator &)> friend typename C1::const_iterator::difference_type operator-(AdaptedConstIterator<C1, E1, A1> &, AdaptedConstIterator<C1, E1, A1> &); template <typename C1, typename E1, E1 (*A1)(typename C1::const_iterator &)> friend void swap(AdaptedConstIterator<C1, E1, A1> &, AdaptedConstIterator<C1, E1, A1> &); private: BackingIterator m_iter; }; template <typename C, typename E, E (*A)(typename C::const_iterator &)> AdaptedConstIterator<C, E, A> operator+( typename AdaptedConstIterator<C, E, A>::BackingIterator::difference_type offset, AdaptedConstIterator<C, E, A> &rhs) { return rhs.operator+(offset); } template <typename C, typename E, E (*A)(typename C::const_iterator &)> typename AdaptedConstIterator<C, E, A>::BackingIterator::difference_type operator-(AdaptedConstIterator<C, E, A> &lhs, AdaptedConstIterator<C, E, A> &rhs) { return (lhs.m_iter - rhs.m_iter); } template <typename C, typename E, E (*A)(typename C::const_iterator &)> void swap(AdaptedConstIterator<C, E, A> &lhs, AdaptedConstIterator<C, E, A> &rhs) { std::swap(lhs.m_iter, rhs.m_iter); } template <typename C, typename E, E (*A)(typename C::const_iterator &)> class AdaptedIterable { private: const C &m_container; public: AdaptedIterable(const C &container) : m_container(container) {} AdaptedConstIterator<C, E, A> begin() { return AdaptedConstIterator<C, E, A>(m_container.begin()); } AdaptedConstIterator<C, E, A> end() { return AdaptedConstIterator<C, E, A>(m_container.end()); } }; template <typename C, typename E, E (*A)(typename C::const_iterator &), typename MutexType> class LockingAdaptedIterable : public AdaptedIterable<C, E, A> { public: LockingAdaptedIterable(C &container, MutexType &mutex) : AdaptedIterable<C, E, A>(container), m_mutex(&mutex) { m_mutex->lock(); } LockingAdaptedIterable(LockingAdaptedIterable &&rhs) : AdaptedIterable<C, E, A>(rhs), m_mutex(rhs.m_mutex) { rhs.m_mutex = nullptr; } ~LockingAdaptedIterable() { if (m_mutex) m_mutex->unlock(); } private: MutexType *m_mutex = nullptr; LockingAdaptedIterable(const LockingAdaptedIterable &) = delete; LockingAdaptedIterable &operator=(const LockingAdaptedIterable &) = delete; }; } // namespace lldb_private #endif // LLDB_UTILITY_ITERABLE_H
Upload File
Create Folder