PageRenderTime 126ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/source/library/Interlace.Pinch/Interlace.Pinch.Dynamic/DynamicStructure.cs

https://bitbucket.org/VahidN/interlace
C# | 111 lines | 92 code | 19 blank | 0 comment | 5 complexity | eff8e3231a0aae5d872eb9ea470e549b MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.IO;
  5. namespace Interlace.Pinch.Dynamic
  6. {
  7. public class DynamicStructure
  8. {
  9. string _name;
  10. string _identifier;
  11. Dictionary<string, DynamicMember> _members;
  12. List<string> _orderedMemberNames;
  13. public DynamicStructure(string name, string identifier)
  14. {
  15. _name = name;
  16. _identifier = identifier;
  17. _members = new Dictionary<string, DynamicMember>();
  18. _orderedMemberNames = new List<string>();
  19. }
  20. public object this[string name]
  21. {
  22. get { return _members[name].Value; }
  23. }
  24. public string Name
  25. {
  26. get { return _name; }
  27. }
  28. public Dictionary<string, DynamicMember> Members
  29. {
  30. get { return _members; }
  31. }
  32. public List<string> OrderedMemberNames
  33. {
  34. get { return _orderedMemberNames; }
  35. }
  36. public string Dumped
  37. {
  38. get
  39. {
  40. StringBuilder builder = new StringBuilder();
  41. Dump(builder);
  42. return builder.ToString();
  43. }
  44. }
  45. public void Dump(StringBuilder builder)
  46. {
  47. Dump(builder, 0);
  48. }
  49. internal void Dump(StringBuilder builder, int indent)
  50. {
  51. string indentString = "".PadLeft(indent * 2);
  52. builder.AppendFormat("{0}({1})", indentString, _identifier);
  53. builder.AppendLine();
  54. foreach (string name in _orderedMemberNames)
  55. {
  56. if (!_members.ContainsKey(name)) continue;
  57. DynamicMember member = _members[name];
  58. builder.AppendFormat("{0}{1}: ", indentString, name);
  59. if (member.Value is List<object>)
  60. {
  61. foreach (object value in (List<object>)member.Value)
  62. {
  63. builder.AppendFormat("{0} ", indentString);
  64. DumpValue(builder, indent, value);
  65. }
  66. }
  67. else
  68. {
  69. DumpValue(builder, indent, member.Value);
  70. }
  71. }
  72. }
  73. void DumpValue(StringBuilder builder, int indent, object value)
  74. {
  75. if (value is DynamicStructure)
  76. {
  77. builder.AppendLine();
  78. ((DynamicStructure)value).Dump(builder, indent + 1);
  79. }
  80. else if (value is byte[])
  81. {
  82. builder.AppendFormat("({0} bytes)", ((byte[])value).Length);
  83. builder.AppendLine();
  84. }
  85. else
  86. {
  87. builder.AppendFormat("{0}", value);
  88. builder.AppendLine();
  89. }
  90. }
  91. }
  92. }