diff options
Diffstat (limited to 'nexgb/xgbgen/size.go')
-rw-r--r-- | nexgb/xgbgen/size.go | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/nexgb/xgbgen/size.go b/nexgb/xgbgen/size.go new file mode 100644 index 0000000..6e49371 --- /dev/null +++ b/nexgb/xgbgen/size.go @@ -0,0 +1,31 @@ +package main + +// Size corresponds to an expression that represents the number of bytes +// in some *thing*. Generally, sizes are used to allocate buffers and to +// inform X how big requests are. +// Size is basically a thin layer over an Expression that yields easy methods +// for adding and multiplying sizes. +type Size struct { + Expression + exact bool +} + +// newFixedSize creates a new Size with some fixed and known value. +func newFixedSize(fixed uint, exact bool) Size { + return Size{&Value{v: int(fixed)}, exact} +} + +// newExpressionSize creates a new Size with some expression. +func newExpressionSize(variable Expression, exact bool) Size { + return Size{variable, exact} +} + +// Add adds s1 and s2 and returns a new Size. +func (s1 Size) Add(s2 Size) Size { + return Size{newBinaryOp("+", s1, s2), s1.exact && s2.exact} +} + +// Multiply mupltiplies s1 and s2 and returns a new Size. +func (s1 Size) Multiply(s2 Size) Size { + return Size{newBinaryOp("*", s1, s2), s1.exact && s2.exact} +} |