From d0c61fcd1950f4ee9a50a8c95e6a38303475657c Mon Sep 17 00:00:00 2001 From: Kyle Date: Fri, 20 Dec 2024 17:03:54 +0800 Subject: [PATCH] Update README --- README.md | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0c803e8..27aa6b4 100644 --- a/README.md +++ b/README.md @@ -79,16 +79,42 @@ extension P { } struct PBuffer { - var startIndex: UnsafeHeterogeneousBuffer.Index { contents.startIndex } - var endIndex: UnsafeHeterogeneousBuffer.Index { contents.endIndex } - var contents: UnsafeHeterogeneousBuffer + + mutating func append(_ t: T) -> UnsafeHeterogeneousBuffer.Index where T: P { + contents.append(t, vtable: _VTable.self) + } + + subscript(_ type: T.Type) -> UnsafeMutablePointer? where T: P { + guard !contents.isEmpty else { return nil } + for elelement in contents { + guard elelement.hasType(type) else { + continue + } + return elelement.body(as: type) + } + return nil + } typealias Index = UnsafeHeterogeneousBuffer.Index struct Element { var base: UnsafeHeterogeneousBuffer.Element } + + var startIndex: UnsafeHeterogeneousBuffer.Index { contents.startIndex } + + var endIndex: UnsafeHeterogeneousBuffer.Index { contents.endIndex } + + var isEmpty: Bool { contents.isEmpty } + + subscript(position: UnsafeHeterogeneousBuffer.Index) -> Element { + _read { yield Element(base: contents[position]) } + } + + func index(after i: UnsafeHeterogeneousBuffer.Index) -> UnsafeHeterogeneousBuffer.Index { + contents.index(after: i) + } private class VTable: _UnsafeHeterogeneousBuffer_VTable { class func modify(elt: UnsafeHeterogeneousBuffer.Element, inputs: inout Int) {}