blob: 08c2db9b7bfd985ff445dd6443b6c669d31f10be [file] [log] [blame]
// Copyright (c) 2013, 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.
library barback.asset_set;
import 'dart:collection';
import 'asset.dart';
import 'asset_id.dart';
/// A set of [Asset]s with distinct IDs.
///
/// This uses the [AssetId] of each asset to determine uniqueness, so no two
/// assets with the same ID can be in the set.
class AssetSet extends IterableBase<Asset> {
final _assets = new Map<AssetId, Asset>();
AssetSet();
/// Creates a new AssetSet from the contents of [other].
///
/// If multiple assets in [other] have the same id, the last one takes
/// precedence.
AssetSet.from(Iterable<Asset> other) {
for (var asset in other) {
_assets[asset.id] = asset;
}
}
Iterator<Asset> get iterator => _assets.values.iterator;
int get length => _assets.length;
/// Gets the [Asset] in the set with [id], or returns `null` if no asset with
/// that ID is present.
Asset operator[](AssetId id) => _assets[id];
/// Adds [asset] to the set.
///
/// If there is already an asset with that ID in the set, it is replaced by
/// the new one. Returns [asset].
Asset add(Asset asset) {
_assets[asset.id] = asset;
return asset;
}
/// Adds [assets] to the set.
void addAll(Iterable<Asset> assets) {
assets.forEach(add);
}
/// Returns `true` if the set contains [asset].
bool contains(Asset asset) {
var other = _assets[asset.id];
return other == asset;
}
/// Returns `true` if the set contains an [Asset] with [id].
bool containsId(AssetId id) {
return _assets.containsKey(id);
}
/// If the set contains an [Asset] with [id], removes and returns it.
Asset removeId(AssetId id) => _assets.remove(id);
/// Removes all assets from the set.
void clear() {
_assets.clear();
}
}