feat(core): Implement a typed map
This commit is contained in:
parent
9e0f38154e
commit
8270185027
13
packages/moxxmpp/lib/src/util/typed_map.dart
Normal file
13
packages/moxxmpp/lib/src/util/typed_map.dart
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
/// A map, similar to Map, but always uses the type of the value as the key.
|
||||||
|
class TypedMap {
|
||||||
|
/// The internal mapping of type -> data
|
||||||
|
final Map<Object, Object> _data = {};
|
||||||
|
|
||||||
|
/// Associate the type of [value] with [value] in the map.
|
||||||
|
void set<T extends Object>(T value) {
|
||||||
|
_data[T] = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Return the object of type [T] from the map, if it has been stored.
|
||||||
|
T? get<T>() => _data[T] as T?;
|
||||||
|
}
|
25
packages/moxxmpp/test/type_map_test.dart
Normal file
25
packages/moxxmpp/test/type_map_test.dart
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
import 'package:moxxmpp/src/util/typed_map.dart';
|
||||||
|
import 'package:test/test.dart';
|
||||||
|
|
||||||
|
class TestType1 {
|
||||||
|
const TestType1(this.i);
|
||||||
|
final int i;
|
||||||
|
}
|
||||||
|
|
||||||
|
class TestType2 {
|
||||||
|
const TestType2(this.j);
|
||||||
|
final bool j;
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
test('Test storing data in the type map', () {
|
||||||
|
// Set
|
||||||
|
final map = TypedMap()
|
||||||
|
..set(const TestType1(1))
|
||||||
|
..set(const TestType2(false));
|
||||||
|
|
||||||
|
// And access
|
||||||
|
expect(map.get<TestType1>()?.i, 1);
|
||||||
|
expect(map.get<TestType2>()?.j, false);
|
||||||
|
});
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user