Skip to content

Instantly share code, notes, and snippets.

@j-fu
Created May 20, 2025 12:49
Show Gist options
  • Save j-fu/fcb3a690e37cd213c873404d383dfc19 to your computer and use it in GitHub Desktop.
Save j-fu/fcb3a690e37cd213c873404d383dfc19 to your computer and use it in GitHub Desktop.
JDL2 MWE
using JLD2
abstract type AbstractStuffType end
struct Stuff1 <: AbstractStuffType end
struct Stuff2 <: AbstractStuffType end
struct Stuff3 <: AbstractStuffType end
const UnionStuff=Union{Type{Stuff1}, Type{Stuff2}, Type{Stuff3}}
function runtest()
u0=[Stuff1, Stuff2, Stuff3]
save("u0.jld2", "u0", u0)
u1=load("u0.jld2")["u0"]
@show u0==u1
v0=Type{Stuff1}[Stuff1, Stuff1, Stuff1]
save("v0.jld2", "v0", v0)
v1=load("v0.jld2")["v0"]
@show v0==v1
w0=UnionStuff[Stuff1, Stuff2, Stuff3]
save("w0.jld2", "w0", w0)
w1=load("w0.jld2")["w0"]
@show w0==w1
end
runtest()
using JLD2
struct VectorOfConstants{T, Tl} <: AbstractVector{T}
val::T
len::Tl
end
Base.IndexStyle(::Type{<:VectorOfConstants}) = IndexLinear()
Base.length(v::VectorOfConstants) = v.len
Base.size(v::VectorOfConstants) = (v.len,)
function Base.getindex(v::VectorOfConstants, i)
if i > v.len
throw(BoundsError(v, i))
end
return v.val
end
Base.iterate(v::VectorOfConstants) = (v.val, 1)
Base.iterate(v::VectorOfConstants, state) = state >= v.len ? nothing : (v.val, state + 1)
Base.unique(v::VectorOfConstants) = [v.val]
abstract type AbstractStuffType end
struct Stuff1 <: AbstractStuffType end
struct Stuff2 <: AbstractStuffType end
struct Stuff3 <: AbstractStuffType end
const UnionStuff=Union{Type{Stuff1}, Type{Stuff2}, Type{Stuff3}}
function runtest()
u0=VectorOfConstants(Stuff1, 3)
save("u0.jld2", "u0", u0)
u1=load("u0.jld2")["u0"]
@show u0==u1
v0=VectorOfConstants{Type{Stuff1}, Int}(Stuff1, 3)
save("v0.jld2", "v0", v0)
v1=load("v0.jld2")["v0"]
@show v0==v1
w0=VectorOfConstants{UnionStuff, Int}(Stuff1, 3)
save("w0.jld2", "w0", w0)
w1=load("w0.jld2")["w0"]
@show w0==w1
end
runtest()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment