LRU Design
==========

This got slightly complex, because I tried to be clever. But the concept is easy, a
list and an unordered map keeps the LRU state.


                                                    +-----------------------+    +----------------------------------+
                                                    |        LRUList        |    |              LRUMap              |
                                                    |        -------        |    |              ------              |
                                                    |+---------------------+|    |+--------------------------------+|
+---------------------+   +---------------------+   ||      LRUEntry       <+----+| {LRUHash *, LRUList::iterator} ||
|       LRUHash       |   |      LRUEntry       |   |+---------------------+|    |+--------------------------------+|
|      --------       |<--+      --------       |<--+|      LRUEntry       <+----+| {LRUHash *, LRUList::iterator} ||
|  u_char _hash[20]   |   | <LRUHash, unsigned> |   |+---------------------+|    |+--------------------------------+|
+---------------------+   +---------------------+   ||      LRUEntry       <+----+| {LRUHash *, LRUList::iterator} ||
                            +-----------------+     |+---------------------+|    |+--------------------------------+|
                            | first = LRUHash |     |                       |    |                                  |
                            |second = unsigned|     |           *           |    |                *                 |
                            +-----------------+     |           *           |    |                *                 |
                                                    |           *           |    |                *                 |
                                                    |                       |    |                                  |
                                                    |+---------------------+|    |+--------------------------------+|
                                                    ||      LRUEntry       ||    || {LRUHash *, LRUList::iterator} ||
                                                    |+---------------------+|    |+--------------------------------+|
                                                    +-----------------------+    +----------------------------------+
                                                                                     +--------------------------+
                                                                                     |    first  = LRUHash*     |
                                                                                     |second = LRUList::iterator|
                                                                                     +--------------------------+
