CharacterSet.st
changeset 3458 7f77f7f5dbd9
parent 2933 2325124dbff7
child 3459 c479aa5988ea
--- a/CharacterSet.st	Thu Dec 18 09:55:11 2014 +0100
+++ b/CharacterSet.st	Wed Dec 24 12:36:29 2014 +0100
@@ -52,6 +52,12 @@
     "Created: / 28-01-2011 / 17:29:24 / cg"
 ! !
 
+!CharacterSet methodsFor:'accessing'!
+
+byteArrayMap
+    ^bits
+! !
+
 !CharacterSet methodsFor:'adding & removing'!
 
 add:aCharacter
@@ -73,6 +79,20 @@
     "Created: / 28-01-2011 / 17:44:21 / cg"
 !
 
+includes:aCharacter
+    "Return true if the set contains aCharacter"
+
+    |cp byteIndex bitIndex|
+
+    cp := aCharacter codePoint.
+    (cp > 255) ifTrue:[^ false].
+
+    byteIndex := (cp // 8) + 1.
+    bitIndex := (cp \\ 8) + 1.
+    byteIndex > bits size ifTrue:[^ false].
+    ^ ((bits at:byteIndex) bitAt:bitIndex) ~~ 0
+!
+
 remove:aCharacter ifAbsent:exceptionValue
     |cp byteIndex bitIndex mask|
 
@@ -91,6 +111,23 @@
     "Created: / 28-01-2011 / 17:51:22 / cg"
 ! !
 
+!CharacterSet methodsFor:'comparing'!
+
+= something
+    ^ (self species = something species)
+    and:[ bits = something byteArrayMap ]
+!
+
+hash
+    ^ bits hash
+! !
+
+!CharacterSet methodsFor:'copying'!
+
+postCopy
+    bits := bits copy
+! !
+
 !CharacterSet methodsFor:'initialization'!
 
 initialize
@@ -140,6 +177,6 @@
 !CharacterSet class methodsFor:'documentation'!
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic2/CharacterSet.st,v 1.2 2013-03-19 09:22:42 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic2/CharacterSet.st,v 1.3 2014-12-24 11:36:29 cg Exp $'
 ! !