/[xmltv_parser]/trunk/libxmltv/Extensions.cs
ViewVC logotype

Contents of /trunk/libxmltv/Extensions.cs

Parent Directory Parent Directory | Revision Log Revision Log


Revision 198 - (show annotations) (download)
Sat Mar 16 22:25:41 2013 UTC (6 years, 10 months ago) by william
File size: 2842 byte(s)
Cbunk Extension:
* make sure to call .ToList() before returing data to instantiate the return IEnumerable<T> data

1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Diagnostics;
6
7 namespace libxmltv
8 {
9 public static class DateTimeStringConverter
10 {
11 private const string DEFAULT_DATE_FORMAT = "yyyy/MM/dd hh:mm tt";
12 public static string ToDateTimeString(this DateTime dt)
13 {
14 return dt.ToDateTimeString(DateTimeStringConverter.DEFAULT_DATE_FORMAT);
15 }
16 public static string ToDateTimeString(this DateTime dt, IFormatProvider provider)
17 {
18 return dt.ToString(provider);
19 }
20 public static string ToDateTimeString(this DateTime dt, string format)
21 {
22 return dt.ToString(format);
23 }
24 public static string ToDateTimeString(this DateTime dt, string format, IFormatProvider provider)
25 {
26 return dt.ToString(format, provider);
27 }
28 }
29
30 public static class extensions
31 {
32 public static IEnumerable<IEnumerable<T>> Chunk<T>(this IEnumerable<T> source,
33 int chunkSize)
34 {
35 // Validate parameters.
36 if (source == null) throw new ArgumentNullException("source");
37 if (chunkSize <= 0) throw new ArgumentOutOfRangeException("chunkSize",
38 "The chunkSize parameter must be a positive value.");
39
40 // Call the internal implementation.
41 return source.ChunkInternal(chunkSize).ToList();
42 }
43 private static IEnumerable<IEnumerable<T>> ChunkInternal<T>(this IEnumerable<T> source, int chunkSize)
44 {
45 // Validate parameters.
46 Debug.Assert(source != null);
47 Debug.Assert(chunkSize > 0);
48
49 // Get the enumerator. Dispose of when done.
50 using (IEnumerator<T> enumerator = source.GetEnumerator())
51 do
52 {
53 // Move to the next element. If there's nothing left
54 // then get out.
55 if (!enumerator.MoveNext()) yield break;
56
57 // Return the chunked sequence.
58 yield return ChunkSequence(enumerator, chunkSize).ToList();
59 } while (true);
60 }
61 private static IEnumerable<T> ChunkSequence<T>(IEnumerator<T> enumerator, int chunkSize)
62 {
63 // Validate parameters.
64 Debug.Assert(enumerator != null);
65 Debug.Assert(chunkSize > 0);
66
67 // The count.
68 int count = 0;
69
70 // There is at least one item. Yield and then continue.
71 do
72 {
73 // Yield the item.
74 yield return enumerator.Current;
75 } while (++count < chunkSize && enumerator.MoveNext());
76 }
77 }
78 }

  ViewVC Help
Powered by ViewVC 1.1.22