Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(504)

Unified Diff: pkg/front_end/lib/src/incremental/byte_store.dart

Issue 2990323002: Move byte_store.dart and file_byte_store.dart to their own subdirectory. (Closed)
Patch Set: Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pkg/front_end/lib/src/incremental/byte_store.dart
diff --git a/pkg/front_end/lib/src/incremental/byte_store.dart b/pkg/front_end/lib/src/incremental/byte_store.dart
deleted file mode 100644
index 2f151f9678738767cb7536ada71a3078a88e9a3a..0000000000000000000000000000000000000000
--- a/pkg/front_end/lib/src/incremental/byte_store.dart
+++ /dev/null
@@ -1,111 +0,0 @@
-// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:collection';
-
-/**
- * Store of bytes associated with string keys.
- *
- * Each key must be not longer than 100 characters and consist of only `[a-z]`,
- * `[0-9]`, `.` and `_` characters. The key cannot be an empty string, the
- * literal `.`, or contain the sequence `..`.
- *
- * Note that associations are not guaranteed to be persistent. The value
- * associated with a key can change or become `null` at any point in time.
- *
- * TODO(scheglov) Research using asynchronous API.
- */
-abstract class ByteStore {
- /**
- * Return the bytes associated with the given [key].
- * Return `null` if the association does not exist.
- */
- List<int> get(String key);
-
- /**
- * Associate the given [bytes] with the [key].
- */
- void put(String key, List<int> bytes);
-}
-
-/**
- * [ByteStore] which stores data only in memory.
- */
-class MemoryByteStore implements ByteStore {
- final Map<String, List<int>> _map = {};
-
- @override
- List<int> get(String key) {
- return _map[key];
- }
-
- @override
- void put(String key, List<int> bytes) {
- _map[key] = bytes;
- }
-}
-
-/**
- * A wrapper around [ByteStore] which adds an in-memory LRU cache to it.
- */
-class MemoryCachingByteStore implements ByteStore {
- final ByteStore _store;
- final int _maxSizeBytes;
-
- final _map = new LinkedHashMap<String, List<int>>();
- int _currentSizeBytes = 0;
-
- MemoryCachingByteStore(this._store, this._maxSizeBytes);
-
- @override
- List<int> get(String key) {
- List<int> bytes = _map.remove(key);
- if (bytes == null) {
- bytes = _store.get(key);
- if (bytes != null) {
- _map[key] = bytes;
- _currentSizeBytes += bytes.length;
- _evict();
- }
- } else {
- _map[key] = bytes;
- }
- return bytes;
- }
-
- @override
- void put(String key, List<int> bytes) {
- _store.put(key, bytes);
- _currentSizeBytes -= _map[key]?.length ?? 0;
- _map[key] = bytes;
- _currentSizeBytes += bytes.length;
- _evict();
- }
-
- void _evict() {
- while (_currentSizeBytes > _maxSizeBytes) {
- if (_map.isEmpty) {
- // Should be impossible, since _currentSizeBytes should always match
- // _map. But recover anyway.
- assert(false);
- _currentSizeBytes = 0;
- break;
- }
- String key = _map.keys.first;
- List<int> bytes = _map.remove(key);
- _currentSizeBytes -= bytes.length;
- }
- }
-}
-
-/**
- * [ByteStore] which does not store any data.
- */
-class NullByteStore implements ByteStore {
- @override
- List<int> get(String key) => null;
-
- @override
- void put(String key, List<int> bytes) {}
-}

Powered by Google App Engine
This is Rietveld 408576698