using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
+using System.ComponentModel;
using static Eina.TraitFunctions;
using static Eina.IteratorNativeFunctions;
{
[StructLayout(LayoutKind.Sequential)]
+[EditorBrowsable(EditorBrowsableState.Never)]
public struct HashTupleNative
{
public IntPtr key;
public uint key_length;
}
+[EditorBrowsable(EditorBrowsableState.Never)]
public static class HashNativeFunctions
{
[DllImport(efl.Libs.Eina)] public static extern IntPtr
/// </summary>
public class Hash<TKey, TValue> : IEnumerable<KeyValuePair<TKey, TValue>>, IDisposable
{
+ [EditorBrowsable(EditorBrowsableState.Never)]
public IntPtr Handle {get; set;} = IntPtr.Zero;
+ /// <summary>Whether this wrapper owns the native hash.
+ /// <para>Since EFL 1.23.</para>
+ /// </summary>
public bool Own {get; set;}
+ /// <summary>Whether this wrapper owns the key.
+ /// <para>Since EFL 1.23.</para>
+ /// </summary>
public bool OwnKey {get; set;}
+ /// <summary>Whether this wrapper owns the value.
+ /// <para>Since EFL 1.23.</para>
+ /// </summary>
public bool OwnValue {get; set;}
+ /// <summary>Quantity of elements in the hash.
+ /// <para>Since EFL 1.23.</para>
+ /// </summary>
public int Count
{
get
SetOwnValue(true);
}
+ /// <summary>Default constructor.
+ /// <para>Since EFL 1.23.</para>
+ /// </summary>
public Hash()
{
InitNew();
}
+ [EditorBrowsable(EditorBrowsableState.Never)]
public Hash(IntPtr handle, bool own)
{
Handle = handle;
SetOwnership(own);
}
+ [EditorBrowsable(EditorBrowsableState.Never)]
public Hash(IntPtr handle, bool own, bool ownKey, bool ownValue)
{
Handle = handle;
SetOwnership(own, ownKey, ownValue);
}
+ /// <summary>Default destructor.
+ /// <para>Since EFL 1.23.</para>
+ /// </summary>
~Hash()
{
Dispose(false);
}
+ /// <summary>Disposes of this wrapper, releasing the native accessor if
+ /// owned.
+ /// <para>Since EFL 1.23.</para>
+ /// </summary>
+ /// <param name="disposing">True if this was called from <see cref="Dispose()"/> public method. False if
+ /// called from the C# finalizer.</param>
protected virtual void Dispose(bool disposing)
{
IntPtr h = Handle;
}
}
+ /// <summary>Release the native resources held by this instance.
+ /// <para>Since EFL 1.23.</para>
+ /// </summary>
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
+ /// <summary>Release the native resources held by this instance.
+ /// <para>Since EFL 1.23.</para>
+ /// </summary>
public void Free()
{
Dispose();
}
+ /// <summary>Release the pointer.
+ /// <para>Since EFL 1.23.</para>
+ /// </summary>
+ /// <returns>The instance.</returns>
public IntPtr Release()
{
IntPtr h = Handle;
return h;
}
+ /// <summary>Sets ownership.
+ /// <para>Since EFL 1.23.</para>
+ /// </summary>
+ /// <param name="own">If the hash own the object.</param>
public void SetOwn(bool own)
{
Own = own;
}
+ /// <summary>Sets key's ownership.
+ /// <para>Since EFL 1.23.</para>
+ /// </summary>
+ /// <param name="ownKey">If the hash own the key's object.</param>
public void SetOwnKey(bool ownKey)
{
OwnKey = ownKey;
}
+ /// <summary>Sets value's ownership.
+ /// <para>Since EFL 1.23.</para>
+ /// </summary>
+ /// <param name="ownValue">If the hash own the value's object.</param>
public void SetOwnValue(bool ownValue)
{
OwnValue = ownValue;
}
}
+ /// <summary>Sets all ownership.
+ /// <para>Since EFL 1.23.</para>
+ /// </summary>
+ /// <param name="ownAll">If the hash own for all ownerships.</param>
public void SetOwnership(bool ownAll)
{
SetOwn(ownAll);
SetOwnValue(ownAll);
}
+ /// <summary>Sets own individually.
+ /// <para>Since EFL 1.23.</para>
+ /// </summary>
+ /// <param name="own">If the hash own the object.</param>
+ /// <param name="ownKey">If the hash own the key's object.</param>
+ /// <param name="ownValue">If the hash own the value's object.</param>
public void SetOwnership(bool own, bool ownKey, bool ownValue)
{
SetOwn(own);
SetOwnValue(ownValue);
}
+ /// <summary>
+ /// Cleanup for the hash.
+ /// <para>Since EFL 1.23.</para>
+ /// </summary>
public void UnSetFreeCb()
{
eina_hash_free_cb_set(Handle, IntPtr.Zero);
}
+ /// <summary>
+ /// Adds an entry to the hash.
+ /// <para>Since EFL 1.23.</para>
+ /// </summary>
+ /// <param name="key">A unique key.</param>
+ /// <param name="val">The value to associate with the key.</param>
+ /// <returns> false if an error occurred, true otherwise.</returns>
public bool AddNew(TKey key, TValue val)
{
IntPtr gchnk = CopyNativeObject(key, ForceRefKey<TKey>());
return r;
}
+ /// <summary>
+ /// Modifies the entry at the specified key.
+ /// <para>Since EFL 1.23.</para>
+ /// </summary>
+ /// <param name="key">The key of the entry to modify.</param>
+ /// <param name="val">The value to replace the previous entry.</param>
public void Add(TKey key, TValue val)
{
Set(key, val);
}
+ /// <summary>
+ /// Removes the entry identified by a key from the hash.
+ /// <para>Since EFL 1.23.</para>
+ /// </summary>
+ /// <param name="key">The key.</param>
public bool DelByKey(TKey key)
{
IntPtr gchnk = CopyNativeObject(key, ForceRefKey<TKey>());
return r;
}
- /// <summary>Searches this hash for <c>val</c> and deletes it from the hash, also deleting it.</summary>
+ /// <summary>Searches this hash for <c>val</c> and deletes it from the hash,
+ /// also deleting it.
+ /// <para>Since EFL 1.23.</para>
+ /// </summary>
+ /// <param name="val">The value to be deleted.</param>
/// <returns><c>true</c> if the value was found and deleted, false if it was <c>null</c> or not found.</returns>
public bool DelByValue(TValue val)
{
}
+ /// <summary>
+ /// Removes the entry identified by a key from the hash.
+ /// <para>Since EFL 1.23.</para>
+ /// </summary>
+ /// <param name="key">The key.</param>
public void Remove(TKey key)
{
DelByKey(key);
}
+ /// <summary>
+ /// Retrieves a specific entry in the hash.
+ /// <para>Since EFL 1.23.</para>
+ /// </summary>
+ /// <param name="key">The key of the entry to find.</param>
+ /// <returns>The value of the entry.</returns>
public TValue Find(TKey key)
{
var gchnk = CopyNativeObject<TKey>(key, ForceRefKey<TKey>());
return NativeToManaged<TValue>(IndirectNative<TValue>(found, false));
}
+ /// <summary>
+ /// Check if key is present. if not, a default value is setted.
+ /// <para>Since EFL 1.23.</para>
+ /// </summary>
+ /// <param name="key">The key to be checked.</param>
+ /// <param name="val">[out] The value of the entry.</param>
+ /// <returns>true if key exists, false otherwise.</returns>
public bool TryGetValue(TKey key, out TValue val)
{
var gchnk = CopyNativeObject<TKey>(key, ForceRefKey<TKey>());
return true;
}
+ /// <summary>
+ /// Check if key is present.
+ /// <para>Since EFL 1.23.</para>
+ /// </summary>
+ /// <param name="key">The key to be checked.</param>
+ /// <returns>true if key exists, false otherwise.</returns>
public bool ContainsKey(TKey key)
{
var gchnk = CopyNativeObject<TKey>(key, ForceRefKey<TKey>());
return found != IntPtr.Zero;
}
+ /// <summary>
+ /// Modifies the speficied key if exists.
+ /// <para>Since EFL 1.23.</para>
+ /// </summary>
+ /// <param name="key">The key to modify.</param>
+ /// <param name="val"> The new value.</param>
+ /// <returns>False if key do not exists, true otherwise.</returns>
public bool Modify(TKey key, TValue val)
{
var gchnk = CopyNativeObject<TKey>(key, ForceRefKey<TKey>());
}
}
+
+ /// <summary>
+ /// Modifies the entry at the specified key. Adds if key is not found.
+ /// <para>Since EFL 1.23.</para>
+ /// </summary>
+ /// <param name="key">The key to modify.</param>
+ /// <param name="val">The value to replace the previous entry.</param>
public void Set(TKey key, TValue val)
{
IntPtr gchnk = CopyNativeObject(key, ForceRefKey<TKey>());
}
}
+ /// <summary>
+ /// Accessor by key to the hash.
+ /// <para>Since EFL 1.23.</para>
+ /// </summary>
public TValue this[TKey key]
{
get
}
}
+ /// <summary>
+ /// Changes the keys of an entry in the hash.
+ /// <para>Since EFL 1.23.</para>
+ /// </summary>
+ /// <param name="key_old">The current key with data.</param>
+ /// <param name="key_new">The new key with data.</param>
+ /// <returns>false in any case but success, true on success.</returns>
public bool Move(TKey key_old, TKey key_new)
{
IntPtr gchnko = CopyNativeObject(key_old, ForceRefKey<TKey>());
return r;
}
+ /// <summary>
+ /// Frees the hash buckets.
+ /// <para>Since EFL 1.23.</para>
+ /// </summary>
public void FreeBuckets()
{
eina_hash_free_buckets(Handle);
}
+ /// <summary>
+ /// Returns the number of entries in the hash.
+ /// <para>Since EFL 1.23.</para>
+ /// </summary>
+ /// <returns>The number of entries, 0 on error.</returns>
public int Population()
{
return eina_hash_population(Handle);
}
+ /// <summary>
+ /// Gets an Iterator for keys.
+ /// <para>Since EFL 1.23.</para>
+ /// </summary>
public Eina.Iterator<TKey> Keys()
{
return new Eina.Iterator<TKey>(EinaHashIteratorKeyNew<TKey>(Handle), true);
}
+ /// <summary>
+ /// Gets An Iterator for values.
+ /// <para>Since EFL 1.23.</para>
+ /// </summary>
public Eina.Iterator<TValue> Values()
{
return new Eina.Iterator<TValue>(eina_hash_iterator_data_new(Handle), true);
}
+ /// <summary>
+ /// Gets an Iterator for hask.
+ /// <para>Since EFL 1.23.</para>
+ /// </summary>
public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator()
{
IntPtr itr = eina_hash_iterator_tuple_new(Handle);