You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
1.6 KiB
71 lines
1.6 KiB
//========= Copyright 2016-2018, HTC Corporation. All rights reserved. =========== |
|
|
|
namespace HTC.UnityPlugin.Utility |
|
{ |
|
public class OrderedIndexedSet<T> : IndexedSet<T> |
|
{ |
|
public OrderedIndexedSet() : base() { } |
|
|
|
public OrderedIndexedSet(int capacity) : base(capacity) { } |
|
|
|
public override void Insert(int index, T item) |
|
{ |
|
m_Dictionary.Add(item, index); |
|
m_List.Insert(index, item); |
|
|
|
for (int i = index + 1, imax = m_List.Count; i < imax; ++i) |
|
{ |
|
m_Dictionary[m_List[i]] = i; |
|
} |
|
} |
|
|
|
public override void RemoveAt(int index) |
|
{ |
|
m_Dictionary.Remove(m_List[index]); |
|
m_List.RemoveAt(index); |
|
|
|
for (int i = index, imax = m_List.Count; i < imax; ++i) |
|
{ |
|
m_Dictionary[m_List[i]] = i; |
|
} |
|
} |
|
|
|
public T GetFirst() |
|
{ |
|
return m_List[0]; |
|
} |
|
|
|
public bool TryGetFirst(out T item) |
|
{ |
|
if (m_List.Count == 0) |
|
{ |
|
item = default(T); |
|
return false; |
|
} |
|
else |
|
{ |
|
item = GetFirst(); |
|
return true; |
|
} |
|
} |
|
|
|
public T GetLast() |
|
{ |
|
return m_List[m_List.Count - 1]; |
|
} |
|
|
|
public bool TryGetLast(out T item) |
|
{ |
|
if (m_List.Count == 0) |
|
{ |
|
item = default(T); |
|
return false; |
|
} |
|
else |
|
{ |
|
item = GetLast(); |
|
return true; |
|
} |
|
} |
|
} |
|
} |