summaryrefslogtreecommitdiff
path: root/rrdformat/rrdbinary/cdef.go
diff options
context:
space:
mode:
Diffstat (limited to 'rrdformat/rrdbinary/cdef.go')
-rw-r--r--rrdformat/rrdbinary/cdef.go29
1 files changed, 29 insertions, 0 deletions
diff --git a/rrdformat/rrdbinary/cdef.go b/rrdformat/rrdbinary/cdef.go
new file mode 100644
index 0000000..5fbea4c
--- /dev/null
+++ b/rrdformat/rrdbinary/cdef.go
@@ -0,0 +1,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
+}