Skip to content

Commit afc8a04

Browse files
committed
Add preserve_buffer
1 parent ae83fa2 commit afc8a04

File tree

2 files changed

+9
-2
lines changed

2 files changed

+9
-2
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "ManualMemory"
22
uuid = "d125e4d3-2237-4719-b19c-fa641b8a4667"
33
authors = ["chriselrod <[email protected]> and contributors"]
4-
version = "0.1.0"
4+
version = "0.1.1"
55

66
[compat]
77
julia = "1.4"

src/ManualMemory.jl

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,20 @@ end
1717
Expr(:block, Expr(:meta,:inline), :(ccall(:jl_value_ptr, Ref{$T}, (Ptr{Cvoid},), unsafe_load(Base.unsafe_convert(Ptr{Ptr{Cvoid}}, p)))))
1818
end
1919
end
20-
@inline load(p::Ptr{UInt}, ::Type{T}) where {T} = load(reinterpret(Ptr{T}, p))
2120
@generated function store!(p::Ptr{T}, v::T) where {T}
2221
if Base.allocatedinline(T)
2322
Expr(:block, Expr(:meta,:inline), :(unsafe_store!(p, v); return nothing))
2423
else
2524
Expr(:block, Expr(:meta,:inline), :(unsafe_store!(Base.unsafe_convert(Ptr{Ptr{Cvoid}}, p), Base.pointer_from_objref(v)); return nothing))
2625
end
2726
end
27+
@generated offsetsize(::Type{T}) where {T} = Base.allocatedinline(T) ? sizeof(T) : sizeof(Int)
28+
29+
@inline store!(p::Ptr{T}, v) where {T} = store!(p, convert(T, v))
30+
@inline preserve_buffer(x) = x
31+
@inline preserve_buffer(A::AbstractArray) = _preserve_buffer(A, parent(A))
32+
@inline _preserve_buffer(a::A, p::P) where {A,P<:AbstractArray} = _preserve_buffer(p, parent(p))
33+
@inline _preserve_buffer(a::A, p::A) where {A<:AbstractArray} = a
34+
@inline _preserve_buffer(a::A, p::P) where {A,P} = p
2835

2936
end

0 commit comments

Comments
 (0)