1 28 29 package com.caucho.es; 30 31 import com.caucho.util.IntMap; 32 33 import java.util.Iterator ; 34 35 class PropertyEnumeration implements Iterator { 36 IntMap completed = new IntMap(); 37 ESObject object; 38 int index; 39 40 public Object next() 41 { 42 if (object == null) 43 return null; 44 45 if (object.propNames != null) { 46 for (; index < object.propNames.length; index++) { 47 if (object.propValues[index] != null && 48 (object.propFlags[index] & ESObject.DONT_ENUM) == 0 && 49 completed.get(object.propNames[index]) != 1) { 50 index++; 51 completed.put(object.propNames[index - 1], 1); 52 53 return object.propNames[index - 1]; 54 } 55 } 56 } 57 58 if (object.prototype instanceof ESObject) { 59 object = (ESObject) object.prototype; 60 index = 0; 61 62 return next(); 63 } 64 65 object = null; 66 67 return null; 68 } 69 70 public boolean hasNext() 71 { 72 if (object == null) 73 return false; 74 75 if (object.propNames != null) { 76 for (; index < object.propNames.length; index++) { 77 if (object.propValues[index] != null && 78 (object.propFlags[index] & ESObject.DONT_ENUM) == 0 && 79 completed.get(object.propNames[index]) != 1) { 80 break; 81 } 82 } 83 84 if (index < object.propNames.length) 85 return true; 86 } 87 88 if (object.prototype instanceof ESObject) { 89 object = (ESObject) object.prototype; 90 index = 0; 91 92 return hasNext(); 93 } 94 95 object = null; 96 97 return false; 98 } 99 100 public void remove() 101 { 102 throw new RuntimeException (); 103 } 104 105 PropertyEnumeration(ESObject object) 106 { 107 this.object = object; 108 index = 0; 109 } 110 } 111 | Popular Tags |