2
// CollectionExtensions.cs
5
// Aaron Bockover <abockover@novell.com>
7
// Copyright (C) 2008 Novell, Inc.
9
// Permission is hereby granted, free of charge, to any person obtaining
10
// a copy of this software and associated documentation files (the
11
// "Software"), to deal in the Software without restriction, including
12
// without limitation the rights to use, copy, modify, merge, publish,
13
// distribute, sublicense, and/or sell copies of the Software, and to
14
// permit persons to whom the Software is furnished to do so, subject to
15
// the following conditions:
17
// The above copyright notice and this permission notice shall be
18
// included in all copies or substantial portions of the Software.
20
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31
using System.Collections.Generic;
33
namespace Hyena.Collections
35
public static class CollectionExtensions
37
public static void SortedInsert<T> (List<T> list, T value) where T : IComparable
39
if (list.Count == 0 || list[list.Count - 1].CompareTo (value) < 0) {
41
} else if (list[0].CompareTo (value) > 0) {
42
list.Insert (0, value);
44
int index = list.BinarySearch (value);
45
list.Insert (index < 0 ? ~index : index, value);
49
public static string Join<T> (IList<T> list)
51
return Join<T> (list, ", ");
54
public static string Join<T> (IList<T> list, string separator)
56
return Join<T> (list, null, null, separator);
59
public static string Join<T> (IList<T> list, string wrapper, string separator)
61
return Join<T> (list, wrapper, wrapper, separator);
64
public static string Join<T> (IList<T> list, string front, string back, string separator)
66
StringBuilder builder = new StringBuilder ();
68
for (int i = 0, n = list.Count; i < n; i++) {
70
builder.Append (front);
73
builder.Append (list[i]);
76
builder.Append (back);
80
builder.Append (separator);
84
return builder.ToString ();