|
LLVM 23.0.0git
|
Provides amortized O(1) random access to a CodeView type stream. More...
#include "llvm/DebugInfo/CodeView/LazyRandomTypeCollection.h"
Provides amortized O(1) random access to a CodeView type stream.
Normally to access a type from a type stream, you must know its byte offset into the type stream, because type records are variable-lengthed. However, this is not the way we prefer to access them. For example, given a symbol record one of the fields may be the TypeIndex of the symbol's type record. Or given a type record such as an array type, there might be a TypeIndex for the element type. Sequential access is perfect when we're just dumping every entry, but it's very poor for real world usage.
Type streams in PDBs contain an additional field which is a list of pairs containing indices and their corresponding offsets, roughly every ~8KB of record data. This general idea need not be confined to PDBs though. By supplying such an array, the producer of a type stream can allow the consumer much better access time, because the consumer can find the nearest index in this array, and do a linear scan forward only from there.
LazyRandomTypeCollection implements this algorithm, but additionally goes one step further by caching offsets of every record that has been visited at least once. This way, even repeated visits of the same record will never require more than one linear scan. For a type stream of N elements divided into M chunks of roughly equal size, this yields a worst case lookup time of O(N/M) and an amortized time of O(1).
Definition at line 49 of file LazyRandomTypeCollection.h.
|
explicit |
Definition at line 31 of file LazyRandomTypeCollection.cpp.
References LazyRandomTypeCollection().
Referenced by LazyRandomTypeCollection(), LazyRandomTypeCollection(), LazyRandomTypeCollection(), and LazyRandomTypeCollection().
Definition at line 47 of file LazyRandomTypeCollection.cpp.
References llvm::Data, and LazyRandomTypeCollection().
| LazyRandomTypeCollection::LazyRandomTypeCollection | ( | ArrayRef< uint8_t > | Data, |
| uint32_t | RecordCountHint ) |
Definition at line 42 of file LazyRandomTypeCollection.cpp.
References llvm::Data, and LazyRandomTypeCollection().
| LazyRandomTypeCollection::LazyRandomTypeCollection | ( | const CVTypeArray & | Types, |
| uint32_t | RecordCountHint, | ||
| PartialOffsetArray | PartialOffsets ) |
Definition at line 35 of file LazyRandomTypeCollection.cpp.
| LazyRandomTypeCollection::LazyRandomTypeCollection | ( | const CVTypeArray & | Types, |
| uint32_t | RecordCountHint ) |
Definition at line 52 of file LazyRandomTypeCollection.cpp.
References LazyRandomTypeCollection().
|
overridevirtual |
Implements llvm::codeview::TypeCollection.
Definition at line 153 of file LazyRandomTypeCollection.cpp.
Implements llvm::codeview::TypeCollection.
Definition at line 140 of file LazyRandomTypeCollection.cpp.
Referenced by getOffsetOfType(), getType(), and getTypeOrError().
|
overridevirtual |
Implements llvm::codeview::TypeCollection.
Definition at line 209 of file LazyRandomTypeCollection.cpp.
References llvm::consumeError(), llvm::codeview::EC, and llvm::codeview::TypeIndex::fromArrayIndex().
Implements llvm::codeview::TypeCollection.
Definition at line 218 of file LazyRandomTypeCollection.cpp.
References llvm::consumeError(), and llvm::codeview::EC.
Definition at line 79 of file LazyRandomTypeCollection.cpp.
References assert(), contains(), and error.
Implements llvm::codeview::TypeCollection.
Definition at line 86 of file LazyRandomTypeCollection.cpp.
References assert(), llvm::consumeError(), contains(), and llvm::codeview::EC.
Referenced by llvm::pdb::NativeInlineSiteSymbol::getName().
Implements llvm::codeview::TypeCollection.
Definition at line 118 of file LazyRandomTypeCollection.cpp.
References llvm::codeview::computeTypeName(), llvm::consumeError(), llvm::codeview::EC, I, and llvm::codeview::TypeIndex::simpleTypeName().
Referenced by llvm::pdb::NativeInlineSiteSymbol::getName().
| llvm::Expected< CVType > LazyRandomTypeCollection::getTypeOrError | ( | TypeIndex | Index | ) |
Definition at line 101 of file LazyRandomTypeCollection.cpp.
References contains(), llvm::createStringError(), and llvm::codeview::EC.
Referenced by tryGetType().
|
overridevirtual |
Implements llvm::codeview::TypeCollection.
Definition at line 286 of file LazyRandomTypeCollection.cpp.
References llvm::Data, and llvm_unreachable.
Definition at line 73 of file LazyRandomTypeCollection.cpp.
References llvm::Data, llvm::little, and reset().
| void LazyRandomTypeCollection::reset | ( | BinaryStreamReader & | Reader, |
| uint32_t | RecordCountHint ) |
Definition at line 56 of file LazyRandomTypeCollection.cpp.
References llvm::BinaryStreamReader::bytesRemaining(), error, and llvm::BinaryStreamReader::readArray().
Definition at line 68 of file LazyRandomTypeCollection.cpp.
References llvm::Data, llvm::little, and reset().
|
overridevirtual |
Implements llvm::codeview::TypeCollection.
Definition at line 151 of file LazyRandomTypeCollection.cpp.
Definition at line 114 of file LazyRandomTypeCollection.cpp.
References llvm::expectedToOptional(), and getTypeOrError().