blob: 5fbea4c4e0db4bb91d1d94c67982eaf8b96840de (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
package rrdbinary
// RPNToken is one of the things that can be stored in a Unival; used
// by DST_CDEF.
type RPNToken struct {
Op uint8 // rpn operator type
Val int32 // used by OP_NUMBER (0), OP_VARIABLE (1), and OP_PREV_OTHER (36)
}
// AsRPNTokens returns 1 or 2 RPNTokens (depending on the
// Architecture.ShortSize).
func (u Unival) AsRPNTokens() []RPNToken {
var ret []RPNToken
data := u.data
for len(data) > 0 {
rpnpData := data[:u.arch.ShortAlign+u.arch.ShortWidth]
var rpnp RPNToken
rpnp.Op = rpnpData[0]
switch u.arch.ShortWidth {
case 2:
rpnp.Val = int32(int16(u.arch.ByteOrder.Uint16(rpnpData[u.arch.ShortAlign:])))
case 4:
rpnp.Val = int32(u.arch.ByteOrder.Uint32(rpnpData[u.arch.ShortAlign:]))
}
ret = append(ret, rpnp)
data = data[len(rpnpData):]
}
return ret
}
|