1
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
28 """ Sets: that is lists without order or repetition.
29
30 May be used everywhere lists are used... because they rely on them."""
32 foo=[]
33 for m in list:
34 if not m in foo:
35 foo.append(m)
36 self.members = foo
37
39 return self.members[index]
40
42 self.members[index] = value
43
45 return getattr(self.members, name)
46
48 new = Set(self.members[:])
49 for v in other:
50 if not v in new:
51 new.append(v)
52 return new
53
56
59
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
69 if len(self) == len(other):
70 if not len(self - other):
71 return(0)
72 return(1)
73
75 return len(self.members)
76
78 return str(self.members)
79
81 return "Set %s"%str(self.members)
82
84 return Set(self.members[low:high])
85
87 for i in range(low,max(high+1,len(self.members)-1)):
88 del self.members[i]
89
92
94 if not member in self.members:
95 self.members.append(member)
96
98 e = 0
99 if not member in self.members:
100 self.members.append(member)
101 e = 1
102 return e
103
105 return len(self.members) == 0
106
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
116
119
121 try: del(self.members[self.index(v)])
122 except ValueError:
123 pass
124
126 return Set(self.members[:])
127
129 return self.members[0]
130
131
133 new = Set()
134 new.members = self.members[:]
135 return new
136