blob: 75f698b61a14a53c15533461c58aafae91d9081f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
/*
* Copyright (c) 2017-2019 Cisco and/or its affiliates.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @file listLRU.h
* @brief Maintains an LRU for the content store
*
* An LRU list is make up of LRU entries. The entries are bound to the list.
* The user of the list is reponsible for knowing when there's too many things
* and wants to remove one. The LRU list will grow without bound otherwise.
*
* The LRU list is meant to be used as an auxiliary data structure, not the
* primary storage of data elements.
*
*/
#ifndef listLRU_h
#define listLRU_h
struct list_lru_entry;
typedef struct list_lru_entry ListLruEntry;
struct list_lru;
typedef struct list_lru ListLru;
/**
* @function lruEntry_Destroy
* @abstract Destroys and element. This will also remove it from the list.
*/
void listLRU_EntryDestroy(ListLruEntry **entryPtr);
/**
* @function listLRU_EntryMoveToHead
* @abstract move an element to head
*/
void listLRU_EntryMoveToHead(ListLruEntry *entry);
/**
* @function lruEntry_GetData
* @abstract Returns the user-supplied opaque data when the entry was created
*/
void *listLRU_EntryGetData(ListLruEntry *entry);
/**
* @function listLRU_Create
* @abstract Creates a new Least-Recently-Used list
*/
ListLru *listLRU_Create();
/**
* @function listLRU_Destroy
* @abstract Destroys a list and frees all the elements in it
*/
void listLRU_Destroy(ListLru **listPtr);
/**
* Returns the number of items in the list
*
* @param [in] lru An allocated ListLru
* @retval number The number of items in the LRU list
*/
size_t listLRU_Length(const ListLru *lru);
/**
* @function listLRU_NewHeadEntry
* @abstract Creates a new entry for the list. It is inserted at the head of
* the list.
*/
ListLruEntry *listLRU_NewHeadEntry(ListLru *lru, void *data);
/**
* @function listLRU_PopTail
* @abstract Removes the tail element from the list and returns it to the user
* @discussion
* Pops the tail element. The user should examine its data to destroy their
* tail object, then call <code>LruEntry_Destroy()</code> to free the
* LRU entry.
*
* @return The tail element, or NULL for an empty list
*/
ListLruEntry *listLRU_PopTail(ListLru *list);
#endif // listLRU_h
|