SoFunction
Updated on 2025-04-12

Eight-degree space cache class


<%
class Cache
private obj            'cache content
private expireTime       'Expiration Time
private expireTimeName   'Expiration time application name
private cacheName       'cache content application name
    private path            'url

    private sub class_initialize()
        path=("url")
        path=left(path,instrRev(path,"/"))
    end sub

    private sub class_terminate()
    end sub

    public property get blEmpty
'Is it empty
        if isempty(obj) then
            blEmpty=true
        else
            blEmpty=false
        end if
    end property

    public property get valid
'Is it available (expired)
        if isempty(obj) or not isDate(expireTime) then
            valid=false
        elseif CDate(expireTime)<now then
                valid=false
        else
            valid=true
        end if
    end property

    public property let name(str)
'Set cache name
        cacheName=str & path
        obj=application(cacheName)
        expireTimeName=str & "expires" & path
        expireTime=application(expireTimeName)
    end property

    public property let expires(tm)
'Reset the expiration time
        expireTime=tm
        
        application(expireTimeName)=expireTime
        
    end property

    public sub add(var,expire)
'Assignment
        if isempty(var) or not isDate(expire) then
            exit sub
        end if
        obj=var
        expireTime=expire
        
        application(cacheName)=obj
        application(expireTimeName)=expireTime
        
    end sub

    public property get value
'Get the value
        if isempty(obj) or not isDate(expireTime) then
            value=null
        elseif CDate(expireTime)<now then
            value=null
        else
            value=obj
        end if
    end property

    public sub makeEmpty()
'Release application
        
        application(cacheName)=empty
        application(expireTimeName)=empty
        
        obj=empty
        expireTime=empty
    end sub

    public function equal(var2)
'Compare
        if typename(obj)<>typename(var2) then
            equal=false
        elseif typename(obj)="Object" then
            if obj is var2 then
                equal=true
            else
                equal=false
            end if
        elseif typename(obj)="Variant()" then
            if join(obj,"^")=join(var2,"^") then
                equal=true
            else
                equal=false
            end if
        else
            if obj=var2 then
                equal=true
            else
                equal=false
            end if
        end if
    end function
end class
%>