Module osets
[hide private]
[frames] | no frames]

Source Code for Module osets

  1  # -*- coding: UTF-8 -*- 
  2  """ 
  3  This is part of Yappy 
  4   
  5  osets.py -- a Set private implementation 
  6   
  7  Copyright (C) 2000-2003 Rogério Reis & Nelma Moreira {rvr,nam}@ncc.up.pt 
  8  Version: $Id: osets.py,v 1.3 2004/02/18 10:54:48 rvr Exp $ 
  9   
 10  This program is free software; you can redistribute it and/or modify 
 11  it under the terms of the GNU General Public License as published by 
 12  the Free Software Foundation; either version 2 of the License, or 
 13  (at your option) any later version. 
 14   
 15  This program is distributed in the hope that it will be useful, 
 16  but WITHOUT ANY WARRANTY; without even the implied warranty of 
 17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 18  GNU General Public License for more details. 
 19   
 20  You should have received a copy of the GNU General Public License 
 21  along with this program; if not, write to the Free Software 
 22  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.    
 23   
 24  @author: Rogério Reis & Nelma Moreira {rvr,nam}@ncc.up.pt 
 25  """ 
 26   
27 -class Set(object):
28 """ Sets: that is lists without order or repetition. 29 30 May be used everywhere lists are used... because they rely on them."""
31 - def __init__(self,list=[]):
32 foo=[] 33 for m in list: 34 if not m in foo: 35 foo.append(m) 36 self.members = foo
37
38 - def __getitem__(self, index):
39 return self.members[index]
40
41 - def __setitem__(self,index,value):
42 self.members[index] = value
43
44 - def __getattr__(self,name):
45 return getattr(self.members, name)
46
47 - def __add__(self, other):
48 new = Set(self.members[:]) 49 for v in other: 50 if not v in new: 51 new.append(v) 52 return new
53
54 - def __iadd__(self, other):
55 return self + other
56
57 - def __radd__(self,other):
58 return self + other
59
60 - def __sub__(self, other):
61 new = Set(self.members[:]) 62 for v in other: 63 try: del(new.members[new.index(v)]) 64 except ValueError: 65 continue 66 return new
67
68 - def __cmp__(self,other):
69 if len(self) == len(other): 70 if not len(self - other): 71 return(0) 72 return(1)
73
74 - def __len__(self):
75 return len(self.members)
76
77 - def __str__(self):
78 return str(self.members)
79
80 - def __repr__(self):
81 return "Set %s"%str(self.members)
82
83 - def __getslice__(self,low,high):
84 return Set(self.members[low:high])
85
86 - def __delslice__(self,low,high):
87 for i in range(low,max(high+1,len(self.members)-1)): 88 del self.members[i]
89
90 - def __delitem__(self,key):
91 del self.members[key]
92
93 - def append(self,member):
94 if not member in self.members: 95 self.members.append(member)
96
97 - def s_append(self,member):
98 e = 0 99 if not member in self.members: 100 self.members.append(member) 101 e = 1 102 return e
103
104 - def empty(self):
105 return len(self.members) == 0
106
107 - def s_extend(self,other):
108 e = 0 109 for v in other: 110 if not v in self: 111 self.members.append(v) 112 e = 1 113 return e
114 - def sort(self):
115 self.members.sort()
116
117 - def index(self, index):
118 return self.members.index(index)
119
120 - def remove(self,v):
121 try: del(self.members[self.index(v)]) 122 except ValueError: 123 pass
124
125 - def copy(self):
126 return Set(self.members[:])
127
128 - def first(self):
129 return self.members[0]
130 131 # duplicates a set (shallow copy)
132 - def dup(self):
133 new = Set() 134 new.members = self.members[:] 135 return new
136