func MakeInt(v int64, ts time.Time) Datum {
	d := &Int{}
	d.Set(v, ts)
	return d
}
MakeInt creates a new integer datum with the provided value and timestamp.
package datum
import (
	"fmt"
	"math"
	"sort"
	"sync/atomic"
	"time"
)
type Datum interface {
	ValueString() string
	TimeString() string
	TimeUTC() time.Time
}
type BaseDatum struct {
	Time int64  
}
var zeroTime time.Time
func (d *BaseDatum) stamp(timestamp time.Time) {
	if timestamp.IsZero() {
		atomic.StoreInt64(&d.Time, time.Now().UTC().UnixNano())
	} else {
		atomic.StoreInt64(&d.Time, timestamp.UnixNano())
	}
}
func (d *BaseDatum) TimeString() string {
	return fmt.Sprintf("%d", atomic.LoadInt64(&d.Time)/1e9)
}
func (d *BaseDatum) TimeUTC() time.Time {
	tNsec := atomic.LoadInt64(&d.Time)
	return time.Unix(tNsec/1e9, tNsec%1e9)
}
func NewInt() Datum {
	return MakeInt(0, zeroTime)
}
func NewFloat() Datum {
	return MakeFloat(0., zeroTime)
}
func NewString() Datum {
	return MakeString("", zeroTime)
}
func NewBuckets(buckets []Range) Datum {
	return MakeBuckets(buckets, zeroTime)
}