TINMAN 3D / REALTIME TERRAIN
Software Development Kit - User Manual

class LruCache in Tinman.Core.Caching

A cache that uses a simple LRU (least-recently-used) replacement scheme.

sealed class LruCache with <TId>  
  implements ICache<TId>

Public / Attributes

Capacity

The capacity of this cache.

public property Capacity { get }
type int32
value [>0] The maximum number of entries this cache can hold.
implements ICacheBase.Capacity

InvalidId

The page ID value that represents non-existent mappings.

public property InvalidId { get }
type TId
value The invalid page ID value.
implements ICacheBase.InvalidId

Oldest

Returns the index of the oldest cache page.

public property Oldest { get }
type int32
value [-1..Capacity-1] Index of the least-recently used cache page or -1 if all pages are unused.
implements ICacheBase.Oldest

Public / Constructors

LruCache

Creates a new instance of LruCache.

public constructor LruCache (int32 capacity, ICacheCallback<TId> callback = null, TId invalidId = default(TId), EqualsDelegate<TId> equals = null, HashCodeDelegate<TId> hashCode = null)
params capacity [>0] The cache capacity.
  callback Optional cache callback. If null, using the Partial will have no effect. Defaults to null.
  invalidId The page ID value that represents an invalid page ID. Unused cached slots will be set to this value.
  equals The equality delegate. Defaults to null.
  hashCode Optional hash code delegate. Defaults to null.

Public / Methods

EvictAll

Evicts all pages from the cache.

public method EvictAll ()
implements ICacheBase.EvictAll

EvictId

Evicts the given page from the cache.

public method EvictId (TId pageId)
params pageId The cache page ID.
implements ICacheBase.EvictId

Remarks:

Requesting the given page later will cause a cache miss.

EvictIndex

Evicts the given page from the cache.

public method EvictIndex (int32 pageIndex)
params pageIndex [0..Capacity-1] The cache page index.
implements ICacheBase.EvictIndex

Remarks:

Requesting the given page later will cause a cache miss.

Fetch

Fetches a page from the cache, loading it if necessary.

public method Fetch (TId pageId)
type int32
params pageId The page ID.
returns
  • [>=0]:
    The page is present in the cache, the return value is its index.
  • [&lt;=-1]:
    The page is not present in the cache and shall be loaded into the cache using the page index given by -1-value, where value is the value that is returned by this method.
implements ICacheBase.Fetch

Fetches a page from the cache, loading it if necessary.

public method Fetch (TId pageId, PageLoadFlags loadFlags, bool keepLocked)
type int32
params pageId The page ID.
  loadFlags The flags that determine how to load the cache page. When set to Manual, cache page loading will not be performed. The calling code must load the cache page in this case.
  keepLocked Keep the cache page in locked state after fetching it (see LockPage)?
returns
  • [>=0]:
    The page is present in the cache, the return value is its index.
  • [&lt;=-1]:
    The page is not present in the cache and shall be loaded into the cache using the page index given by -1-return.
implements ICache.Fetch

Remarks:

When this method returns, all necessary calls to CachePageChoose and CachePageData will have been done.

GetId

Returns the page ID of the given page.

public method GetId (int32 pageIndex)
type TId
params pageIndex [0..Capacity-1] The page index.
returns The page ID.
implements ICacheBase.GetId

Remarks:

The state of the cache is not modified by this method.

GetIndex

Returns the cache page index of the given page.

public method GetIndex (TId pageId, bool hitPage = false)
type int32
params pageId The page ID.
  hitPage Update state of the cache by hitting the page if it exists?
returns [>=-1] The cache page index or -1.
implements ICacheBase.GetIndex

Remarks:

The state of the cache is not modified by this method if hitPage is false.

IsPageLocked

Is the given cache page locked?

public method IsPageLocked (int32 pageIndex)
type bool
params pageIndex [0..Capacity-1] Index of page to unlock.
returns true if the cache page is locked, false if not.
implements ICache.IsPageLocked

See also:

ICache.LockPage
ICache.UnlockPage

IsPartial

Has the given page been partially loaded?

public method IsPartial (int32 pageIndex)
type bool
params pageIndex [0..Capacity-1] The page index.
returns true if the given page has been loaded partially, false if the page is either fully loaded or non-existent.
implements ICache.IsPartial

See also:

PageLoadFlags.Partial

LockPage

Locks a cache page so that it will not be evicted from the cache by future calls.

public method LockPage (int32 pageIndex)
params pageIndex [0..Capacity-1] Index of page to lock.
implements ICache.LockPage

See also:

ICache.UnlockPage

UnlockPage

Unlocks a previously locked cache page.

public method UnlockPage (int32 pageIndex)
params pageIndex [0..Capacity-1] Index of page to unlock.
implements ICache.UnlockPage

See also:

ICache.LockPage

Use

The given cache page has been used.

public method Use (int32 pageIndex)
params pageIndex [0..Capacity-1] The page index.
implements ICacheBase.Use

Remarks:

Use this method to avoid specific pages to get evicted from the cache too soon.