PageRenderTime 52ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/Main/Source/Bittorrent/Source/Bittorrent/Bencode/Collections/List.cs

#
C# | 125 lines | 93 code | 32 blank | 0 comment | 8 complexity | 799666f954f682d71075948b74eee868 MD5 | raw file
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Diagnostics.Contracts;
  7. namespace Bittorrent.Bencode.Collections {
  8. internal class List : Object, IList<Object> {
  9. private readonly List<Object> _list = new List<Object>();
  10. public int IndexOf(Object item) {
  11. Contract.Requires(item != null);
  12. return _list.IndexOf(item);
  13. }
  14. public void Insert(int index, Object item) {
  15. Contract.Requires(index > 0);
  16. Contract.Requires(index < _list.Count);
  17. Contract.Requires(item != null);
  18. _list.Insert(index, item);
  19. }
  20. public void RemoveAt(int index) {
  21. Contract.Requires(index > 0);
  22. Contract.Requires(index < _list.Count);
  23. _list.RemoveAt(index);
  24. }
  25. public Object this[int index] {
  26. get {
  27. Contract.Requires(index > 0);
  28. Contract.Requires(index < _list.Count);
  29. return _list[index];
  30. }
  31. set {
  32. Contract.Requires(index > 0);
  33. Contract.Requires(index < _list.Count);
  34. Contract.Requires(value != null);
  35. _list[index] = value;
  36. }
  37. }
  38. public int Count {
  39. get { return _list.Count; }
  40. }
  41. public bool IsReadOnly {
  42. get { return false; }
  43. }
  44. public void Add(Object item) {
  45. Contract.Requires(item != null);
  46. _list.Add(item);
  47. }
  48. public void Clear() {
  49. _list.Clear();
  50. }
  51. public bool Contains(Object item) {
  52. Contract.Requires(item != null);
  53. return _list.Contains(item);
  54. }
  55. public void CopyTo(Object[] array, int arrayIndex) {
  56. Contract.Requires(array != null);
  57. Contract.Requires(arrayIndex > 0);
  58. Contract.Requires(arrayIndex < array.Length);
  59. _list.CopyTo(array, arrayIndex);
  60. }
  61. public bool Remove(Object item) {
  62. Contract.Requires(item != null);
  63. return _list.Remove(item);
  64. }
  65. public IEnumerator<Object> GetEnumerator() {
  66. return _list.GetEnumerator();
  67. }
  68. IEnumerator IEnumerable.GetEnumerator() {
  69. return GetEnumerator();
  70. }
  71. internal override int ByteSize {
  72. get {
  73. int size = Encoding.UTF8.GetByteCount("l");
  74. foreach (var item in _list) {
  75. size += item.ByteSize;
  76. }
  77. size += Encoding.UTF8.GetByteCount("e");
  78. return size;
  79. }
  80. }
  81. internal override int Encode(byte[] data, int offset) {
  82. Contract.Requires(data != null);
  83. Contract.Requires(offset > 0);
  84. Contract.Requires(offset < data.Length);
  85. int written = Encoding.UTF8.GetBytes("l", 0, 1, data, offset);
  86. foreach (var item in _list) {
  87. written += item.Encode(data, offset + written);
  88. }
  89. written += Encoding.UTF8.GetBytes("e", 0, 1, data, offset + written);
  90. return written;
  91. }
  92. }
  93. }