1a0428e9eSAndrew Rist#************************************************************** 2a0428e9eSAndrew Rist# 3a0428e9eSAndrew Rist# Licensed to the Apache Software Foundation (ASF) under one 4a0428e9eSAndrew Rist# or more contributor license agreements. See the NOTICE file 5a0428e9eSAndrew Rist# distributed with this work for additional information 6a0428e9eSAndrew Rist# regarding copyright ownership. The ASF licenses this file 7a0428e9eSAndrew Rist# to you under the Apache License, Version 2.0 (the 8a0428e9eSAndrew Rist# "License"); you may not use this file except in compliance 9a0428e9eSAndrew Rist# with the License. You may obtain a copy of the License at 10a0428e9eSAndrew Rist# 11a0428e9eSAndrew Rist# http://www.apache.org/licenses/LICENSE-2.0 12a0428e9eSAndrew Rist# 13a0428e9eSAndrew Rist# Unless required by applicable law or agreed to in writing, 14a0428e9eSAndrew Rist# software distributed under the License is distributed on an 15a0428e9eSAndrew Rist# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16a0428e9eSAndrew Rist# KIND, either express or implied. See the License for the 17a0428e9eSAndrew Rist# specific language governing permissions and limitations 18a0428e9eSAndrew Rist# under the License. 19a0428e9eSAndrew Rist# 20a0428e9eSAndrew Rist#************************************************************** 21cdf0e10cSrcweir 22*ae54856bSPedro Giffuni# to support macosx baseline machines from Cretaceous period 23cdf0e10cSrcweir 24cdf0e10cSrcweir# incomplete set() class implementation of Python 2.4 25cdf0e10cSrcweirclass PseudoSet: 26cdf0e10cSrcweir _list = [] 27*ae54856bSPedro Giffuni 28cdf0e10cSrcweir def __str__(self): 29cdf0e10cSrcweir return str(self._list) 30cdf0e10cSrcweir 31cdf0e10cSrcweir def __init__(self, newlist=[]): 32cdf0e10cSrcweir self._list = self._remove_dupes(newlist) 33cdf0e10cSrcweir 34cdf0e10cSrcweir def __or__(self, other): 35cdf0e10cSrcweir tmplist = [] 36cdf0e10cSrcweir if self._list != None and other != None: 37cdf0e10cSrcweir tmplist.extend(self._list) 38cdf0e10cSrcweir tmplist.extend(other) 39cdf0e10cSrcweir return PseudoSet(self._remove_dupes(tmplist)) 40cdf0e10cSrcweir else: 41cdf0e10cSrcweir print "__or__(None)" 42cdf0e10cSrcweir 43cdf0e10cSrcweir def __sub__(self,other): 44cdf0e10cSrcweir tmplist = [] 45cdf0e10cSrcweir if self._list != None and other != None: 46cdf0e10cSrcweir tmplist.extend(self._list) 47cdf0e10cSrcweir [tmplist.remove(key) for key in other if key in tmplist] 48cdf0e10cSrcweir else: 49cdf0e10cSrcweir print "__sub__(none)" 50cdf0e10cSrcweir return PseudoSet(tmplist) 51cdf0e10cSrcweir 52cdf0e10cSrcweir def __and__(self, other): 53cdf0e10cSrcweir tmplist = [] 54cdf0e10cSrcweir if other != None and self._list != None: 55cdf0e10cSrcweir [tmplist.append(key) for key in self._list if key in other] 56cdf0e10cSrcweir return PseudoSet(tmplist) 57cdf0e10cSrcweir else: 58cdf0e10cSrcweir print "__and__(None)" 59*ae54856bSPedro Giffuni 60cdf0e10cSrcweir def __iter__(self): 61cdf0e10cSrcweir return self._list.__iter__() 62*ae54856bSPedro Giffuni 63cdf0e10cSrcweir def __items__(self): 64cdf0e10cSrcweir return self._list.items() 65cdf0e10cSrcweir 66cdf0e10cSrcweir def __keys__(self): 67cdf0e10cSrcweir return keys(self._list) 68cdf0e10cSrcweir 69cdf0e10cSrcweir def _remove_dupes(self, list): 70*ae54856bSPedro Giffuni tmpdict = {} 71cdf0e10cSrcweir for key in list: 72cdf0e10cSrcweir tmpdict[key] = 1 73cdf0e10cSrcweir return tmpdict.keys() 74cdf0e10cSrcweir 75*ae54856bSPedro Giffuni# incomplete OrderedDict() class implementation 76cdf0e10cSrcweirclass PseudoOrderedDict(dict): 77cdf0e10cSrcweir _keylist = [] 78cdf0e10cSrcweir _valuelist = [] 79*ae54856bSPedro Giffuni 80cdf0e10cSrcweir def __init__(self, defaults={}): 81cdf0e10cSrcweir dict.__init__(self) 82cdf0e10cSrcweir for n,v in defaults.items(): 83cdf0e10cSrcweir self[n] = v 84cdf0e10cSrcweir 85cdf0e10cSrcweir def __setitem__(self, key, value): 86cdf0e10cSrcweir self._keylist.append(key) 87cdf0e10cSrcweir self._valuelist.append(value) 88cdf0e10cSrcweir return dict.__setitem__(self, key, value) 89*ae54856bSPedro Giffuni 90cdf0e10cSrcweir def __delattr__(self, key): 91cdf0e10cSrcweir self._keylist.__delattr__(key) 92cdf0e10cSrcweir self._valuelist.__delattr__(dict[key]) 93cdf0e10cSrcweir return dict.__delattr__(self, key) 94cdf0e10cSrcweir 95cdf0e10cSrcweir def __delitem__(self, key): 96cdf0e10cSrcweir self._keylist.__delitem__(key) 97cdf0e10cSrcweir self._valuelist.__delitem__(dict[key]) 98cdf0e10cSrcweir return dict.__delitem__(self, key) 99*ae54856bSPedro Giffuni 100cdf0e10cSrcweir def __iter__(self): 101cdf0e10cSrcweir raise NotImplementedError("__iter__") 102*ae54856bSPedro Giffuni 103cdf0e10cSrcweir def __iterkeys__(self): 104cdf0e10cSrcweir return self._keylist 105*ae54856bSPedro Giffuni 106cdf0e10cSrcweir def iteritems(self): 107cdf0e10cSrcweir #return self._valuelist 108cdf0e10cSrcweir return zip(self._keylist, self._valuelist) 109*ae54856bSPedro Giffuni 110cdf0e10cSrcweir def items(self): 111cdf0e10cSrcweir return zip(self._keylist,self._valuelist) 112cdf0e10cSrcweir 113cdf0e10cSrcweir def __keys__(self): 114cdf0e10cSrcweir return self._keylist 115cdf0e10cSrcweir 116cdf0e10cSrcweir def keys(self): 117cdf0e10cSrcweir return self._keylist 118cdf0e10cSrcweir 119cdf0e10cSrcweir def __keysattr__(self): 120cdf0e10cSrcweir return self._keylist 121*ae54856bSPedro Giffuni 122cdf0e10cSrcweir def pop(self, key): 123cdf0e10cSrcweir self._keylist.pop(key) 124cdf0e10cSrcweir self._valuelist.pop(key) 125cdf0e10cSrcweir return dict.__pop__(self, key) 126*ae54856bSPedro Giffuni 127cdf0e10cSrcweir def popitem(self): 128cdf0e10cSrcweir raise NotImplementedError("popitem") 129*ae54856bSPedro Giffuni 130cdf0e10cSrcweirdef _testdriver_set(): 131cdf0e10cSrcweir list, list1 = [] ,[] 132cdf0e10cSrcweir list.append("a") 133cdf0e10cSrcweir list.append("b") 134cdf0e10cSrcweir list.append("c") 135cdf0e10cSrcweir 136cdf0e10cSrcweir list1.append("a") 137cdf0e10cSrcweir list1.append("b") 138cdf0e10cSrcweir list1.append("d") 139cdf0e10cSrcweir list1.append("e") 140cdf0e10cSrcweir list1.append("e") 141cdf0e10cSrcweir 142cdf0e10cSrcweir if "a" in list: 143cdf0e10cSrcweir print "YEAH!" 144cdf0e10cSrcweir 145cdf0e10cSrcweir a = PseudoSet(list) 146cdf0e10cSrcweir b = PseudoSet(list1) 147cdf0e10cSrcweir 148cdf0e10cSrcweir print "a="+str(a) 149cdf0e10cSrcweir print "b="+str(b) 150cdf0e10cSrcweir print "a|b=" + str(a|b) 151cdf0e10cSrcweir print "a="+str(a) 152cdf0e10cSrcweir print "b="+str(b) 153cdf0e10cSrcweir print "a&b=" + str(a&b) 154cdf0e10cSrcweir print "a="+str(a) 155cdf0e10cSrcweir print "b="+str(b) 156cdf0e10cSrcweir print "a-b" + str(a-b) 157cdf0e10cSrcweir 158cdf0e10cSrcweir for key in a: 159cdf0e10cSrcweir print key 160cdf0e10cSrcweir 161cdf0e10cSrcweirdef _testdriver_dict(): 162cdf0e10cSrcweir d = PseudoOrderedDict() 163cdf0e10cSrcweir d["a"] = 1 164cdf0e10cSrcweir d["b"] = 2 165cdf0e10cSrcweir d["c"] = 3 166cdf0e10cSrcweir d["d"] = 4 167cdf0e10cSrcweir d["e"] = 5 168cdf0e10cSrcweir d["f"] = 6 169cdf0e10cSrcweir 170cdf0e10cSrcweir print "a="+str(d["a"]) 171cdf0e10cSrcweir print "e="+str(d["e"]) 172cdf0e10cSrcweir for key,value in d.iteritems(): 173cdf0e10cSrcweir print "d["+key+"]="+str(d[key]) 174cdf0e10cSrcweir print "key="+str(key)+" value="+str(value) 175cdf0e10cSrcweir 176cdf0e10cSrcweir print "keys="+str(d.keys()) 177cdf0e10cSrcweir 178cdf0e10cSrcweir#_testdriver_dict() 179