@aws-amplify/core
Version:
Core category of aws-amplify
1 lines • 8.12 kB
Source Map (JSON)
{"version":3,"file":"CacheList.mjs","sources":["../../../../src/Cache/utils/CacheList.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { CacheErrorCode, assert } from './errorHelpers';\nclass DoubleLinkedNode {\n constructor(keyVal) {\n this.key = keyVal || '';\n this.prevNode = null;\n this.nextNode = null;\n }\n}\n/**\n * double linked list plus a hash table inside\n * each key in the cache stored as a node in the list\n * recently visited node will be rotated to the head\n * so the Last Recently Visited node will be at the tail\n *\n * @member head - dummy head of the linked list\n * @member tail - dummy tail of the linked list\n * @member hashtable - the hashtable which maps cache key to list node\n * @member length - length of the list\n */\nexport class CacheList {\n /**\n * initialization\n */\n constructor() {\n this.head = new DoubleLinkedNode();\n this.tail = new DoubleLinkedNode();\n this.hashtable = {};\n this.length = 0;\n this.head.nextNode = this.tail;\n this.tail.prevNode = this.head;\n }\n /**\n * insert node to the head of the list\n *\n * @param node\n */\n insertNodeToHead(node) {\n const tmp = this.head.nextNode;\n this.head.nextNode = node;\n node.nextNode = tmp;\n node.prevNode = this.head;\n assert(tmp !== null, CacheErrorCode.NullPreviousNode);\n tmp.prevNode = node;\n this.length = this.length + 1;\n }\n /**\n * remove node\n *\n * @param node\n */\n removeNode(node) {\n assert(node.prevNode !== null, CacheErrorCode.NullPreviousNode);\n assert(node.nextNode !== null, CacheErrorCode.NullNextNode);\n node.prevNode.nextNode = node.nextNode;\n node.nextNode.prevNode = node.prevNode;\n node.prevNode = null;\n node.nextNode = null;\n this.length = this.length - 1;\n }\n /**\n * @return true if list is empty\n */\n isEmpty() {\n return this.length === 0;\n }\n /**\n * refresh node so it is rotated to the head\n *\n * @param key - key of the node\n */\n refresh(key) {\n const node = this.hashtable[key];\n this.removeNode(node);\n this.insertNodeToHead(node);\n }\n /**\n * insert new node to the head and add it in the hashtable\n *\n * @param key - the key of the node\n */\n insertItem(key) {\n const node = new DoubleLinkedNode(key);\n this.hashtable[key] = node;\n this.insertNodeToHead(node);\n }\n /**\n * @return the LAST Recently Visited key\n */\n getLastItem() {\n assert(this.tail.prevNode !== null, CacheErrorCode.NullPreviousNode);\n return this.tail.prevNode.key;\n }\n /**\n * remove the cache key from the list and hashtable\n * @param key - the key of the node\n */\n removeItem(key) {\n const removedItem = this.hashtable[key];\n this.removeNode(removedItem);\n delete this.hashtable[key];\n }\n /**\n * @return length of the list\n */\n getSize() {\n return this.length;\n }\n /**\n * @return true if the key is in the hashtable\n * @param key\n */\n containsKey(key) {\n return key in this.hashtable;\n }\n /**\n * clean up the list and hashtable\n */\n clearList() {\n for (const key of Object.keys(this.hashtable)) {\n if (Object.prototype.hasOwnProperty.call(this.hashtable, key)) {\n delete this.hashtable[key];\n }\n }\n this.head.nextNode = this.tail;\n this.tail.prevNode = this.head;\n this.length = 0;\n }\n /**\n * @return all keys in the hashtable\n */\n getKeys() {\n return Object.keys(this.hashtable);\n }\n /**\n * mainly for test\n *\n * @param key\n * @return true if key is the head node\n */\n isHeadNode(key) {\n const node = this.hashtable[key];\n return node.prevNode === this.head;\n }\n /**\n * mainly for test\n *\n * @param key\n * @return true if key is the tail node\n */\n isTailNode(key) {\n const node = this.hashtable[key];\n return node.nextNode === this.tail;\n }\n}\n"],"names":[],"mappings":"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"}