| // Copyright 2012 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package main |
| |
| import ( |
| "io/ioutil" |
| "regexp" |
| ) |
| |
| func AppendByte(slice []byte, data ...byte) []byte { |
| m := len(slice) |
| n := m + len(data) |
| if n > cap(slice) { // if necessary, reallocate |
| // allocate double what's needed, for future growth. |
| newSlice := make([]byte, (n+1)*2) |
| copy(newSlice, slice) |
| slice = newSlice |
| } |
| slice = slice[0:n] |
| copy(slice[m:n], data) |
| return slice |
| } |
| |
| // STOP OMIT |
| |
| // Filter returns a new slice holding only |
| // the elements of s that satisfy f() |
| func Filter(s []int, fn func(int) bool) []int { |
| var p []int // == nil |
| for _, i := range s { |
| if fn(i) { |
| p = append(p, i) |
| } |
| } |
| return p |
| } |
| |
| // STOP OMIT |
| |
| var digitRegexp = regexp.MustCompile("[0-9]+") |
| |
| func FindDigits(filename string) []byte { |
| b, _ := ioutil.ReadFile(filename) |
| return digitRegexp.Find(b) |
| } |
| |
| // STOP OMIT |
| |
| func CopyDigits(filename string) []byte { |
| b, _ := ioutil.ReadFile(filename) |
| b = digitRegexp.Find(b) |
| c := make([]byte, len(b)) |
| copy(c, b) |
| return c |
| } |
| |
| // STOP OMIT |