github.com/robotn/xgb@v0.0.0-20190912153532-2cb92d044934/xgbgen/size.go (about)

     1  package main
     2  
     3  // Size corresponds to an expression that represents the number of bytes
     4  // in some *thing*. Generally, sizes are used to allocate buffers and to
     5  // inform X how big requests are.
     6  // Size is basically a thin layer over an Expression that yields easy methods
     7  // for adding and multiplying sizes.
     8  type Size struct {
     9  	Expression
    10  	exact bool
    11  }
    12  
    13  // newFixedSize creates a new Size with some fixed and known value.
    14  func newFixedSize(fixed uint, exact bool) Size {
    15  	return Size{&Value{v: int(fixed)}, exact}
    16  }
    17  
    18  // newExpressionSize creates a new Size with some expression.
    19  func newExpressionSize(variable Expression, exact bool) Size {
    20  	return Size{variable, exact}
    21  }
    22  
    23  // Add adds s1 and s2 and returns a new Size.
    24  func (s1 Size) Add(s2 Size) Size {
    25  	return Size{newBinaryOp("+", s1, s2), s1.exact && s2.exact}
    26  }
    27  
    28  // Multiply mupltiplies s1 and s2 and returns a new Size.
    29  func (s1 Size) Multiply(s2 Size) Size {
    30  	return Size{newBinaryOp("*", s1, s2), s1.exact && s2.exact}
    31  }