summaryrefslogtreecommitdiff
path: root/vendor/golang.org/x/text/currency/common.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/golang.org/x/text/currency/common.go')
-rw-r--r--vendor/golang.org/x/text/currency/common.go67
1 files changed, 67 insertions, 0 deletions
diff --git a/vendor/golang.org/x/text/currency/common.go b/vendor/golang.org/x/text/currency/common.go
new file mode 100644
index 0000000..fef15be
--- /dev/null
+++ b/vendor/golang.org/x/text/currency/common.go
@@ -0,0 +1,67 @@
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+package currency
+
+import (
+ "time"
+
+ "golang.org/x/text/language"
+)
+
+// This file contains code common to gen.go and the package code.
+
+const (
+ cashShift = 3
+ roundMask = 0x7
+
+ nonTenderBit = 0x8000
+)
+
+// currencyInfo contains information about a currency.
+// bits 0..2: index into roundings for standard rounding
+// bits 3..5: index into roundings for cash rounding
+type currencyInfo byte
+
+// roundingType defines the scale (number of fractional decimals) and increments
+// in terms of units of size 10^-scale. For example, for scale == 2 and
+// increment == 1, the currency is rounded to units of 0.01.
+type roundingType struct {
+ scale, increment uint8
+}
+
+// roundings contains rounding data for currencies. This struct is
+// created by hand as it is very unlikely to change much.
+var roundings = [...]roundingType{
+ {2, 1}, // default
+ {0, 1},
+ {1, 1},
+ {3, 1},
+ {4, 1},
+ {2, 5}, // cash rounding alternative
+ {2, 50},
+}
+
+// regionToCode returns a 16-bit region code. Only two-letter codes are
+// supported. (Three-letter codes are not needed.)
+func regionToCode(r language.Region) uint16 {
+ if s := r.String(); len(s) == 2 {
+ return uint16(s[0])<<8 | uint16(s[1])
+ }
+ return 0
+}
+
+func toDate(t time.Time) uint32 {
+ y := t.Year()
+ if y == 1 {
+ return 0
+ }
+ date := uint32(y) << 4
+ date |= uint32(t.Month())
+ date <<= 5
+ date |= uint32(t.Day())
+ return date
+}
+
+func fromDate(date uint32) time.Time {
+ return time.Date(int(date>>9), time.Month((date>>5)&0xf), int(date&0x1f), 0, 0, 0, 0, time.UTC)
+}