adding quickfix library
This commit is contained in:
78
quickfix/fix_int.go
Normal file
78
quickfix/fix_int.go
Normal file
@ -0,0 +1,78 @@
|
||||
// Copyright (c) quickfixengine.org All rights reserved.
|
||||
//
|
||||
// This file may be distributed under the terms of the quickfixengine.org
|
||||
// license as defined by quickfixengine.org and appearing in the file
|
||||
// LICENSE included in the packaging of this file.
|
||||
//
|
||||
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING
|
||||
// THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A
|
||||
// PARTICULAR PURPOSE.
|
||||
//
|
||||
// See http://www.quickfixengine.org/LICENSE for licensing information.
|
||||
//
|
||||
// Contact ask@quickfixengine.org if any conditions of this licensing
|
||||
// are not clear to you.
|
||||
|
||||
package quickfix
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
const (
|
||||
// ASCII - char.
|
||||
asciiMinus = 45
|
||||
|
||||
// ASCII numbers 0-9.
|
||||
ascii0 = 48
|
||||
ascii9 = 57
|
||||
)
|
||||
|
||||
// atoi is similar to the function in strconv, but is tuned for ints appearing in FIX field types.
|
||||
func atoi(d []byte) (int, error) {
|
||||
if d[0] == asciiMinus {
|
||||
n, err := parseUInt(d[1:])
|
||||
return (-1) * n, err
|
||||
}
|
||||
|
||||
return parseUInt(d)
|
||||
}
|
||||
|
||||
// parseUInt is similar to the function in strconv, but is tuned for ints appearing in FIX field types.
|
||||
func parseUInt(d []byte) (n int, err error) {
|
||||
if len(d) == 0 {
|
||||
err = errors.New("empty bytes")
|
||||
return
|
||||
}
|
||||
|
||||
for _, dec := range d {
|
||||
if dec < ascii0 || dec > ascii9 {
|
||||
err = errors.New("invalid format")
|
||||
return
|
||||
}
|
||||
|
||||
n = n*10 + (int(dec) - ascii0)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// FIXInt is a FIX Int Value, implements FieldValue.
|
||||
type FIXInt int
|
||||
|
||||
// Int converts the FIXInt value to int.
|
||||
func (f FIXInt) Int() int { return int(f) }
|
||||
|
||||
func (f *FIXInt) Read(bytes []byte) error {
|
||||
i, err := atoi(bytes)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
*f = FIXInt(i)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (f FIXInt) Write() []byte {
|
||||
return strconv.AppendInt(nil, int64(f), 10)
|
||||
}
|
||||
Reference in New Issue
Block a user