Vim documentation: vital/System/Cache/Base
main help file
vital/System/Cache/Base.txt An abstract class of unified cache system
Maintainer: Alisue <lambdalisue@hashnote.net>
==============================================================================
CONTENTS Vital.System.Cache.Base-contents
Introductions Vital.System.Cache.Base-intro
Tutorial Vital.System.Cache.Base-tutorial
Interface Vital.System.Cache.Base-interface
Functions Vital.System.Cache.Base-functions
Methods Vital.System.Cache.Base-methods
==============================================================================
INTRODUCTIONS Vital.System.Cache.Base-intro
Vital.System.Cache.Base is an abstract class of unified cache system.
The following variants are currently available.
- Vital.System.Cache.Dummy : A dummy cache system
- Vital.System.Cache.Memory : A dictionary instance based cache system
- Vital.System.Cache.File : A file based cache system
- Vital.System.Cache.SingleFile : A single file based cache system
This document is for creating your own variants. See Vital.System.Cache for
the cache system usage.
==============================================================================
Tutorial Vital.System.Cache.Base-tutorial
First of all, create s:new(...) function to return an instance of your variant
like:
function! s:_vital_loaded(V) abort " {{{
let s:Base = a:V.import('System.Cache.Base')
endfunction " }}}
function! s:_vital_depends() abort " {{{
return ['System.Cache.Base']
endfunction " }}}
let s:cache = {
\ '_cached': {},
\ '__name__': 'your_variant_name',
\}
function! s:new(...)
return extend(
\ call(s:Base.new, a:000, s:Base),
\ deepcopy(s:cache)
\)
endfunction
Then add "has", "get", "set", "keys", "remove", and "clear" methods into your
cache instance like:
function! s:cache.has(name) abort
let cache_key = self.cache_key(a:name)
return has_key(self._cached, cache_key)
endfunction
function! s:cache.get(name, ...) abort
let default = get(a:000, 0, '')
let cache_key = self.cache_key(a:name)
if has_key(self._cached, cache_key)
return self._cached[cache_key]
else
return default
endif
endfunction
function! s:cache.set(name, value) abort
let cache_key = self.cache_key(a:name)
let self._cached[cache_key] = a:value
endfunction
function! s:cache.keys() abort
return keys(self._cached)
endfunction
function! s:cache.remove(name) abort
let cache_key = self.cache_key(a:name)
if has_key(self._cached, cache_key)
unlet self._cached[cache_key]
endif
endfunction
function! s:cache.clear() abort
let self._cached = {}
endfunction
==============================================================================
INTERFACE Vital.System.Cache.Base-interface
To provide unified interface. The following functions and method are required
to be implemented.
-------------------------------------------------------------------------------
FUNCTIONS Vital.System.Cache.Base-functions
new([{options}]) Vital.System.Cache.Base.new()
Create a new instance of System.Cache.Base.
If your variant require any extra information, use a dictionary to
specify values like:
let s:cache = { '__name__': 'your_variant_name' }
function! s:new(...) abort
let options = extend({
\ 'foo': 'bar',
\}, get(a:000, 0, {}))
return extend(
\ call(s:Base.new, a:000, s:Base),
\ extend(options, deepcopy(s:cache))
\)
endfunction
-------------------------------------------------------------------------------
METHODS Vital.System.Cache.Base-methods
cache_key({obj}) Vital.System.Cache.Base-instance.cache_key()
Return a String which will be used as a cache key.
Variants can override this method to create a cache key from {obj}.
In default, it returns {obj} if the {obj} is String. Otherwise it
returns a string representation (See string() for details) of the
{obj}.
has({name}) Vital.System.Cache.Base-instance.has()
Whether the cache instance has a {name} cache or not.
VARIANTS MUST OVERRIDE THIS METHOD
{name} (required)
A name of the cache. An actual cache key SHOULD be created via
Vital.System.Cache.Base-instance.cache_key() method thus {name} is not
required to be String.
See the following example:
function! s:cache.has(name) abort
let cache_key = self.cache_key(a:name)
return has_key(self._cached, cache_key)
endfunction
Vital.System.Cache.Base-instance.get()
get({name}[, {default}])
Return a {name} cache. If no {name} cache is found, it returns
{default} or an empty String.
VARIANTS MUST OVERRIDE THIS METHOD
{name} (required)
A name of the cache. An actual cache key SHOULD be created via
Vital.System.Cache.Base-instance.cache_key() method thus {name} is not
required to be String.
{default} (optional)
A default value. If no {default} is specified, an empty String
should be used.
See the following example:
function! s:cache.get(name, ...) abort
let default = get(a:000, 0, '')
let cache_key = self.cache_key(a:name)
if has_key(self._cached, cache_key)
return self._cached[cache_key]
endif
return default
endfunction
set({name}, {value}) Vital.System.Cache.Base-instance.set()
Save {value} as a {name} cache.
VARIANTS MUST OVERRIDE THIS METHOD
{name} (required)
A name of the cache. An actual cache key SHOULD be created via
Vital.System.Cache.Base-instance.cache_key() method thus {name} is not
required to be String.
{value} (required)
A value of the cache.
See the following example:
function! s:cache.set(name, value) abort
let cache_key = self.cache_key(a:name)
let self._cached[cache_key] = a:value
endfunction
keys() Vital.System.Cache.Base-instance.keys()
Return a list of cache keys
VARIANTS MUST OVERRIDE THIS METHOD
remove({name}) Vital.System.Cache.Base-instance.remove()
Remove a {name} cache. If no {name} cache is found, it should do
nothing.
VARIANTS MUST OVERRIDE THIS METHOD
{name} (required)
A name of the cache. An actual cache key will be created via
Vital.System.Cache.Base-instance.cache_key() method thus {name} is not
required to be String.
See the following example:
function! s:cache.remove(name) abort
let cache_key = self.cache_key(a:name)
if has_key(self._cached, cache_key)
unlet self._cached[cache_key]
endif
endfunction
clear() Vital.System.Cache.Base-instance.clear()
Clear all caches
VARIANTS MUST OVERRIDE THIS METHOD
on_changed() Vital.System.Cache.Base-instance.on_changed()
A user defined hook method. This method is called when the content of
the cache is changed, namely after the following methods:
- Vital.System.Cache.Base-instance.set()
- Vital.System.Cache.Base-instance.remove()
- Vital.System.Cache.Base-instance.clear()
==============================================================================
vim:tw=78:fo=tcq2mM:ts=8:ft=help:norl
top - main help file - tag index