IMap<K, V> constructor

IMap<K, V>()

Creates an empty IMap.

K must be of type Guid or String and V must be of type Object? or String.

Implementation

factory IMap() {
  if (isSameType<K, Guid>() && isSimilarType<V, Object>()) {
    final mediaPropertySet = MediaPropertySet();
    final mapPtr = mediaPropertySet.toInterface(IID_IMap_Guid_Object);
    mediaPropertySet.release();

    return IMap.fromRawPointer(mapPtr,
        iterableIid: IID_IIterable_IKeyValuePair_Guid_Object);
  }

  if (isSameType<K, String>()) {
    if (isSameType<V, String>()) {
      final stringMap = StringMap();
      final mapPtr = stringMap.toInterface(IID_IMap_String_String);
      stringMap.release();

      return IMap.fromRawPointer(mapPtr,
          iterableIid: IID_IIterable_IKeyValuePair_String_String);
    }

    if (isSimilarType<V, Object>()) {
      final propertySet = PropertySet();
      final mapPtr = propertySet.toInterface(IID_IMap_String_Object);
      propertySet.release();

      return IMap.fromRawPointer(mapPtr,
          iterableIid: IID_IIterable_IKeyValuePair_String_Object);
    }
  }

  throw ArgumentError('Unsupported key-value pair: IMap<$K, $V>');
}