fork download
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5.  
  6. public class RingBuffer<T> : IEnumerable, IEnumerable<T> {
  7. public RingBuffer(int size) {
  8. elements = new T[size];
  9. end = 0;
  10. }
  11.  
  12. public void Add(T element) {
  13. elements[end] = element;
  14. ++end;
  15. if (end == elements.Length) {
  16. end = 0;
  17. }
  18. }
  19.  
  20. IEnumerator IEnumerable.GetEnumerator() {
  21. return this.GetEnumerator();
  22. }
  23.  
  24. public IEnumerator<T> GetEnumerator() {
  25. for (var i = (end == elements.Length - 1 ? 0 : end + 1); i != end;) {
  26. yield return elements[i];
  27. if (i == elements.Length - 1) {
  28. i = 0;
  29. } else {
  30. ++i;
  31. }
  32. }
  33. }
  34.  
  35. private T[] elements;
  36. private int end;
  37. }
  38.  
  39. public static class Program {
  40. public static void Main() {
  41. var buffer = new RingBuffer<int>(10);
  42.  
  43. for (var i = 0; i < 100; ++i) {
  44. buffer.Add(i);
  45. Console.WriteLine(string.Join(", ", buffer.Select(x => x.ToString()).ToArray()));
  46. }
  47. }
  48. }
  49.  
Success #stdin #stdout 0.03s 33952KB
stdin
Standard input is empty
stdout
0, 0, 0, 0, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 0, 0, 0, 1
0, 0, 0, 0, 0, 0, 0, 1, 2
0, 0, 0, 0, 0, 0, 1, 2, 3
0, 0, 0, 0, 0, 1, 2, 3, 4
0, 0, 0, 0, 1, 2, 3, 4, 5
0, 0, 0, 1, 2, 3, 4, 5, 6
0, 0, 1, 2, 3, 4, 5, 6, 7
0, 1, 2, 3, 4, 5, 6, 7, 8
1, 2, 3, 4, 5, 6, 7, 8, 9
2, 3, 4, 5, 6, 7, 8, 9, 10
3, 4, 5, 6, 7, 8, 9, 10, 11
4, 5, 6, 7, 8, 9, 10, 11, 12
5, 6, 7, 8, 9, 10, 11, 12, 13
6, 7, 8, 9, 10, 11, 12, 13, 14
7, 8, 9, 10, 11, 12, 13, 14, 15
8, 9, 10, 11, 12, 13, 14, 15, 16
9, 10, 11, 12, 13, 14, 15, 16, 17
10, 11, 12, 13, 14, 15, 16, 17, 18
11, 12, 13, 14, 15, 16, 17, 18, 19
12, 13, 14, 15, 16, 17, 18, 19, 20
13, 14, 15, 16, 17, 18, 19, 20, 21
14, 15, 16, 17, 18, 19, 20, 21, 22
15, 16, 17, 18, 19, 20, 21, 22, 23
16, 17, 18, 19, 20, 21, 22, 23, 24
17, 18, 19, 20, 21, 22, 23, 24, 25
18, 19, 20, 21, 22, 23, 24, 25, 26
19, 20, 21, 22, 23, 24, 25, 26, 27
20, 21, 22, 23, 24, 25, 26, 27, 28
21, 22, 23, 24, 25, 26, 27, 28, 29
22, 23, 24, 25, 26, 27, 28, 29, 30
23, 24, 25, 26, 27, 28, 29, 30, 31
24, 25, 26, 27, 28, 29, 30, 31, 32
25, 26, 27, 28, 29, 30, 31, 32, 33
26, 27, 28, 29, 30, 31, 32, 33, 34
27, 28, 29, 30, 31, 32, 33, 34, 35
28, 29, 30, 31, 32, 33, 34, 35, 36
29, 30, 31, 32, 33, 34, 35, 36, 37
30, 31, 32, 33, 34, 35, 36, 37, 38
31, 32, 33, 34, 35, 36, 37, 38, 39
32, 33, 34, 35, 36, 37, 38, 39, 40
33, 34, 35, 36, 37, 38, 39, 40, 41
34, 35, 36, 37, 38, 39, 40, 41, 42
35, 36, 37, 38, 39, 40, 41, 42, 43
36, 37, 38, 39, 40, 41, 42, 43, 44
37, 38, 39, 40, 41, 42, 43, 44, 45
38, 39, 40, 41, 42, 43, 44, 45, 46
39, 40, 41, 42, 43, 44, 45, 46, 47
40, 41, 42, 43, 44, 45, 46, 47, 48
41, 42, 43, 44, 45, 46, 47, 48, 49
42, 43, 44, 45, 46, 47, 48, 49, 50
43, 44, 45, 46, 47, 48, 49, 50, 51
44, 45, 46, 47, 48, 49, 50, 51, 52
45, 46, 47, 48, 49, 50, 51, 52, 53
46, 47, 48, 49, 50, 51, 52, 53, 54
47, 48, 49, 50, 51, 52, 53, 54, 55
48, 49, 50, 51, 52, 53, 54, 55, 56
49, 50, 51, 52, 53, 54, 55, 56, 57
50, 51, 52, 53, 54, 55, 56, 57, 58
51, 52, 53, 54, 55, 56, 57, 58, 59
52, 53, 54, 55, 56, 57, 58, 59, 60
53, 54, 55, 56, 57, 58, 59, 60, 61
54, 55, 56, 57, 58, 59, 60, 61, 62
55, 56, 57, 58, 59, 60, 61, 62, 63
56, 57, 58, 59, 60, 61, 62, 63, 64
57, 58, 59, 60, 61, 62, 63, 64, 65
58, 59, 60, 61, 62, 63, 64, 65, 66
59, 60, 61, 62, 63, 64, 65, 66, 67
60, 61, 62, 63, 64, 65, 66, 67, 68
61, 62, 63, 64, 65, 66, 67, 68, 69
62, 63, 64, 65, 66, 67, 68, 69, 70
63, 64, 65, 66, 67, 68, 69, 70, 71
64, 65, 66, 67, 68, 69, 70, 71, 72
65, 66, 67, 68, 69, 70, 71, 72, 73
66, 67, 68, 69, 70, 71, 72, 73, 74
67, 68, 69, 70, 71, 72, 73, 74, 75
68, 69, 70, 71, 72, 73, 74, 75, 76
69, 70, 71, 72, 73, 74, 75, 76, 77
70, 71, 72, 73, 74, 75, 76, 77, 78
71, 72, 73, 74, 75, 76, 77, 78, 79
72, 73, 74, 75, 76, 77, 78, 79, 80
73, 74, 75, 76, 77, 78, 79, 80, 81
74, 75, 76, 77, 78, 79, 80, 81, 82
75, 76, 77, 78, 79, 80, 81, 82, 83
76, 77, 78, 79, 80, 81, 82, 83, 84
77, 78, 79, 80, 81, 82, 83, 84, 85
78, 79, 80, 81, 82, 83, 84, 85, 86
79, 80, 81, 82, 83, 84, 85, 86, 87
80, 81, 82, 83, 84, 85, 86, 87, 88
81, 82, 83, 84, 85, 86, 87, 88, 89
82, 83, 84, 85, 86, 87, 88, 89, 90
83, 84, 85, 86, 87, 88, 89, 90, 91
84, 85, 86, 87, 88, 89, 90, 91, 92
85, 86, 87, 88, 89, 90, 91, 92, 93
86, 87, 88, 89, 90, 91, 92, 93, 94
87, 88, 89, 90, 91, 92, 93, 94, 95
88, 89, 90, 91, 92, 93, 94, 95, 96
89, 90, 91, 92, 93, 94, 95, 96, 97
90, 91, 92, 93, 94, 95, 96, 97, 98
91, 92, 93, 94, 95, 96, 97, 98, 99