| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library index.page_node_manager; | 5 library index.page_node_manager; |
| 6 | 6 |
| 7 import 'dart:collection'; | 7 import 'dart:collection'; |
| 8 import 'dart:typed_data'; | 8 import 'dart:typed_data'; |
| 9 | 9 |
| 10 import 'package:analysis_server/src/index/lru_cache.dart'; | 10 import 'package:analysis_server/src/index/lru_cache.dart'; |
| 11 | 11 |
| 12 import 'b_plus_tree.dart'; | 12 import 'b_plus_tree.dart'; |
| 13 | 13 |
| 14 | 14 |
| 15 /** | 15 /** |
| 16 * A [NodeManager] that caches a specified number of index and leaf nodes. | 16 * A [NodeManager] that caches a specified number of index and leaf nodes. |
| 17 */ | 17 */ |
| 18 class CachingNodeManager<K, V, N> implements NodeManager<K, V, N> { | 18 class CachingNodeManager<K, V, N> implements NodeManager<K, V, N> { |
| 19 final NodeManager<K, V, N> _delegate; | 19 final NodeManager<K, V, N> _delegate; |
| 20 LRUCache<N, IndexNodeData<K, N>> _indexCache; | 20 LRUCache<N, IndexNodeData<K, N>> _indexCache; |
| 21 LRUCache<N, LeafNodeData<K, V>> _leafCache; | 21 LRUCache<N, LeafNodeData<K, V>> _leafCache; |
| 22 | 22 |
| 23 CachingNodeManager(this._delegate, int indexNodeCacheSize, | 23 CachingNodeManager(this._delegate, int indexNodeCacheSize, |
| 24 int leafNodeCacheSize) { | 24 int leafNodeCacheSize) { |
| 25 // TODO(scheglov) method pointers don't work with mocks | |
| 26 // _indexCache = new LRUCache<N, IndexNodeData<K, N>>(indexNodeCacheSize, | |
| 27 // _delegate.writeIndex); | |
| 28 // _leafCache = new LRUCache<N, LeafNodeData<K, V>>(leafNodeCacheSize, | |
| 29 // _delegate.writeLeaf); | |
| 30 _indexCache = new LRUCache<N, IndexNodeData<K, N>>(indexNodeCacheSize, | 25 _indexCache = new LRUCache<N, IndexNodeData<K, N>>(indexNodeCacheSize, |
| 31 (N key, IndexNodeData<K, N> value) { | 26 _delegate.writeIndex); |
| 32 _delegate.writeIndex(key, value); | 27 _leafCache = new LRUCache<N, LeafNodeData<K, V>>(leafNodeCacheSize, |
| 33 }); | 28 _delegate.writeLeaf); |
| 34 _leafCache = new LRUCache<N, LeafNodeData<K, V>>(leafNodeCacheSize, (N key, | |
| 35 LeafNodeData<K, V> value) { | |
| 36 _delegate.writeLeaf(key, value); | |
| 37 }); | |
| 38 } | 29 } |
| 39 | 30 |
| 40 @override | 31 @override |
| 41 int get maxIndexKeys => _delegate.maxIndexKeys; | 32 int get maxIndexKeys => _delegate.maxIndexKeys; |
| 42 | 33 |
| 43 @override | 34 @override |
| 44 int get maxLeafKeys => _delegate.maxLeafKeys; | 35 int get maxLeafKeys => _delegate.maxLeafKeys; |
| 45 | 36 |
| 46 @override | 37 @override |
| 47 N createIndex() { | 38 N createIndex() { |
| (...skipping 405 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 453 @override | 444 @override |
| 454 int decode(ByteData buffer) { | 445 int decode(ByteData buffer) { |
| 455 return buffer.getUint32(0); | 446 return buffer.getUint32(0); |
| 456 } | 447 } |
| 457 | 448 |
| 458 @override | 449 @override |
| 459 void encode(ByteData buffer, int element) { | 450 void encode(ByteData buffer, int element) { |
| 460 buffer.setUint32(0, element); | 451 buffer.setUint32(0, element); |
| 461 } | 452 } |
| 462 } | 453 } |
| OLD | NEW |