pro data_cache,name,data,set=set,clear=clear,get=get,no_copy=no_copy,help=help
common data_cache_com,dcache
csh = {data_cache,name:'',ptr:ptr_new(),time:0d}
if size(/type,dcache) ne 8 then dcache=csh
if keyword_set(help) then begin
for i=1,n_elements(dcache)-1 do begin
printdat,recursemax=help+0,*dcache[i].ptr,varname=dcache[i].name
endfor
return
endif
w = where(dcache.name eq name,nw)
if keyword_set(set) then begin
csh.name = name
csh.ptr = ptr_new(data,no_copy=no_copy)
csh.time = systime(1)
if nw ge 1 then begin
ptr_free,ptr_extract(dcache[w])
dcache[w] = csh
endif else begin
dcache = [dcache,csh]
endelse
dprint,dlevel=3,"Cached: ",name
endif
if keyword_set(get) then begin
if nw ge 1 then begin
data = *(dcache[w].ptr)
endif else begin
data = 0
endelse
endif
end