293dd2e848
* Add vendor dir so builds dont require dep * Pin specific version go-eth version
83 lines
2.2 KiB
Go
83 lines
2.2 KiB
Go
// CookieJar - A contestant's algorithm toolbox
|
|
// Copyright (c) 2014 Peter Szilagyi. All rights reserved.
|
|
//
|
|
// CookieJar is dual licensed: use of this source code is governed by a BSD
|
|
// license that can be found in the LICENSE file. Alternatively, the CookieJar
|
|
// toolbox may be used in accordance with the terms and conditions contained
|
|
// in a signed written agreement between you and the author(s).
|
|
|
|
// Package fmtext contains extensions to the base Go fmt package.
|
|
package fmtext
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
)
|
|
|
|
// Scans an integer from the standard input. Panics on failure!
|
|
func ScanInt() int {
|
|
return FscanInt(os.Stdin)
|
|
}
|
|
|
|
// Scans a 64 bit float from the standard input. Panics on failure!
|
|
func ScanFloat() float64 {
|
|
return FscanFloat(os.Stdin)
|
|
}
|
|
|
|
// Scans a whitespace delimited string from the standard input. Panics on failure!
|
|
func ScanString() string {
|
|
return FscanString(os.Stdin)
|
|
}
|
|
|
|
// Scans a string until newline or EOF from the standard input. Panics on failure!
|
|
func ScanLine() string {
|
|
return FscanLine(os.Stdin)
|
|
}
|
|
|
|
// Scans an integer from the specified stream. Panics on failure!
|
|
func FscanInt(r io.Reader) int {
|
|
var value int
|
|
if n, err := fmt.Fscan(r, &value); n != 1 || err != nil {
|
|
panic(fmt.Sprintf("scan int failed: n = %d, err = %v", n, err))
|
|
}
|
|
return value
|
|
}
|
|
|
|
// Scans a 64 bit float from the specified stream. Panics on failure!
|
|
func FscanFloat(r io.Reader) float64 {
|
|
var value float64
|
|
if n, err := fmt.Fscan(r, &value); n != 1 || err != nil {
|
|
panic(fmt.Sprintf("scan float64 failed: n = %d, err = %v", n, err))
|
|
}
|
|
return value
|
|
}
|
|
|
|
// Scans a whitespace delimited string from the specified stream. Panics on failure!
|
|
func FscanString(r io.Reader) string {
|
|
var value string
|
|
if n, err := fmt.Fscan(r, &value); n != 1 || err != nil {
|
|
panic(fmt.Sprintf("scan string failed: n = %d, err = %v", n, err))
|
|
}
|
|
return value
|
|
}
|
|
|
|
// Scans a string until newline or EOF from the specified stream. Panics on failure!
|
|
func FscanLine(r io.Reader) string {
|
|
line, char := "", ' '
|
|
for {
|
|
n, err := fmt.Fscanf(r, "%c", &char)
|
|
switch {
|
|
case n == 1 && err == nil:
|
|
if char == '\n' {
|
|
return line
|
|
}
|
|
line += string(char)
|
|
case n == 0 && err == io.EOF:
|
|
return line
|
|
default:
|
|
panic(fmt.Sprintf("scan line failed: n = %d, err = %v", n, err))
|
|
}
|
|
}
|
|
}
|