aboutsummaryrefslogtreecommitdiff
path: root/ber
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2015-08-06 16:08:59 +0200
committerDimitri Sokolyuk <demon@dim13.org>2015-08-06 16:08:59 +0200
commitad9f52bfce0805e757af93190332ed9ccb69269a (patch)
treeb57ff169565eb1ea36e4302f651c5963997eefce /ber
parent6e144a4731e7f1081d4049d6f80011f921558048 (diff)
Simplify int
Diffstat (limited to 'ber')
-rw-r--r--ber/int.go46
1 files changed, 22 insertions, 24 deletions
diff --git a/ber/int.go b/ber/int.go
index bbf93ea..437e0c6 100644
--- a/ber/int.go
+++ b/ber/int.go
@@ -1,44 +1,42 @@
package ber
-func intLen(i int64) int {
- n := 1
- for i > 255 {
- n++
- i >>= 8
- }
- for i < -256 {
- n++
- i >>= 8
- }
- return n
-}
-
func unmarshalInt(b []byte) (i int64) {
- nn := len(b)
neg := b[0]&0x80 != 0
- if b[0] == 0xFF {
- b = b[1:]
- nn -= 1
- }
for n, v := range b {
if neg {
v = ^v
}
- i += int64(v) << uint((nn-n-1)*8)
+ i += int64(v) << uint((len(b)-n-1)*8)
}
if neg {
- i = -i - 1
+ i = ^i
}
return
}
-func unmarshalUint(b []byte) (i int64) {
+func unmarshalUint(b []byte) (i uint64) {
for n, v := range b {
- i += int64(v) << uint(n*8)
+ i += uint64(v) << uint(n*8)
}
return
}
+func UnmarshalInt(b []byte) int {
+ return int(unmarshalInt(b))
+}
+
+func intLen(i int64) (n int) {
+ for i > 255 {
+ n++
+ i >>= 8
+ }
+ for i < -256 {
+ n++
+ i >>= 8
+ }
+ return n + 1
+}
+
func marshalInt(i int64) (b []byte) {
for n := intLen(i); n > 0; n-- {
b = append(b, byte(i>>uint((n-1)*8)))
@@ -52,6 +50,6 @@ func marshalInt(i int64) (b []byte) {
return
}
-func UnmarshalInt(b []byte) int {
- return int(unmarshalInt(b))
+func MarshalInt(i int) []byte {
+ return marshalInt(int64(i))
}