PageRenderTime 27ms CodeModel.GetById 15ms RepoModel.GetById 1ms app.codeStats 0ms

/library/builtins/sets.py

http://pyjamas.googlecode.com/
Python | 83 lines | 82 code | 0 blank | 1 comment | 0 complexity | b3afabd60107f6e80c0d410629fbc17e MD5 | raw file
Possible License(s): LGPL-2.1, Apache-2.0
  1. # TODO: __hash__
  2. class Set:
  3. def __init__(self, data=None):
  4. JS("""
  5. this.d = {};
  6. this.update(data);
  7. """)
  8. def add(self, value):
  9. JS(""" this.d[pyjslib_hash(value)] = value;""")
  10. def clear(self):
  11. JS(""" this.d = {};""")
  12. def __contains__(self, value):
  13. JS(""" return (this.d[pyjslib_hash(value)]) ? true : false;""")
  14. def discard(self, value):
  15. JS(""" delete this.d[pyjslib_hash(value)];""")
  16. def issubset(self, items):
  17. JS("""
  18. for (var i in this.d) {
  19. if (!items.__contains__(i)) return false;
  20. }
  21. return true;
  22. """)
  23. def issuperset(self, items):
  24. JS("""
  25. for (var i in items) {
  26. if (!this.__contains__(i)) return false;
  27. }
  28. return true;
  29. """)
  30. def __iter__(self):
  31. JS("""
  32. var items=new pyjslib_List();
  33. for (var key in this.d) items.append(this.d[key]);
  34. return items.__iter__();
  35. """)
  36. def __len__(self):
  37. JS("""
  38. var size=0;
  39. for (var i in this.d) size++;
  40. return size;
  41. """)
  42. def pop(self):
  43. JS("""
  44. for (var key in this.d) {
  45. var value = this.d[key];
  46. delete this.d[key];
  47. return value;
  48. }
  49. """)
  50. def remove(self, value):
  51. self.discard(value)
  52. def update(self, data):
  53. JS("""
  54. if (pyjslib_isArray(data)) {
  55. for (var i in data) {
  56. this.d[pyjslib_hash(data[i])]=data[i];
  57. }
  58. }
  59. else if (pyjslib_isIteratable(data)) {
  60. var iter=data.__iter__();
  61. var i=0;
  62. try {
  63. while (true) {
  64. var item=iter.next();
  65. this.d[pyjslib_hash(item)]=item;
  66. }
  67. }
  68. catch (e) {
  69. if (e != StopIteration) throw e;
  70. }
  71. }
  72. """)