Home | History | Annotate | Download | only in progs
      1 // Copyright 2012 The Go Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style
      3 // license that can be found in the LICENSE file.
      4 
      5 package main
      6 
      7 import (
      8 	"io/ioutil"
      9 	"regexp"
     10 )
     11 
     12 func AppendByte(slice []byte, data ...byte) []byte {
     13 	m := len(slice)
     14 	n := m + len(data)
     15 	if n > cap(slice) { // if necessary, reallocate
     16 		// allocate double what's needed, for future growth.
     17 		newSlice := make([]byte, (n+1)*2)
     18 		copy(newSlice, slice)
     19 		slice = newSlice
     20 	}
     21 	slice = slice[0:n]
     22 	copy(slice[m:n], data)
     23 	return slice
     24 }
     25 
     26 // STOP OMIT
     27 
     28 // Filter returns a new slice holding only
     29 // the elements of s that satisfy fn.
     30 func Filter(s []int, fn func(int) bool) []int {
     31 	var p []int // == nil
     32 	for _, i := range s {
     33 		if fn(i) {
     34 			p = append(p, i)
     35 		}
     36 	}
     37 	return p
     38 }
     39 
     40 // STOP OMIT
     41 
     42 var digitRegexp = regexp.MustCompile("[0-9]+")
     43 
     44 func FindDigits(filename string) []byte {
     45 	b, _ := ioutil.ReadFile(filename)
     46 	return digitRegexp.Find(b)
     47 }
     48 
     49 // STOP OMIT
     50 
     51 func CopyDigits(filename string) []byte {
     52 	b, _ := ioutil.ReadFile(filename)
     53 	b = digitRegexp.Find(b)
     54 	c := make([]byte, len(b))
     55 	copy(c, b)
     56 	return c
     57 }
     58 
     59 // STOP OMIT
     60 
     61 func main() {
     62 	// place holder; no need to run
     63 }
     64