PageRenderTime 43ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/source/library/Interlace/Amf/AmfArray.cs

https://bitbucket.org/VahidN/interlace
C# | 141 lines | 97 code | 19 blank | 25 comment | 16 complexity | 7fb2383a77390fa4d131bdb9ec58b937 MD5 | raw file
  1. #region Using Directives and Copyright Notice
  2. // Copyright (c) 2007-2010, Computer Consultancy Pty Ltd
  3. // All rights reserved.
  4. //
  5. // Redistribution and use in source and binary forms, with or without
  6. // modification, are permitted provided that the following conditions are met:
  7. // * Redistributions of source code must retain the above copyright
  8. // notice, this list of conditions and the following disclaimer.
  9. // * Redistributions in binary form must reproduce the above copyright
  10. // notice, this list of conditions and the following disclaimer in the
  11. // documentation and/or other materials provided with the distribution.
  12. // * Neither the name of the Computer Consultancy Pty Ltd nor the
  13. // names of its contributors may be used to endorse or promote products
  14. // derived from this software without specific prior written permission.
  15. //
  16. // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  17. // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  18. // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  19. // ARE DISCLAIMED. IN NO EVENT SHALL COMPUTER CONSULTANCY PTY LTD BE LIABLE
  20. // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  21. // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  22. // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  23. // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  24. // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  25. // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
  26. // DAMAGE.
  27. using System;
  28. using System.Collections.Generic;
  29. using System.Text;
  30. #endregion
  31. namespace Interlace.Amf
  32. {
  33. public class AmfArray
  34. {
  35. List<object> _denseElements;
  36. Dictionary<string, object> _associativeElements;
  37. public AmfArray()
  38. {
  39. _denseElements = new List<object>();
  40. _associativeElements = new Dictionary<string, object>();
  41. }
  42. public AmfArray(IEnumerable<object> denseElements, IDictionary<string, object> associativeElements)
  43. {
  44. _denseElements = new List<object>(denseElements);
  45. _associativeElements = new Dictionary<string, object>(associativeElements);
  46. }
  47. public AmfArray(IEnumerable<object> denseElements)
  48. {
  49. _denseElements = new List<object>(denseElements);
  50. _associativeElements = new Dictionary<string, object>();
  51. }
  52. public static AmfArray Dense(params object[] elements)
  53. {
  54. return new AmfArray(elements);
  55. }
  56. public object this[string indexString]
  57. {
  58. get
  59. {
  60. int index;
  61. if (int.TryParse(indexString, out index))
  62. {
  63. if (0 <= index && index < _denseElements.Count)
  64. {
  65. return _denseElements[index];
  66. }
  67. }
  68. return _associativeElements[indexString];
  69. }
  70. set
  71. {
  72. int index;
  73. if (int.TryParse(indexString, out index))
  74. {
  75. if (0 <= index && index < _denseElements.Count)
  76. {
  77. _denseElements[index] = value;
  78. }
  79. }
  80. _associativeElements[indexString] = value;
  81. }
  82. }
  83. public object this[int index]
  84. {
  85. get
  86. {
  87. if (0 <= index && index < _denseElements.Count)
  88. {
  89. return _denseElements[index];
  90. }
  91. return _associativeElements[index.ToString()];
  92. }
  93. set
  94. {
  95. if (0 <= index && index < _denseElements.Count)
  96. {
  97. _denseElements[index] = value;
  98. }
  99. else if (index == _denseElements.Count)
  100. {
  101. _denseElements.Add(value);
  102. }
  103. else
  104. {
  105. _associativeElements[index.ToString()] = value;
  106. }
  107. }
  108. }
  109. public IList<object> DenseElements
  110. {
  111. get { return _denseElements; }
  112. }
  113. public IDictionary<string, object> AssociativeElements
  114. {
  115. get { return _associativeElements; }
  116. }
  117. public bool IsEmpty
  118. {
  119. get { return _associativeElements.Count == 0 && _denseElements.Count == 0; }
  120. }
  121. }
  122. }