github.com/goplus/gop@v1.2.6/builtin/iox/enum.go (about) 1 /* 2 Copyright 2022 The GoPlus Authors (goplus.org) 3 Licensed under the Apache License, Version 2.0 (the "License"); 4 you may not use this file except in compliance with the License. 5 You may obtain a copy of the License at 6 http://www.apache.org/licenses/LICENSE-2.0 7 Unless required by applicable law or agreed to in writing, software 8 distributed under the License is distributed on an "AS IS" BASIS, 9 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 10 See the License for the specific language governing permissions and 11 limitations under the License. 12 */ 13 14 package iox 15 16 import ( 17 "bufio" 18 "io" 19 ) 20 21 // ---------------------------------------------------------------------------- 22 23 type LineIter struct { 24 s *bufio.Scanner 25 } 26 27 func (it LineIter) Next() (line string, ok bool) { 28 s := it.s 29 if ok = s.Scan(); ok { 30 line = s.Text() 31 } else if err := s.Err(); err != nil { 32 panic(err) 33 } 34 return 35 } 36 37 func EnumLines(r io.Reader) LineIter { 38 scanner := bufio.NewScanner(r) 39 return LineIter{scanner} 40 } 41 42 // ---------------------------------------------------------------------------- 43 44 type BLineIter struct { 45 s *bufio.Scanner 46 } 47 48 func (it BLineIter) Next() (line []byte, ok bool) { 49 s := it.s 50 if ok = s.Scan(); ok { 51 line = s.Bytes() 52 } else if err := s.Err(); err != nil { 53 panic(err) 54 } 55 return 56 } 57 58 func EnumBLines(r io.Reader) BLineIter { 59 scanner := bufio.NewScanner(r) 60 return BLineIter{scanner} 61 } 62 63 // ---------------------------------------------------------------------------- 64 65 type LineReader struct { 66 r io.Reader 67 } 68 69 func (p LineReader) Gop_Enum() LineIter { 70 return EnumLines(p.r) 71 } 72 73 func Lines(r io.Reader) LineReader { 74 return LineReader{r} 75 } 76 77 // ---------------------------------------------------------------------------- 78 79 type BLineReader struct { 80 r io.Reader 81 } 82 83 func (p BLineReader) Gop_Enum() BLineIter { 84 return EnumBLines(p.r) 85 } 86 87 func BLines(r io.Reader) BLineReader { 88 return BLineReader{r} 89 } 90 91 // ----------------------------------------------------------------------------