]> Cypherpunks repositories - gostls13.git/commitdiff
unicode: add "In" function to test membership of a rune
authorRob Pike <r@golang.org>
Wed, 24 Jul 2013 00:27:58 +0000 (10:27 +1000)
committerRob Pike <r@golang.org>
Wed, 24 Jul 2013 00:27:58 +0000 (10:27 +1000)
The existing function, IsOneOf, is hard to use. Since the slice comes
before the rune, in parallelism with the other Is functions, the slice
is clumsy to build. This CL adds a nicer-signatured In function of
equivalent functionality (its implementation is identical) that's much
easier to use. Compare:
        unicode.IsOneOf([]*unicode.RangeTable{unicode.Letter, unicode.Number}, r)
        unicode.In(r, unicode.Letter, unicode.Number)

R=golang-dev, adg
CC=golang-dev
https://golang.org/cl/11672044

src/pkg/unicode/graphic.go
src/pkg/unicode/graphic_test.go

index 5b995fcd0df9a6a04c463a0d091349c543937db6..ba90b4e518905e48ba82f0f58dd95aa4c37895a2 100644 (file)
@@ -39,7 +39,7 @@ func IsGraphic(r rune) bool {
        if uint32(r) <= MaxLatin1 {
                return properties[uint8(r)]&pg != 0
        }
-       return IsOneOf(GraphicRanges, r)
+       return In(r, GraphicRanges...)
 }
 
 // IsPrint reports whether the rune is defined as printable by Go. Such
@@ -51,12 +51,23 @@ func IsPrint(r rune) bool {
        if uint32(r) <= MaxLatin1 {
                return properties[uint8(r)]&pp != 0
        }
-       return IsOneOf(PrintRanges, r)
+       return In(r, PrintRanges...)
 }
 
 // IsOneOf reports whether the rune is a member of one of the ranges.
-func IsOneOf(set []*RangeTable, r rune) bool {
-       for _, inside := range set {
+// The function "In" provides a nicer signature and should be used in preference to IsOneOf.
+func IsOneOf(ranges []*RangeTable, r rune) bool {
+       for _, inside := range ranges {
+               if Is(inside, r) {
+                       return true
+               }
+       }
+       return false
+}
+
+// In reports whether the rune is a member of one of the ranges.
+func In(r rune, ranges ...*RangeTable) bool {
+       for _, inside := range ranges {
                if Is(inside, r) {
                        return true
                }
index 7b1f6209e806dda28840620f79152b6d17f31c54..c9f289c7f55cb6654b2270152cee2fdf77c1ff06 100644 (file)
@@ -71,7 +71,7 @@ func TestNumberLatin1(t *testing.T) {
 func TestIsPrintLatin1(t *testing.T) {
        for i := rune(0); i <= MaxLatin1; i++ {
                got := IsPrint(i)
-               want := IsOneOf(PrintRanges, i)
+               want := In(i, PrintRanges...)
                if i == ' ' {
                        want = true
                }
@@ -84,7 +84,7 @@ func TestIsPrintLatin1(t *testing.T) {
 func TestIsGraphicLatin1(t *testing.T) {
        for i := rune(0); i <= MaxLatin1; i++ {
                got := IsGraphic(i)
-               want := IsOneOf(GraphicRanges, i)
+               want := In(i, GraphicRanges...)
                if got != want {
                        t.Errorf("%U incorrect: got %t; want %t", i, got, want)
                }