Files
git/mru.h
Olga Telezhnaya 8865859dfc mru: use double-linked list from list.h
Simplify mru.[ch] and related code by reusing the double-linked list
implementation from list.h instead of a custom one.
This commit is an intermediate step. Our final goal is to get rid of
mru.[ch] at all and inline all logic.

Mentored-by: Christian Couder <christian.couder@gmail.com>
Mentored by: Jeff King <peff@peff.net>
Signed-off-by: Olga Telezhnaia <olyatelezhnaya@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2017-10-01 17:30:26 +09:00

41 lines
980 B
C

#ifndef MRU_H
#define MRU_H
#include "list.h"
/**
* A simple most-recently-used cache, backed by a doubly-linked list.
*
* Usage is roughly:
*
* // Create a list. Zero-initialization is required.
* static struct mru cache;
* INIT_LIST_HEAD(&cache.list);
*
* // Add new item to the end of the list.
* void *item;
* ...
* mru_append(&cache, item);
*
* // Mark an item as used, moving it to the front of the list.
* mru_mark(&cache, item);
*
* // Reset the list to empty, cleaning up all resources.
* mru_clear(&cache);
*
* Note that you SHOULD NOT call mru_mark() and then continue traversing the
* list; it reorders the marked item to the front of the list, and therefore
* you will begin traversing the whole list again.
*/
struct mru {
struct list_head list;
void *item;
};
void mru_append(struct mru *head, void *item);
void mru_mark(struct mru *head, struct mru *entry);
void mru_clear(struct mru *head);
#endif /* MRU_H */