Mercurial > projects > dynamin
changeset 84:7653269724db
Add comments for the List class and its constructors.
author | Jordan Miner <jminer7@gmail.com> |
---|---|
date | Sun, 18 Jul 2010 23:45:00 -0500 |
parents | 3cfc83a99cbc |
children | ded31d46f75f |
files | dynamin/core/list.d |
diffstat | 1 files changed, 46 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/dynamin/core/list.d Sun Jul 18 22:20:50 2010 -0500 +++ b/dynamin/core/list.d Sun Jul 18 23:45:00 2010 -0500 @@ -48,6 +48,12 @@ Replaced } +/** + * A list of items backed by an array. If changeNotification is true, then a delegate is passed + * into the constructor as a callback. The delegate will be called when any item is added to or + * removed from the list. Also, when changeNotfication is true, some methods are not + * available. These are marked in their documentation. + */ class List(T, bool changeNotification = false) { protected: T[] _data; @@ -56,24 +62,52 @@ void delegate(ListChangeType, T, T, uint) whenChanged; const int DefaultCapacity = 16; public: - static if(changeNotification) { - /// whenChanged is called right after an item is added, removed, or replaced - this(void delegate(ListChangeType, T, T, uint) whenChanged) { + /** + * Creates a list with the specified capacity. + * + * Only available if changeNotification is false. + */ + this() { + static if(changeNotification) + throw new Exception("not available"); + this(DefaultCapacity); + } + /// ditto + this(uint capacity) { + static if(changeNotification) + throw new Exception("not available"); + _data = new T[capacity]; + } + + /** + * Creates a list with the specified capacity and with a delegate that will be called + * when an item is added to or removed from the list. The type specifies whether an + * item was added, removed, or replaced. oldItem contains the item that was removed, + * and newItem contains the item that was added. So if type is ListChangeType.Added, + * oldItem will be T.init (which is null for reference types). If type is + * ListChangeType.Removed, newItem will be T.init. The index of the item after being + * added or before being removed is also passed to the delegate. + * + * Only available if changeNotification is true. + */ + this(void delegate(ListChangeType type, T oldItem, T newItem, uint index) whenChanged) { + static if(changeNotification) { this(DefaultCapacity, whenChanged); + } else { + throw new Exception("not available"); } - this(uint capacity, - void delegate(ListChangeType, T, T, uint) whenChanged) { + } + /// ditto + this(uint capacity, + void delegate(ListChangeType type, T oldItem, T newItem, uint index) whenChanged) { + static if(changeNotification) { _data = new T[capacity]; this.whenChanged = whenChanged; - } - } else { - this() { - this(DefaultCapacity); - } - this(uint capacity) { - _data = new T[capacity]; + } else { + throw new Exception("not available"); } } + static List!(T) fromArray(T[] arr...) { auto list = new List!(T)(); list._data = arr.dup; @@ -178,8 +212,6 @@ return -1; } //trimCapacity() - //opIndex - //opIndexAssign //opConcat //opEquals //opSlice