mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	go1.16 (#14783)
This commit is contained in:
		
							
								
								
									
										4
									
								
								vendor/go.uber.org/atomic/.codecov.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/go.uber.org/atomic/.codecov.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -13,3 +13,7 @@ coverage:
 | 
			
		||||
        if_not_found: success  # if parent is not found report status as success, error, or failure
 | 
			
		||||
        if_ci_failed: error    # if ci fails report status as success, error, or failure
 | 
			
		||||
 | 
			
		||||
# Also update COVER_IGNORE_PKGS in the Makefile.
 | 
			
		||||
ignore:
 | 
			
		||||
  - /internal/gen-atomicint/
 | 
			
		||||
  - /internal/gen-valuewrapper/
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								vendor/go.uber.org/atomic/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/go.uber.org/atomic/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -8,8 +8,8 @@ env:
 | 
			
		||||
 | 
			
		||||
matrix:
 | 
			
		||||
  include:
 | 
			
		||||
  - go: 1.12.x
 | 
			
		||||
  - go: 1.13.x
 | 
			
		||||
  - go: oldstable
 | 
			
		||||
  - go: stable
 | 
			
		||||
    env: LINT=1
 | 
			
		||||
 | 
			
		||||
cache:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								vendor/go.uber.org/atomic/CHANGELOG.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								vendor/go.uber.org/atomic/CHANGELOG.md
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -4,6 +4,17 @@ All notable changes to this project will be documented in this file.
 | 
			
		||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
 | 
			
		||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 | 
			
		||||
 | 
			
		||||
## [1.7.0] - 2020-09-14
 | 
			
		||||
### Added
 | 
			
		||||
- Support JSON serialization and deserialization of primitive atomic types.
 | 
			
		||||
- Support Text marshalling and unmarshalling for string atomics.
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
- Disallow incorrect comparison of atomic values in a non-atomic way.
 | 
			
		||||
 | 
			
		||||
### Removed
 | 
			
		||||
- Remove dependency on `golang.org/x/{lint, tools}`.
 | 
			
		||||
 | 
			
		||||
## [1.6.0] - 2020-02-24
 | 
			
		||||
### Changed
 | 
			
		||||
- Drop library dependency on `golang.org/x/{lint, tools}`.
 | 
			
		||||
@@ -52,6 +63,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 | 
			
		||||
 | 
			
		||||
- Initial release.
 | 
			
		||||
 | 
			
		||||
[1.7.0]: https://github.com/uber-go/atomic/compare/v1.6.0...v1.7.0
 | 
			
		||||
[1.6.0]: https://github.com/uber-go/atomic/compare/v1.5.1...v1.6.0
 | 
			
		||||
[1.5.1]: https://github.com/uber-go/atomic/compare/v1.5.0...v1.5.1
 | 
			
		||||
[1.5.0]: https://github.com/uber-go/atomic/compare/v1.4.0...v1.5.0
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										51
									
								
								vendor/go.uber.org/atomic/Makefile
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										51
									
								
								vendor/go.uber.org/atomic/Makefile
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -2,8 +2,16 @@
 | 
			
		||||
export GOBIN ?= $(shell pwd)/bin
 | 
			
		||||
 | 
			
		||||
GOLINT = $(GOBIN)/golint
 | 
			
		||||
GEN_ATOMICINT = $(GOBIN)/gen-atomicint
 | 
			
		||||
GEN_ATOMICWRAPPER = $(GOBIN)/gen-atomicwrapper
 | 
			
		||||
STATICCHECK = $(GOBIN)/staticcheck
 | 
			
		||||
 | 
			
		||||
GO_FILES ?= *.go
 | 
			
		||||
GO_FILES ?= $(shell find . '(' -path .git -o -path vendor ')' -prune -o -name '*.go' -print)
 | 
			
		||||
 | 
			
		||||
# Also update ignore section in .codecov.yml.
 | 
			
		||||
COVER_IGNORE_PKGS = \
 | 
			
		||||
	go.uber.org/atomic/internal/gen-atomicint \
 | 
			
		||||
	go.uber.org/atomic/internal/gen-atomicwrapper
 | 
			
		||||
 | 
			
		||||
.PHONY: build
 | 
			
		||||
build:
 | 
			
		||||
@@ -20,16 +28,51 @@ gofmt:
 | 
			
		||||
	@[ ! -s "$(FMT_LOG)" ] || (echo "gofmt failed:" && cat $(FMT_LOG) && false)
 | 
			
		||||
 | 
			
		||||
$(GOLINT):
 | 
			
		||||
	go install golang.org/x/lint/golint
 | 
			
		||||
	cd tools && go install golang.org/x/lint/golint
 | 
			
		||||
 | 
			
		||||
$(STATICCHECK):
 | 
			
		||||
	cd tools && go install honnef.co/go/tools/cmd/staticcheck
 | 
			
		||||
 | 
			
		||||
$(GEN_ATOMICWRAPPER): $(wildcard ./internal/gen-atomicwrapper/*)
 | 
			
		||||
	go build -o $@ ./internal/gen-atomicwrapper
 | 
			
		||||
 | 
			
		||||
$(GEN_ATOMICINT): $(wildcard ./internal/gen-atomicint/*)
 | 
			
		||||
	go build -o $@ ./internal/gen-atomicint
 | 
			
		||||
 | 
			
		||||
.PHONY: golint
 | 
			
		||||
golint: $(GOLINT)
 | 
			
		||||
	$(GOLINT) ./...
 | 
			
		||||
 | 
			
		||||
.PHONY: staticcheck
 | 
			
		||||
staticcheck: $(STATICCHECK)
 | 
			
		||||
	$(STATICCHECK) ./...
 | 
			
		||||
 | 
			
		||||
.PHONY: lint
 | 
			
		||||
lint: gofmt golint
 | 
			
		||||
lint: gofmt golint staticcheck generatenodirty
 | 
			
		||||
 | 
			
		||||
# comma separated list of packages to consider for code coverage.
 | 
			
		||||
COVER_PKG = $(shell \
 | 
			
		||||
	go list -find ./... | \
 | 
			
		||||
	grep -v $(foreach pkg,$(COVER_IGNORE_PKGS),-e "^$(pkg)$$") | \
 | 
			
		||||
	paste -sd, -)
 | 
			
		||||
 | 
			
		||||
.PHONY: cover
 | 
			
		||||
cover:
 | 
			
		||||
	go test -coverprofile=cover.out -coverpkg ./... -v ./...
 | 
			
		||||
	go test -coverprofile=cover.out -coverpkg  $(COVER_PKG) -v ./...
 | 
			
		||||
	go tool cover -html=cover.out -o cover.html
 | 
			
		||||
 | 
			
		||||
.PHONY: generate
 | 
			
		||||
generate: $(GEN_ATOMICINT) $(GEN_ATOMICWRAPPER)
 | 
			
		||||
	go generate ./...
 | 
			
		||||
 | 
			
		||||
.PHONY: generatenodirty
 | 
			
		||||
generatenodirty:
 | 
			
		||||
	@[ -z "$$(git status --porcelain)" ] || ( \
 | 
			
		||||
		echo "Working tree is dirty. Commit your changes first."; \
 | 
			
		||||
		exit 1 )
 | 
			
		||||
	@make generate
 | 
			
		||||
	@status=$$(git status --porcelain); \
 | 
			
		||||
		[ -z "$$status" ] || ( \
 | 
			
		||||
		echo "Working tree is dirty after `make generate`:"; \
 | 
			
		||||
		echo "$$status"; \
 | 
			
		||||
		echo "Please ensure that the generated code is up-to-date." )
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										356
									
								
								vendor/go.uber.org/atomic/atomic.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										356
									
								
								vendor/go.uber.org/atomic/atomic.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,356 +0,0 @@
 | 
			
		||||
// Copyright (c) 2016 Uber Technologies, Inc.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
// of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
// in the Software without restriction, including without limitation the rights
 | 
			
		||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
// copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
// furnished to do so, subject to the following conditions:
 | 
			
		||||
//
 | 
			
		||||
// The above copyright notice and this permission notice shall be included in
 | 
			
		||||
// all copies or substantial portions of the Software.
 | 
			
		||||
//
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
			
		||||
// THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
// Package atomic provides simple wrappers around numerics to enforce atomic
 | 
			
		||||
// access.
 | 
			
		||||
package atomic
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"math"
 | 
			
		||||
	"sync/atomic"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Int32 is an atomic wrapper around an int32.
 | 
			
		||||
type Int32 struct{ v int32 }
 | 
			
		||||
 | 
			
		||||
// NewInt32 creates an Int32.
 | 
			
		||||
func NewInt32(i int32) *Int32 {
 | 
			
		||||
	return &Int32{i}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Load atomically loads the wrapped value.
 | 
			
		||||
func (i *Int32) Load() int32 {
 | 
			
		||||
	return atomic.LoadInt32(&i.v)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Add atomically adds to the wrapped int32 and returns the new value.
 | 
			
		||||
func (i *Int32) Add(n int32) int32 {
 | 
			
		||||
	return atomic.AddInt32(&i.v, n)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Sub atomically subtracts from the wrapped int32 and returns the new value.
 | 
			
		||||
func (i *Int32) Sub(n int32) int32 {
 | 
			
		||||
	return atomic.AddInt32(&i.v, -n)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Inc atomically increments the wrapped int32 and returns the new value.
 | 
			
		||||
func (i *Int32) Inc() int32 {
 | 
			
		||||
	return i.Add(1)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Dec atomically decrements the wrapped int32 and returns the new value.
 | 
			
		||||
func (i *Int32) Dec() int32 {
 | 
			
		||||
	return i.Sub(1)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CAS is an atomic compare-and-swap.
 | 
			
		||||
func (i *Int32) CAS(old, new int32) bool {
 | 
			
		||||
	return atomic.CompareAndSwapInt32(&i.v, old, new)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Store atomically stores the passed value.
 | 
			
		||||
func (i *Int32) Store(n int32) {
 | 
			
		||||
	atomic.StoreInt32(&i.v, n)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Swap atomically swaps the wrapped int32 and returns the old value.
 | 
			
		||||
func (i *Int32) Swap(n int32) int32 {
 | 
			
		||||
	return atomic.SwapInt32(&i.v, n)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Int64 is an atomic wrapper around an int64.
 | 
			
		||||
type Int64 struct{ v int64 }
 | 
			
		||||
 | 
			
		||||
// NewInt64 creates an Int64.
 | 
			
		||||
func NewInt64(i int64) *Int64 {
 | 
			
		||||
	return &Int64{i}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Load atomically loads the wrapped value.
 | 
			
		||||
func (i *Int64) Load() int64 {
 | 
			
		||||
	return atomic.LoadInt64(&i.v)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Add atomically adds to the wrapped int64 and returns the new value.
 | 
			
		||||
func (i *Int64) Add(n int64) int64 {
 | 
			
		||||
	return atomic.AddInt64(&i.v, n)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Sub atomically subtracts from the wrapped int64 and returns the new value.
 | 
			
		||||
func (i *Int64) Sub(n int64) int64 {
 | 
			
		||||
	return atomic.AddInt64(&i.v, -n)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Inc atomically increments the wrapped int64 and returns the new value.
 | 
			
		||||
func (i *Int64) Inc() int64 {
 | 
			
		||||
	return i.Add(1)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Dec atomically decrements the wrapped int64 and returns the new value.
 | 
			
		||||
func (i *Int64) Dec() int64 {
 | 
			
		||||
	return i.Sub(1)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CAS is an atomic compare-and-swap.
 | 
			
		||||
func (i *Int64) CAS(old, new int64) bool {
 | 
			
		||||
	return atomic.CompareAndSwapInt64(&i.v, old, new)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Store atomically stores the passed value.
 | 
			
		||||
func (i *Int64) Store(n int64) {
 | 
			
		||||
	atomic.StoreInt64(&i.v, n)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Swap atomically swaps the wrapped int64 and returns the old value.
 | 
			
		||||
func (i *Int64) Swap(n int64) int64 {
 | 
			
		||||
	return atomic.SwapInt64(&i.v, n)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Uint32 is an atomic wrapper around an uint32.
 | 
			
		||||
type Uint32 struct{ v uint32 }
 | 
			
		||||
 | 
			
		||||
// NewUint32 creates a Uint32.
 | 
			
		||||
func NewUint32(i uint32) *Uint32 {
 | 
			
		||||
	return &Uint32{i}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Load atomically loads the wrapped value.
 | 
			
		||||
func (i *Uint32) Load() uint32 {
 | 
			
		||||
	return atomic.LoadUint32(&i.v)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Add atomically adds to the wrapped uint32 and returns the new value.
 | 
			
		||||
func (i *Uint32) Add(n uint32) uint32 {
 | 
			
		||||
	return atomic.AddUint32(&i.v, n)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Sub atomically subtracts from the wrapped uint32 and returns the new value.
 | 
			
		||||
func (i *Uint32) Sub(n uint32) uint32 {
 | 
			
		||||
	return atomic.AddUint32(&i.v, ^(n - 1))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Inc atomically increments the wrapped uint32 and returns the new value.
 | 
			
		||||
func (i *Uint32) Inc() uint32 {
 | 
			
		||||
	return i.Add(1)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Dec atomically decrements the wrapped int32 and returns the new value.
 | 
			
		||||
func (i *Uint32) Dec() uint32 {
 | 
			
		||||
	return i.Sub(1)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CAS is an atomic compare-and-swap.
 | 
			
		||||
func (i *Uint32) CAS(old, new uint32) bool {
 | 
			
		||||
	return atomic.CompareAndSwapUint32(&i.v, old, new)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Store atomically stores the passed value.
 | 
			
		||||
func (i *Uint32) Store(n uint32) {
 | 
			
		||||
	atomic.StoreUint32(&i.v, n)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Swap atomically swaps the wrapped uint32 and returns the old value.
 | 
			
		||||
func (i *Uint32) Swap(n uint32) uint32 {
 | 
			
		||||
	return atomic.SwapUint32(&i.v, n)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Uint64 is an atomic wrapper around a uint64.
 | 
			
		||||
type Uint64 struct{ v uint64 }
 | 
			
		||||
 | 
			
		||||
// NewUint64 creates a Uint64.
 | 
			
		||||
func NewUint64(i uint64) *Uint64 {
 | 
			
		||||
	return &Uint64{i}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Load atomically loads the wrapped value.
 | 
			
		||||
func (i *Uint64) Load() uint64 {
 | 
			
		||||
	return atomic.LoadUint64(&i.v)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Add atomically adds to the wrapped uint64 and returns the new value.
 | 
			
		||||
func (i *Uint64) Add(n uint64) uint64 {
 | 
			
		||||
	return atomic.AddUint64(&i.v, n)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Sub atomically subtracts from the wrapped uint64 and returns the new value.
 | 
			
		||||
func (i *Uint64) Sub(n uint64) uint64 {
 | 
			
		||||
	return atomic.AddUint64(&i.v, ^(n - 1))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Inc atomically increments the wrapped uint64 and returns the new value.
 | 
			
		||||
func (i *Uint64) Inc() uint64 {
 | 
			
		||||
	return i.Add(1)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Dec atomically decrements the wrapped uint64 and returns the new value.
 | 
			
		||||
func (i *Uint64) Dec() uint64 {
 | 
			
		||||
	return i.Sub(1)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CAS is an atomic compare-and-swap.
 | 
			
		||||
func (i *Uint64) CAS(old, new uint64) bool {
 | 
			
		||||
	return atomic.CompareAndSwapUint64(&i.v, old, new)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Store atomically stores the passed value.
 | 
			
		||||
func (i *Uint64) Store(n uint64) {
 | 
			
		||||
	atomic.StoreUint64(&i.v, n)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Swap atomically swaps the wrapped uint64 and returns the old value.
 | 
			
		||||
func (i *Uint64) Swap(n uint64) uint64 {
 | 
			
		||||
	return atomic.SwapUint64(&i.v, n)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Bool is an atomic Boolean.
 | 
			
		||||
type Bool struct{ v uint32 }
 | 
			
		||||
 | 
			
		||||
// NewBool creates a Bool.
 | 
			
		||||
func NewBool(initial bool) *Bool {
 | 
			
		||||
	return &Bool{boolToInt(initial)}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Load atomically loads the Boolean.
 | 
			
		||||
func (b *Bool) Load() bool {
 | 
			
		||||
	return truthy(atomic.LoadUint32(&b.v))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CAS is an atomic compare-and-swap.
 | 
			
		||||
func (b *Bool) CAS(old, new bool) bool {
 | 
			
		||||
	return atomic.CompareAndSwapUint32(&b.v, boolToInt(old), boolToInt(new))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Store atomically stores the passed value.
 | 
			
		||||
func (b *Bool) Store(new bool) {
 | 
			
		||||
	atomic.StoreUint32(&b.v, boolToInt(new))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Swap sets the given value and returns the previous value.
 | 
			
		||||
func (b *Bool) Swap(new bool) bool {
 | 
			
		||||
	return truthy(atomic.SwapUint32(&b.v, boolToInt(new)))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Toggle atomically negates the Boolean and returns the previous value.
 | 
			
		||||
func (b *Bool) Toggle() bool {
 | 
			
		||||
	for {
 | 
			
		||||
		old := b.Load()
 | 
			
		||||
		if b.CAS(old, !old) {
 | 
			
		||||
			return old
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func truthy(n uint32) bool {
 | 
			
		||||
	return n == 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func boolToInt(b bool) uint32 {
 | 
			
		||||
	if b {
 | 
			
		||||
		return 1
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Float64 is an atomic wrapper around float64.
 | 
			
		||||
type Float64 struct {
 | 
			
		||||
	v uint64
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NewFloat64 creates a Float64.
 | 
			
		||||
func NewFloat64(f float64) *Float64 {
 | 
			
		||||
	return &Float64{math.Float64bits(f)}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Load atomically loads the wrapped value.
 | 
			
		||||
func (f *Float64) Load() float64 {
 | 
			
		||||
	return math.Float64frombits(atomic.LoadUint64(&f.v))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Store atomically stores the passed value.
 | 
			
		||||
func (f *Float64) Store(s float64) {
 | 
			
		||||
	atomic.StoreUint64(&f.v, math.Float64bits(s))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Add atomically adds to the wrapped float64 and returns the new value.
 | 
			
		||||
func (f *Float64) Add(s float64) float64 {
 | 
			
		||||
	for {
 | 
			
		||||
		old := f.Load()
 | 
			
		||||
		new := old + s
 | 
			
		||||
		if f.CAS(old, new) {
 | 
			
		||||
			return new
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Sub atomically subtracts from the wrapped float64 and returns the new value.
 | 
			
		||||
func (f *Float64) Sub(s float64) float64 {
 | 
			
		||||
	return f.Add(-s)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CAS is an atomic compare-and-swap.
 | 
			
		||||
func (f *Float64) CAS(old, new float64) bool {
 | 
			
		||||
	return atomic.CompareAndSwapUint64(&f.v, math.Float64bits(old), math.Float64bits(new))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Duration is an atomic wrapper around time.Duration
 | 
			
		||||
// https://godoc.org/time#Duration
 | 
			
		||||
type Duration struct {
 | 
			
		||||
	v Int64
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NewDuration creates a Duration.
 | 
			
		||||
func NewDuration(d time.Duration) *Duration {
 | 
			
		||||
	return &Duration{v: *NewInt64(int64(d))}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Load atomically loads the wrapped value.
 | 
			
		||||
func (d *Duration) Load() time.Duration {
 | 
			
		||||
	return time.Duration(d.v.Load())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Store atomically stores the passed value.
 | 
			
		||||
func (d *Duration) Store(n time.Duration) {
 | 
			
		||||
	d.v.Store(int64(n))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Add atomically adds to the wrapped time.Duration and returns the new value.
 | 
			
		||||
func (d *Duration) Add(n time.Duration) time.Duration {
 | 
			
		||||
	return time.Duration(d.v.Add(int64(n)))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Sub atomically subtracts from the wrapped time.Duration and returns the new value.
 | 
			
		||||
func (d *Duration) Sub(n time.Duration) time.Duration {
 | 
			
		||||
	return time.Duration(d.v.Sub(int64(n)))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Swap atomically swaps the wrapped time.Duration and returns the old value.
 | 
			
		||||
func (d *Duration) Swap(n time.Duration) time.Duration {
 | 
			
		||||
	return time.Duration(d.v.Swap(int64(n)))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CAS is an atomic compare-and-swap.
 | 
			
		||||
func (d *Duration) CAS(old, new time.Duration) bool {
 | 
			
		||||
	return d.v.CAS(int64(old), int64(new))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Value shadows the type of the same name from sync/atomic
 | 
			
		||||
// https://godoc.org/sync/atomic#Value
 | 
			
		||||
type Value struct{ atomic.Value }
 | 
			
		||||
							
								
								
									
										81
									
								
								vendor/go.uber.org/atomic/bool.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								vendor/go.uber.org/atomic/bool.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,81 @@
 | 
			
		||||
// @generated Code generated by gen-atomicwrapper.
 | 
			
		||||
 | 
			
		||||
// Copyright (c) 2020 Uber Technologies, Inc.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
// of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
// in the Software without restriction, including without limitation the rights
 | 
			
		||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
// copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
// furnished to do so, subject to the following conditions:
 | 
			
		||||
//
 | 
			
		||||
// The above copyright notice and this permission notice shall be included in
 | 
			
		||||
// all copies or substantial portions of the Software.
 | 
			
		||||
//
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
			
		||||
// THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
package atomic
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Bool is an atomic type-safe wrapper for bool values.
 | 
			
		||||
type Bool struct {
 | 
			
		||||
	_ nocmp // disallow non-atomic comparison
 | 
			
		||||
 | 
			
		||||
	v Uint32
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var _zeroBool bool
 | 
			
		||||
 | 
			
		||||
// NewBool creates a new Bool.
 | 
			
		||||
func NewBool(v bool) *Bool {
 | 
			
		||||
	x := &Bool{}
 | 
			
		||||
	if v != _zeroBool {
 | 
			
		||||
		x.Store(v)
 | 
			
		||||
	}
 | 
			
		||||
	return x
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Load atomically loads the wrapped bool.
 | 
			
		||||
func (x *Bool) Load() bool {
 | 
			
		||||
	return truthy(x.v.Load())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Store atomically stores the passed bool.
 | 
			
		||||
func (x *Bool) Store(v bool) {
 | 
			
		||||
	x.v.Store(boolToInt(v))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CAS is an atomic compare-and-swap for bool values.
 | 
			
		||||
func (x *Bool) CAS(o, n bool) bool {
 | 
			
		||||
	return x.v.CAS(boolToInt(o), boolToInt(n))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Swap atomically stores the given bool and returns the old
 | 
			
		||||
// value.
 | 
			
		||||
func (x *Bool) Swap(o bool) bool {
 | 
			
		||||
	return truthy(x.v.Swap(boolToInt(o)))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// MarshalJSON encodes the wrapped bool into JSON.
 | 
			
		||||
func (x *Bool) MarshalJSON() ([]byte, error) {
 | 
			
		||||
	return json.Marshal(x.Load())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UnmarshalJSON decodes a bool from JSON.
 | 
			
		||||
func (x *Bool) UnmarshalJSON(b []byte) error {
 | 
			
		||||
	var v bool
 | 
			
		||||
	if err := json.Unmarshal(b, &v); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	x.Store(v)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										53
									
								
								vendor/go.uber.org/atomic/bool_ext.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								vendor/go.uber.org/atomic/bool_ext.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,53 @@
 | 
			
		||||
// Copyright (c) 2020 Uber Technologies, Inc.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
// of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
// in the Software without restriction, including without limitation the rights
 | 
			
		||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
// copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
// furnished to do so, subject to the following conditions:
 | 
			
		||||
//
 | 
			
		||||
// The above copyright notice and this permission notice shall be included in
 | 
			
		||||
// all copies or substantial portions of the Software.
 | 
			
		||||
//
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
			
		||||
// THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
package atomic
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"strconv"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
//go:generate bin/gen-atomicwrapper -name=Bool -type=bool -wrapped=Uint32 -pack=boolToInt -unpack=truthy -cas -swap -json -file=bool.go
 | 
			
		||||
 | 
			
		||||
func truthy(n uint32) bool {
 | 
			
		||||
	return n == 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func boolToInt(b bool) uint32 {
 | 
			
		||||
	if b {
 | 
			
		||||
		return 1
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Toggle atomically negates the Boolean and returns the previous value.
 | 
			
		||||
func (b *Bool) Toggle() bool {
 | 
			
		||||
	for {
 | 
			
		||||
		old := b.Load()
 | 
			
		||||
		if b.CAS(old, !old) {
 | 
			
		||||
			return old
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// String encodes the wrapped value as a string.
 | 
			
		||||
func (b *Bool) String() string {
 | 
			
		||||
	return strconv.FormatBool(b.Load())
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										23
									
								
								vendor/go.uber.org/atomic/doc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								vendor/go.uber.org/atomic/doc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
			
		||||
// Copyright (c) 2020 Uber Technologies, Inc.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
// of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
// in the Software without restriction, including without limitation the rights
 | 
			
		||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
// copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
// furnished to do so, subject to the following conditions:
 | 
			
		||||
//
 | 
			
		||||
// The above copyright notice and this permission notice shall be included in
 | 
			
		||||
// all copies or substantial portions of the Software.
 | 
			
		||||
//
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
			
		||||
// THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
// Package atomic provides simple wrappers around numerics to enforce atomic
 | 
			
		||||
// access.
 | 
			
		||||
package atomic
 | 
			
		||||
							
								
								
									
										82
									
								
								vendor/go.uber.org/atomic/duration.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								vendor/go.uber.org/atomic/duration.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,82 @@
 | 
			
		||||
// @generated Code generated by gen-atomicwrapper.
 | 
			
		||||
 | 
			
		||||
// Copyright (c) 2020 Uber Technologies, Inc.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
// of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
// in the Software without restriction, including without limitation the rights
 | 
			
		||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
// copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
// furnished to do so, subject to the following conditions:
 | 
			
		||||
//
 | 
			
		||||
// The above copyright notice and this permission notice shall be included in
 | 
			
		||||
// all copies or substantial portions of the Software.
 | 
			
		||||
//
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
			
		||||
// THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
package atomic
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Duration is an atomic type-safe wrapper for time.Duration values.
 | 
			
		||||
type Duration struct {
 | 
			
		||||
	_ nocmp // disallow non-atomic comparison
 | 
			
		||||
 | 
			
		||||
	v Int64
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var _zeroDuration time.Duration
 | 
			
		||||
 | 
			
		||||
// NewDuration creates a new Duration.
 | 
			
		||||
func NewDuration(v time.Duration) *Duration {
 | 
			
		||||
	x := &Duration{}
 | 
			
		||||
	if v != _zeroDuration {
 | 
			
		||||
		x.Store(v)
 | 
			
		||||
	}
 | 
			
		||||
	return x
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Load atomically loads the wrapped time.Duration.
 | 
			
		||||
func (x *Duration) Load() time.Duration {
 | 
			
		||||
	return time.Duration(x.v.Load())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Store atomically stores the passed time.Duration.
 | 
			
		||||
func (x *Duration) Store(v time.Duration) {
 | 
			
		||||
	x.v.Store(int64(v))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CAS is an atomic compare-and-swap for time.Duration values.
 | 
			
		||||
func (x *Duration) CAS(o, n time.Duration) bool {
 | 
			
		||||
	return x.v.CAS(int64(o), int64(n))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Swap atomically stores the given time.Duration and returns the old
 | 
			
		||||
// value.
 | 
			
		||||
func (x *Duration) Swap(o time.Duration) time.Duration {
 | 
			
		||||
	return time.Duration(x.v.Swap(int64(o)))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// MarshalJSON encodes the wrapped time.Duration into JSON.
 | 
			
		||||
func (x *Duration) MarshalJSON() ([]byte, error) {
 | 
			
		||||
	return json.Marshal(x.Load())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UnmarshalJSON decodes a time.Duration from JSON.
 | 
			
		||||
func (x *Duration) UnmarshalJSON(b []byte) error {
 | 
			
		||||
	var v time.Duration
 | 
			
		||||
	if err := json.Unmarshal(b, &v); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	x.Store(v)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										40
									
								
								vendor/go.uber.org/atomic/duration_ext.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								vendor/go.uber.org/atomic/duration_ext.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
// Copyright (c) 2020 Uber Technologies, Inc.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
// of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
// in the Software without restriction, including without limitation the rights
 | 
			
		||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
// copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
// furnished to do so, subject to the following conditions:
 | 
			
		||||
//
 | 
			
		||||
// The above copyright notice and this permission notice shall be included in
 | 
			
		||||
// all copies or substantial portions of the Software.
 | 
			
		||||
//
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
			
		||||
// THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
package atomic
 | 
			
		||||
 | 
			
		||||
import "time"
 | 
			
		||||
 | 
			
		||||
//go:generate bin/gen-atomicwrapper -name=Duration -type=time.Duration -wrapped=Int64 -pack=int64 -unpack=time.Duration -cas -swap -json -imports time -file=duration.go
 | 
			
		||||
 | 
			
		||||
// Add atomically adds to the wrapped time.Duration and returns the new value.
 | 
			
		||||
func (d *Duration) Add(n time.Duration) time.Duration {
 | 
			
		||||
	return time.Duration(d.v.Add(int64(n)))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Sub atomically subtracts from the wrapped time.Duration and returns the new value.
 | 
			
		||||
func (d *Duration) Sub(n time.Duration) time.Duration {
 | 
			
		||||
	return time.Duration(d.v.Sub(int64(n)))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// String encodes the wrapped value as a string.
 | 
			
		||||
func (d *Duration) String() string {
 | 
			
		||||
	return d.Load().String()
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										48
									
								
								vendor/go.uber.org/atomic/error.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										48
									
								
								vendor/go.uber.org/atomic/error.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,4 +1,6 @@
 | 
			
		||||
// Copyright (c) 2016 Uber Technologies, Inc.
 | 
			
		||||
// @generated Code generated by gen-atomicwrapper.
 | 
			
		||||
 | 
			
		||||
// Copyright (c) 2020 Uber Technologies, Inc.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
// of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
@@ -20,36 +22,30 @@
 | 
			
		||||
 | 
			
		||||
package atomic
 | 
			
		||||
 | 
			
		||||
// Error is an atomic type-safe wrapper around Value for errors
 | 
			
		||||
type Error struct{ v Value }
 | 
			
		||||
// Error is an atomic type-safe wrapper for error values.
 | 
			
		||||
type Error struct {
 | 
			
		||||
	_ nocmp // disallow non-atomic comparison
 | 
			
		||||
 | 
			
		||||
// errorHolder is non-nil holder for error object.
 | 
			
		||||
// atomic.Value panics on saving nil object, so err object needs to be
 | 
			
		||||
// wrapped with valid object first.
 | 
			
		||||
type errorHolder struct{ err error }
 | 
			
		||||
	v Value
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NewError creates new atomic error object
 | 
			
		||||
func NewError(err error) *Error {
 | 
			
		||||
	e := &Error{}
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		e.Store(err)
 | 
			
		||||
var _zeroError error
 | 
			
		||||
 | 
			
		||||
// NewError creates a new Error.
 | 
			
		||||
func NewError(v error) *Error {
 | 
			
		||||
	x := &Error{}
 | 
			
		||||
	if v != _zeroError {
 | 
			
		||||
		x.Store(v)
 | 
			
		||||
	}
 | 
			
		||||
	return e
 | 
			
		||||
	return x
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Load atomically loads the wrapped error
 | 
			
		||||
func (e *Error) Load() error {
 | 
			
		||||
	v := e.v.Load()
 | 
			
		||||
	if v == nil {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	eh := v.(errorHolder)
 | 
			
		||||
	return eh.err
 | 
			
		||||
// Load atomically loads the wrapped error.
 | 
			
		||||
func (x *Error) Load() error {
 | 
			
		||||
	return unpackError(x.v.Load())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Store atomically stores error.
 | 
			
		||||
// NOTE: a holder object is allocated on each Store call.
 | 
			
		||||
func (e *Error) Store(err error) {
 | 
			
		||||
	e.v.Store(errorHolder{err: err})
 | 
			
		||||
// Store atomically stores the passed error.
 | 
			
		||||
func (x *Error) Store(v error) {
 | 
			
		||||
	x.v.Store(packError(v))
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										39
									
								
								vendor/go.uber.org/atomic/error_ext.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								vendor/go.uber.org/atomic/error_ext.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
// Copyright (c) 2020 Uber Technologies, Inc.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
// of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
// in the Software without restriction, including without limitation the rights
 | 
			
		||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
// copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
// furnished to do so, subject to the following conditions:
 | 
			
		||||
//
 | 
			
		||||
// The above copyright notice and this permission notice shall be included in
 | 
			
		||||
// all copies or substantial portions of the Software.
 | 
			
		||||
//
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
			
		||||
// THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
package atomic
 | 
			
		||||
 | 
			
		||||
// atomic.Value panics on nil inputs, or if the underlying type changes.
 | 
			
		||||
// Stabilize by always storing a custom struct that we control.
 | 
			
		||||
 | 
			
		||||
//go:generate bin/gen-atomicwrapper -name=Error -type=error -wrapped=Value -pack=packError -unpack=unpackError -file=error.go
 | 
			
		||||
 | 
			
		||||
type packedError struct{ Value error }
 | 
			
		||||
 | 
			
		||||
func packError(v error) interface{} {
 | 
			
		||||
	return packedError{v}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func unpackError(v interface{}) error {
 | 
			
		||||
	if err, ok := v.(packedError); ok {
 | 
			
		||||
		return err.Value
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										76
									
								
								vendor/go.uber.org/atomic/float64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								vendor/go.uber.org/atomic/float64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,76 @@
 | 
			
		||||
// @generated Code generated by gen-atomicwrapper.
 | 
			
		||||
 | 
			
		||||
// Copyright (c) 2020 Uber Technologies, Inc.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
// of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
// in the Software without restriction, including without limitation the rights
 | 
			
		||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
// copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
// furnished to do so, subject to the following conditions:
 | 
			
		||||
//
 | 
			
		||||
// The above copyright notice and this permission notice shall be included in
 | 
			
		||||
// all copies or substantial portions of the Software.
 | 
			
		||||
//
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
			
		||||
// THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
package atomic
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"math"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Float64 is an atomic type-safe wrapper for float64 values.
 | 
			
		||||
type Float64 struct {
 | 
			
		||||
	_ nocmp // disallow non-atomic comparison
 | 
			
		||||
 | 
			
		||||
	v Uint64
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var _zeroFloat64 float64
 | 
			
		||||
 | 
			
		||||
// NewFloat64 creates a new Float64.
 | 
			
		||||
func NewFloat64(v float64) *Float64 {
 | 
			
		||||
	x := &Float64{}
 | 
			
		||||
	if v != _zeroFloat64 {
 | 
			
		||||
		x.Store(v)
 | 
			
		||||
	}
 | 
			
		||||
	return x
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Load atomically loads the wrapped float64.
 | 
			
		||||
func (x *Float64) Load() float64 {
 | 
			
		||||
	return math.Float64frombits(x.v.Load())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Store atomically stores the passed float64.
 | 
			
		||||
func (x *Float64) Store(v float64) {
 | 
			
		||||
	x.v.Store(math.Float64bits(v))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CAS is an atomic compare-and-swap for float64 values.
 | 
			
		||||
func (x *Float64) CAS(o, n float64) bool {
 | 
			
		||||
	return x.v.CAS(math.Float64bits(o), math.Float64bits(n))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// MarshalJSON encodes the wrapped float64 into JSON.
 | 
			
		||||
func (x *Float64) MarshalJSON() ([]byte, error) {
 | 
			
		||||
	return json.Marshal(x.Load())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UnmarshalJSON decodes a float64 from JSON.
 | 
			
		||||
func (x *Float64) UnmarshalJSON(b []byte) error {
 | 
			
		||||
	var v float64
 | 
			
		||||
	if err := json.Unmarshal(b, &v); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	x.Store(v)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										47
									
								
								vendor/go.uber.org/atomic/float64_ext.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								vendor/go.uber.org/atomic/float64_ext.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,47 @@
 | 
			
		||||
// Copyright (c) 2020 Uber Technologies, Inc.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
// of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
// in the Software without restriction, including without limitation the rights
 | 
			
		||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
// copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
// furnished to do so, subject to the following conditions:
 | 
			
		||||
//
 | 
			
		||||
// The above copyright notice and this permission notice shall be included in
 | 
			
		||||
// all copies or substantial portions of the Software.
 | 
			
		||||
//
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
			
		||||
// THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
package atomic
 | 
			
		||||
 | 
			
		||||
import "strconv"
 | 
			
		||||
 | 
			
		||||
//go:generate bin/gen-atomicwrapper -name=Float64 -type=float64 -wrapped=Uint64 -pack=math.Float64bits -unpack=math.Float64frombits -cas -json -imports math -file=float64.go
 | 
			
		||||
 | 
			
		||||
// Add atomically adds to the wrapped float64 and returns the new value.
 | 
			
		||||
func (f *Float64) Add(s float64) float64 {
 | 
			
		||||
	for {
 | 
			
		||||
		old := f.Load()
 | 
			
		||||
		new := old + s
 | 
			
		||||
		if f.CAS(old, new) {
 | 
			
		||||
			return new
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Sub atomically subtracts from the wrapped float64 and returns the new value.
 | 
			
		||||
func (f *Float64) Sub(s float64) float64 {
 | 
			
		||||
	return f.Add(-s)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// String encodes the wrapped value as a string.
 | 
			
		||||
func (f *Float64) String() string {
 | 
			
		||||
	// 'g' is the behavior for floats with %v.
 | 
			
		||||
	return strconv.FormatFloat(f.Load(), 'g', -1, 64)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										26
									
								
								vendor/go.uber.org/atomic/gen.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								vendor/go.uber.org/atomic/gen.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
			
		||||
// Copyright (c) 2020 Uber Technologies, Inc.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
// of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
// in the Software without restriction, including without limitation the rights
 | 
			
		||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
// copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
// furnished to do so, subject to the following conditions:
 | 
			
		||||
//
 | 
			
		||||
// The above copyright notice and this permission notice shall be included in
 | 
			
		||||
// all copies or substantial portions of the Software.
 | 
			
		||||
//
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
			
		||||
// THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
package atomic
 | 
			
		||||
 | 
			
		||||
//go:generate bin/gen-atomicint -name=Int32 -wrapped=int32 -file=int32.go
 | 
			
		||||
//go:generate bin/gen-atomicint -name=Int64 -wrapped=int64 -file=int64.go
 | 
			
		||||
//go:generate bin/gen-atomicint -name=Uint32 -wrapped=uint32 -unsigned -file=uint32.go
 | 
			
		||||
//go:generate bin/gen-atomicint -name=Uint64 -wrapped=uint64 -unsigned -file=uint64.go
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/go.uber.org/atomic/go.mod
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/go.uber.org/atomic/go.mod
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -3,8 +3,6 @@ module go.uber.org/atomic
 | 
			
		||||
require (
 | 
			
		||||
	github.com/davecgh/go-spew v1.1.1 // indirect
 | 
			
		||||
	github.com/stretchr/testify v1.3.0
 | 
			
		||||
	golang.org/x/lint v0.0.0-20190930215403-16217165b5de
 | 
			
		||||
	golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c // indirect
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
go 1.13
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										13
									
								
								vendor/go.uber.org/atomic/go.sum
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								vendor/go.uber.org/atomic/go.sum
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -7,16 +7,3 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN
 | 
			
		||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 | 
			
		||||
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
 | 
			
		||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 | 
			
		||||
golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs=
 | 
			
		||||
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
 | 
			
		||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 | 
			
		||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
			
		||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
			
		||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190311212946-11955173bddd h1:/e+gpKk9r3dJobndpTytxS2gOy6m5uvpg+ISQoEcusQ=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 | 
			
		||||
golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c h1:IGkKhmfzcztjm6gYkykvu/NiS8kaqbCWAEWWAyf8J5U=
 | 
			
		||||
golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
			
		||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										102
									
								
								vendor/go.uber.org/atomic/int32.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								vendor/go.uber.org/atomic/int32.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,102 @@
 | 
			
		||||
// @generated Code generated by gen-atomicint.
 | 
			
		||||
 | 
			
		||||
// Copyright (c) 2020 Uber Technologies, Inc.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
// of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
// in the Software without restriction, including without limitation the rights
 | 
			
		||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
// copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
// furnished to do so, subject to the following conditions:
 | 
			
		||||
//
 | 
			
		||||
// The above copyright notice and this permission notice shall be included in
 | 
			
		||||
// all copies or substantial portions of the Software.
 | 
			
		||||
//
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
			
		||||
// THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
package atomic
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"sync/atomic"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Int32 is an atomic wrapper around int32.
 | 
			
		||||
type Int32 struct {
 | 
			
		||||
	_ nocmp // disallow non-atomic comparison
 | 
			
		||||
 | 
			
		||||
	v int32
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NewInt32 creates a new Int32.
 | 
			
		||||
func NewInt32(i int32) *Int32 {
 | 
			
		||||
	return &Int32{v: i}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Load atomically loads the wrapped value.
 | 
			
		||||
func (i *Int32) Load() int32 {
 | 
			
		||||
	return atomic.LoadInt32(&i.v)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Add atomically adds to the wrapped int32 and returns the new value.
 | 
			
		||||
func (i *Int32) Add(n int32) int32 {
 | 
			
		||||
	return atomic.AddInt32(&i.v, n)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Sub atomically subtracts from the wrapped int32 and returns the new value.
 | 
			
		||||
func (i *Int32) Sub(n int32) int32 {
 | 
			
		||||
	return atomic.AddInt32(&i.v, -n)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Inc atomically increments the wrapped int32 and returns the new value.
 | 
			
		||||
func (i *Int32) Inc() int32 {
 | 
			
		||||
	return i.Add(1)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Dec atomically decrements the wrapped int32 and returns the new value.
 | 
			
		||||
func (i *Int32) Dec() int32 {
 | 
			
		||||
	return i.Sub(1)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CAS is an atomic compare-and-swap.
 | 
			
		||||
func (i *Int32) CAS(old, new int32) bool {
 | 
			
		||||
	return atomic.CompareAndSwapInt32(&i.v, old, new)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Store atomically stores the passed value.
 | 
			
		||||
func (i *Int32) Store(n int32) {
 | 
			
		||||
	atomic.StoreInt32(&i.v, n)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Swap atomically swaps the wrapped int32 and returns the old value.
 | 
			
		||||
func (i *Int32) Swap(n int32) int32 {
 | 
			
		||||
	return atomic.SwapInt32(&i.v, n)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// MarshalJSON encodes the wrapped int32 into JSON.
 | 
			
		||||
func (i *Int32) MarshalJSON() ([]byte, error) {
 | 
			
		||||
	return json.Marshal(i.Load())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UnmarshalJSON decodes JSON into the wrapped int32.
 | 
			
		||||
func (i *Int32) UnmarshalJSON(b []byte) error {
 | 
			
		||||
	var v int32
 | 
			
		||||
	if err := json.Unmarshal(b, &v); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	i.Store(v)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// String encodes the wrapped value as a string.
 | 
			
		||||
func (i *Int32) String() string {
 | 
			
		||||
	v := i.Load()
 | 
			
		||||
	return strconv.FormatInt(int64(v), 10)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										102
									
								
								vendor/go.uber.org/atomic/int64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								vendor/go.uber.org/atomic/int64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,102 @@
 | 
			
		||||
// @generated Code generated by gen-atomicint.
 | 
			
		||||
 | 
			
		||||
// Copyright (c) 2020 Uber Technologies, Inc.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
// of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
// in the Software without restriction, including without limitation the rights
 | 
			
		||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
// copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
// furnished to do so, subject to the following conditions:
 | 
			
		||||
//
 | 
			
		||||
// The above copyright notice and this permission notice shall be included in
 | 
			
		||||
// all copies or substantial portions of the Software.
 | 
			
		||||
//
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
			
		||||
// THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
package atomic
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"sync/atomic"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Int64 is an atomic wrapper around int64.
 | 
			
		||||
type Int64 struct {
 | 
			
		||||
	_ nocmp // disallow non-atomic comparison
 | 
			
		||||
 | 
			
		||||
	v int64
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NewInt64 creates a new Int64.
 | 
			
		||||
func NewInt64(i int64) *Int64 {
 | 
			
		||||
	return &Int64{v: i}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Load atomically loads the wrapped value.
 | 
			
		||||
func (i *Int64) Load() int64 {
 | 
			
		||||
	return atomic.LoadInt64(&i.v)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Add atomically adds to the wrapped int64 and returns the new value.
 | 
			
		||||
func (i *Int64) Add(n int64) int64 {
 | 
			
		||||
	return atomic.AddInt64(&i.v, n)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Sub atomically subtracts from the wrapped int64 and returns the new value.
 | 
			
		||||
func (i *Int64) Sub(n int64) int64 {
 | 
			
		||||
	return atomic.AddInt64(&i.v, -n)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Inc atomically increments the wrapped int64 and returns the new value.
 | 
			
		||||
func (i *Int64) Inc() int64 {
 | 
			
		||||
	return i.Add(1)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Dec atomically decrements the wrapped int64 and returns the new value.
 | 
			
		||||
func (i *Int64) Dec() int64 {
 | 
			
		||||
	return i.Sub(1)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CAS is an atomic compare-and-swap.
 | 
			
		||||
func (i *Int64) CAS(old, new int64) bool {
 | 
			
		||||
	return atomic.CompareAndSwapInt64(&i.v, old, new)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Store atomically stores the passed value.
 | 
			
		||||
func (i *Int64) Store(n int64) {
 | 
			
		||||
	atomic.StoreInt64(&i.v, n)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Swap atomically swaps the wrapped int64 and returns the old value.
 | 
			
		||||
func (i *Int64) Swap(n int64) int64 {
 | 
			
		||||
	return atomic.SwapInt64(&i.v, n)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// MarshalJSON encodes the wrapped int64 into JSON.
 | 
			
		||||
func (i *Int64) MarshalJSON() ([]byte, error) {
 | 
			
		||||
	return json.Marshal(i.Load())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UnmarshalJSON decodes JSON into the wrapped int64.
 | 
			
		||||
func (i *Int64) UnmarshalJSON(b []byte) error {
 | 
			
		||||
	var v int64
 | 
			
		||||
	if err := json.Unmarshal(b, &v); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	i.Store(v)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// String encodes the wrapped value as a string.
 | 
			
		||||
func (i *Int64) String() string {
 | 
			
		||||
	v := i.Load()
 | 
			
		||||
	return strconv.FormatInt(int64(v), 10)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										35
									
								
								vendor/go.uber.org/atomic/nocmp.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								vendor/go.uber.org/atomic/nocmp.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
// Copyright (c) 2020 Uber Technologies, Inc.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
// of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
// in the Software without restriction, including without limitation the rights
 | 
			
		||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
// copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
// furnished to do so, subject to the following conditions:
 | 
			
		||||
//
 | 
			
		||||
// The above copyright notice and this permission notice shall be included in
 | 
			
		||||
// all copies or substantial portions of the Software.
 | 
			
		||||
//
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
			
		||||
// THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
package atomic
 | 
			
		||||
 | 
			
		||||
// nocmp is an uncomparable struct. Embed this inside another struct to make
 | 
			
		||||
// it uncomparable.
 | 
			
		||||
//
 | 
			
		||||
//  type Foo struct {
 | 
			
		||||
//    nocmp
 | 
			
		||||
//    // ...
 | 
			
		||||
//  }
 | 
			
		||||
//
 | 
			
		||||
// This DOES NOT:
 | 
			
		||||
//
 | 
			
		||||
//  - Disallow shallow copies of structs
 | 
			
		||||
//  - Disallow comparison of pointers to uncomparable structs
 | 
			
		||||
type nocmp [0]func()
 | 
			
		||||
							
								
								
									
										41
									
								
								vendor/go.uber.org/atomic/string.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										41
									
								
								vendor/go.uber.org/atomic/string.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,4 +1,6 @@
 | 
			
		||||
// Copyright (c) 2016 Uber Technologies, Inc.
 | 
			
		||||
// @generated Code generated by gen-atomicwrapper.
 | 
			
		||||
 | 
			
		||||
// Copyright (c) 2020 Uber Technologies, Inc.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
// of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
@@ -20,30 +22,33 @@
 | 
			
		||||
 | 
			
		||||
package atomic
 | 
			
		||||
 | 
			
		||||
// String is an atomic type-safe wrapper around Value for strings.
 | 
			
		||||
type String struct{ v Value }
 | 
			
		||||
// String is an atomic type-safe wrapper for string values.
 | 
			
		||||
type String struct {
 | 
			
		||||
	_ nocmp // disallow non-atomic comparison
 | 
			
		||||
 | 
			
		||||
// NewString creates a String.
 | 
			
		||||
func NewString(str string) *String {
 | 
			
		||||
	s := &String{}
 | 
			
		||||
	if str != "" {
 | 
			
		||||
		s.Store(str)
 | 
			
		||||
	v Value
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var _zeroString string
 | 
			
		||||
 | 
			
		||||
// NewString creates a new String.
 | 
			
		||||
func NewString(v string) *String {
 | 
			
		||||
	x := &String{}
 | 
			
		||||
	if v != _zeroString {
 | 
			
		||||
		x.Store(v)
 | 
			
		||||
	}
 | 
			
		||||
	return s
 | 
			
		||||
	return x
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Load atomically loads the wrapped string.
 | 
			
		||||
func (s *String) Load() string {
 | 
			
		||||
	v := s.v.Load()
 | 
			
		||||
	if v == nil {
 | 
			
		||||
		return ""
 | 
			
		||||
func (x *String) Load() string {
 | 
			
		||||
	if v := x.v.Load(); v != nil {
 | 
			
		||||
		return v.(string)
 | 
			
		||||
	}
 | 
			
		||||
	return v.(string)
 | 
			
		||||
	return _zeroString
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Store atomically stores the passed string.
 | 
			
		||||
// Note: Converting the string to an interface{} to store in the Value
 | 
			
		||||
// requires an allocation.
 | 
			
		||||
func (s *String) Store(str string) {
 | 
			
		||||
	s.v.Store(str)
 | 
			
		||||
func (x *String) Store(v string) {
 | 
			
		||||
	x.v.Store(v)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										43
									
								
								vendor/go.uber.org/atomic/string_ext.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								vendor/go.uber.org/atomic/string_ext.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,43 @@
 | 
			
		||||
// Copyright (c) 2020 Uber Technologies, Inc.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
// of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
// in the Software without restriction, including without limitation the rights
 | 
			
		||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
// copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
// furnished to do so, subject to the following conditions:
 | 
			
		||||
//
 | 
			
		||||
// The above copyright notice and this permission notice shall be included in
 | 
			
		||||
// all copies or substantial portions of the Software.
 | 
			
		||||
//
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
			
		||||
// THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
package atomic
 | 
			
		||||
 | 
			
		||||
//go:generate bin/gen-atomicwrapper -name=String -type=string -wrapped=Value -file=string.go
 | 
			
		||||
 | 
			
		||||
// String returns the wrapped value.
 | 
			
		||||
func (s *String) String() string {
 | 
			
		||||
	return s.Load()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// MarshalText encodes the wrapped string into a textual form.
 | 
			
		||||
//
 | 
			
		||||
// This makes it encodable as JSON, YAML, XML, and more.
 | 
			
		||||
func (s *String) MarshalText() ([]byte, error) {
 | 
			
		||||
	return []byte(s.Load()), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UnmarshalText decodes text and replaces the wrapped string with it.
 | 
			
		||||
//
 | 
			
		||||
// This makes it decodable from JSON, YAML, XML, and more.
 | 
			
		||||
func (s *String) UnmarshalText(b []byte) error {
 | 
			
		||||
	s.Store(string(b))
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										102
									
								
								vendor/go.uber.org/atomic/uint32.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								vendor/go.uber.org/atomic/uint32.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,102 @@
 | 
			
		||||
// @generated Code generated by gen-atomicint.
 | 
			
		||||
 | 
			
		||||
// Copyright (c) 2020 Uber Technologies, Inc.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
// of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
// in the Software without restriction, including without limitation the rights
 | 
			
		||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
// copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
// furnished to do so, subject to the following conditions:
 | 
			
		||||
//
 | 
			
		||||
// The above copyright notice and this permission notice shall be included in
 | 
			
		||||
// all copies or substantial portions of the Software.
 | 
			
		||||
//
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
			
		||||
// THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
package atomic
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"sync/atomic"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Uint32 is an atomic wrapper around uint32.
 | 
			
		||||
type Uint32 struct {
 | 
			
		||||
	_ nocmp // disallow non-atomic comparison
 | 
			
		||||
 | 
			
		||||
	v uint32
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NewUint32 creates a new Uint32.
 | 
			
		||||
func NewUint32(i uint32) *Uint32 {
 | 
			
		||||
	return &Uint32{v: i}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Load atomically loads the wrapped value.
 | 
			
		||||
func (i *Uint32) Load() uint32 {
 | 
			
		||||
	return atomic.LoadUint32(&i.v)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Add atomically adds to the wrapped uint32 and returns the new value.
 | 
			
		||||
func (i *Uint32) Add(n uint32) uint32 {
 | 
			
		||||
	return atomic.AddUint32(&i.v, n)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Sub atomically subtracts from the wrapped uint32 and returns the new value.
 | 
			
		||||
func (i *Uint32) Sub(n uint32) uint32 {
 | 
			
		||||
	return atomic.AddUint32(&i.v, ^(n - 1))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Inc atomically increments the wrapped uint32 and returns the new value.
 | 
			
		||||
func (i *Uint32) Inc() uint32 {
 | 
			
		||||
	return i.Add(1)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Dec atomically decrements the wrapped uint32 and returns the new value.
 | 
			
		||||
func (i *Uint32) Dec() uint32 {
 | 
			
		||||
	return i.Sub(1)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CAS is an atomic compare-and-swap.
 | 
			
		||||
func (i *Uint32) CAS(old, new uint32) bool {
 | 
			
		||||
	return atomic.CompareAndSwapUint32(&i.v, old, new)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Store atomically stores the passed value.
 | 
			
		||||
func (i *Uint32) Store(n uint32) {
 | 
			
		||||
	atomic.StoreUint32(&i.v, n)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Swap atomically swaps the wrapped uint32 and returns the old value.
 | 
			
		||||
func (i *Uint32) Swap(n uint32) uint32 {
 | 
			
		||||
	return atomic.SwapUint32(&i.v, n)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// MarshalJSON encodes the wrapped uint32 into JSON.
 | 
			
		||||
func (i *Uint32) MarshalJSON() ([]byte, error) {
 | 
			
		||||
	return json.Marshal(i.Load())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UnmarshalJSON decodes JSON into the wrapped uint32.
 | 
			
		||||
func (i *Uint32) UnmarshalJSON(b []byte) error {
 | 
			
		||||
	var v uint32
 | 
			
		||||
	if err := json.Unmarshal(b, &v); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	i.Store(v)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// String encodes the wrapped value as a string.
 | 
			
		||||
func (i *Uint32) String() string {
 | 
			
		||||
	v := i.Load()
 | 
			
		||||
	return strconv.FormatUint(uint64(v), 10)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										102
									
								
								vendor/go.uber.org/atomic/uint64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								vendor/go.uber.org/atomic/uint64.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,102 @@
 | 
			
		||||
// @generated Code generated by gen-atomicint.
 | 
			
		||||
 | 
			
		||||
// Copyright (c) 2020 Uber Technologies, Inc.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
// of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
// in the Software without restriction, including without limitation the rights
 | 
			
		||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
// copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
// furnished to do so, subject to the following conditions:
 | 
			
		||||
//
 | 
			
		||||
// The above copyright notice and this permission notice shall be included in
 | 
			
		||||
// all copies or substantial portions of the Software.
 | 
			
		||||
//
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
			
		||||
// THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
package atomic
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"sync/atomic"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Uint64 is an atomic wrapper around uint64.
 | 
			
		||||
type Uint64 struct {
 | 
			
		||||
	_ nocmp // disallow non-atomic comparison
 | 
			
		||||
 | 
			
		||||
	v uint64
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NewUint64 creates a new Uint64.
 | 
			
		||||
func NewUint64(i uint64) *Uint64 {
 | 
			
		||||
	return &Uint64{v: i}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Load atomically loads the wrapped value.
 | 
			
		||||
func (i *Uint64) Load() uint64 {
 | 
			
		||||
	return atomic.LoadUint64(&i.v)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Add atomically adds to the wrapped uint64 and returns the new value.
 | 
			
		||||
func (i *Uint64) Add(n uint64) uint64 {
 | 
			
		||||
	return atomic.AddUint64(&i.v, n)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Sub atomically subtracts from the wrapped uint64 and returns the new value.
 | 
			
		||||
func (i *Uint64) Sub(n uint64) uint64 {
 | 
			
		||||
	return atomic.AddUint64(&i.v, ^(n - 1))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Inc atomically increments the wrapped uint64 and returns the new value.
 | 
			
		||||
func (i *Uint64) Inc() uint64 {
 | 
			
		||||
	return i.Add(1)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Dec atomically decrements the wrapped uint64 and returns the new value.
 | 
			
		||||
func (i *Uint64) Dec() uint64 {
 | 
			
		||||
	return i.Sub(1)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CAS is an atomic compare-and-swap.
 | 
			
		||||
func (i *Uint64) CAS(old, new uint64) bool {
 | 
			
		||||
	return atomic.CompareAndSwapUint64(&i.v, old, new)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Store atomically stores the passed value.
 | 
			
		||||
func (i *Uint64) Store(n uint64) {
 | 
			
		||||
	atomic.StoreUint64(&i.v, n)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Swap atomically swaps the wrapped uint64 and returns the old value.
 | 
			
		||||
func (i *Uint64) Swap(n uint64) uint64 {
 | 
			
		||||
	return atomic.SwapUint64(&i.v, n)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// MarshalJSON encodes the wrapped uint64 into JSON.
 | 
			
		||||
func (i *Uint64) MarshalJSON() ([]byte, error) {
 | 
			
		||||
	return json.Marshal(i.Load())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UnmarshalJSON decodes JSON into the wrapped uint64.
 | 
			
		||||
func (i *Uint64) UnmarshalJSON(b []byte) error {
 | 
			
		||||
	var v uint64
 | 
			
		||||
	if err := json.Unmarshal(b, &v); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	i.Store(v)
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// String encodes the wrapped value as a string.
 | 
			
		||||
func (i *Uint64) String() string {
 | 
			
		||||
	v := i.Load()
 | 
			
		||||
	return strconv.FormatUint(uint64(v), 10)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										31
									
								
								vendor/go.uber.org/atomic/value.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								vendor/go.uber.org/atomic/value.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
// Copyright (c) 2020 Uber Technologies, Inc.
 | 
			
		||||
//
 | 
			
		||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
// of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
// in the Software without restriction, including without limitation the rights
 | 
			
		||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
			
		||||
// copies of the Software, and to permit persons to whom the Software is
 | 
			
		||||
// furnished to do so, subject to the following conditions:
 | 
			
		||||
//
 | 
			
		||||
// The above copyright notice and this permission notice shall be included in
 | 
			
		||||
// all copies or substantial portions of the Software.
 | 
			
		||||
//
 | 
			
		||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
			
		||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | 
			
		||||
// THE SOFTWARE.
 | 
			
		||||
 | 
			
		||||
package atomic
 | 
			
		||||
 | 
			
		||||
import "sync/atomic"
 | 
			
		||||
 | 
			
		||||
// Value shadows the type of the same name from sync/atomic
 | 
			
		||||
// https://godoc.org/sync/atomic#Value
 | 
			
		||||
type Value struct {
 | 
			
		||||
	atomic.Value
 | 
			
		||||
 | 
			
		||||
	_ nocmp // disallow non-atomic comparison
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										10
									
								
								vendor/go.uber.org/multierr/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								vendor/go.uber.org/multierr/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -4,17 +4,11 @@ go_import_path: go.uber.org/multierr
 | 
			
		||||
 | 
			
		||||
env:
 | 
			
		||||
  global:
 | 
			
		||||
    - GO15VENDOREXPERIMENT=1
 | 
			
		||||
    - GO111MODULE=on
 | 
			
		||||
 | 
			
		||||
go:
 | 
			
		||||
  - 1.11.x
 | 
			
		||||
  - 1.12.x
 | 
			
		||||
  - 1.13.x
 | 
			
		||||
 | 
			
		||||
cache:
 | 
			
		||||
  directories:
 | 
			
		||||
    - vendor
 | 
			
		||||
  - oldstable
 | 
			
		||||
  - stable
 | 
			
		||||
 | 
			
		||||
before_install:
 | 
			
		||||
- go version
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								vendor/go.uber.org/multierr/CHANGELOG.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/go.uber.org/multierr/CHANGELOG.md
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,6 +1,12 @@
 | 
			
		||||
Releases
 | 
			
		||||
========
 | 
			
		||||
 | 
			
		||||
v1.6.0 (2020-09-14)
 | 
			
		||||
===================
 | 
			
		||||
 | 
			
		||||
-   Actually drop library dependency on development-time tooling.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
v1.5.0 (2020-02-24)
 | 
			
		||||
===================
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								vendor/go.uber.org/multierr/Makefile
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/go.uber.org/multierr/Makefile
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -21,12 +21,12 @@ gofmt:
 | 
			
		||||
 | 
			
		||||
.PHONY: golint
 | 
			
		||||
golint:
 | 
			
		||||
	@go install golang.org/x/lint/golint
 | 
			
		||||
	@cd tools && go install golang.org/x/lint/golint
 | 
			
		||||
	@$(GOBIN)/golint ./...
 | 
			
		||||
 | 
			
		||||
.PHONY: staticcheck
 | 
			
		||||
staticcheck:
 | 
			
		||||
	@go install honnef.co/go/tools/cmd/staticcheck
 | 
			
		||||
	@cd tools && go install honnef.co/go/tools/cmd/staticcheck
 | 
			
		||||
	@$(GOBIN)/staticcheck ./...
 | 
			
		||||
 | 
			
		||||
.PHONY: lint
 | 
			
		||||
@@ -38,5 +38,5 @@ cover:
 | 
			
		||||
	go tool cover -html=cover.out -o cover.html
 | 
			
		||||
 | 
			
		||||
update-license:
 | 
			
		||||
	@go install go.uber.org/tools/update-license
 | 
			
		||||
	@cd tools && go install go.uber.org/tools/update-license
 | 
			
		||||
	@$(GOBIN)/update-license $(GO_FILES)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/go.uber.org/multierr/error.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/go.uber.org/multierr/error.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -54,7 +54,7 @@
 | 
			
		||||
//
 | 
			
		||||
// 	errors := multierr.Errors(err)
 | 
			
		||||
// 	if len(errors) > 0 {
 | 
			
		||||
// 		fmt.Println("The following errors occurred:")
 | 
			
		||||
// 		fmt.Println("The following errors occurred:", errors)
 | 
			
		||||
// 	}
 | 
			
		||||
//
 | 
			
		||||
// Advanced Usage
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								vendor/go.uber.org/multierr/go.mod
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/go.uber.org/multierr/go.mod
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -4,9 +4,5 @@ go 1.12
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
	github.com/stretchr/testify v1.3.0
 | 
			
		||||
	go.uber.org/atomic v1.6.0
 | 
			
		||||
	go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee
 | 
			
		||||
	golang.org/x/lint v0.0.0-20190930215403-16217165b5de
 | 
			
		||||
	golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5 // indirect
 | 
			
		||||
	honnef.co/go/tools v0.0.1-2019.2.3
 | 
			
		||||
	go.uber.org/atomic v1.7.0
 | 
			
		||||
)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										38
									
								
								vendor/go.uber.org/multierr/go.sum
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										38
									
								
								vendor/go.uber.org/multierr/go.sum
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,45 +1,11 @@
 | 
			
		||||
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
 | 
			
		||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 | 
			
		||||
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
 | 
			
		||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 | 
			
		||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 | 
			
		||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 | 
			
		||||
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
 | 
			
		||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
 | 
			
		||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
 | 
			
		||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 | 
			
		||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 | 
			
		||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 | 
			
		||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 | 
			
		||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
 | 
			
		||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 | 
			
		||||
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
 | 
			
		||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
 | 
			
		||||
go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk=
 | 
			
		||||
go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
 | 
			
		||||
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4=
 | 
			
		||||
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 | 
			
		||||
golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs=
 | 
			
		||||
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
 | 
			
		||||
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
 | 
			
		||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 | 
			
		||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 | 
			
		||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI=
 | 
			
		||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 | 
			
		||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 | 
			
		||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
			
		||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 | 
			
		||||
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
 | 
			
		||||
golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c h1:IGkKhmfzcztjm6gYkykvu/NiS8kaqbCWAEWWAyf8J5U=
 | 
			
		||||
golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
			
		||||
golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5 h1:hKsoRgsbwY1NafxrwTs+k64bikrLBkAgPir1TNCj3Zs=
 | 
			
		||||
golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 | 
			
		||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 | 
			
		||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 | 
			
		||||
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
 | 
			
		||||
honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM=
 | 
			
		||||
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
 | 
			
		||||
go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw=
 | 
			
		||||
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										35
									
								
								vendor/go.uber.org/zap/CHANGELOG.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										35
									
								
								vendor/go.uber.org/zap/CHANGELOG.md
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,16 +1,37 @@
 | 
			
		||||
# Changelog
 | 
			
		||||
 | 
			
		||||
## 1.16.0 (1 Sep 2020)
 | 
			
		||||
 | 
			
		||||
Bugfixes:
 | 
			
		||||
* [#828][]: Fix missing newline in IncreaseLevel error messages.
 | 
			
		||||
* [#835][]: Fix panic in JSON encoder when encoding times or durations
 | 
			
		||||
  without specifying a time or duration encoder.
 | 
			
		||||
* [#843][]: Honor CallerSkip when taking stack traces.
 | 
			
		||||
* [#862][]: Fix the default file permissions to use `0666` and rely on the umask instead.
 | 
			
		||||
* [#854][]: Encode `<nil>` for nil `Stringer` instead of a panic error log.
 | 
			
		||||
 | 
			
		||||
Enhancements:
 | 
			
		||||
* [#629][]: Added `zapcore.TimeEncoderOfLayout` to easily create time encoders
 | 
			
		||||
  for custom layouts.
 | 
			
		||||
* [#697][]: Added support for a configurable delimiter in the console encoder.
 | 
			
		||||
* [#852][]: Optimize console encoder by pooling the underlying JSON encoder.
 | 
			
		||||
* [#844][]: Add ability to include the calling function as part of logs.
 | 
			
		||||
* [#843][]: Add `StackSkip` for including truncated stacks as a field.
 | 
			
		||||
* [#861][]: Add options to customize Fatal behaviour for better testability.
 | 
			
		||||
 | 
			
		||||
Thanks to @SteelPhase, @tmshn, @lixingwang, @wyxloading, @moul, @segevfiner, @andy-retailnext and @jcorbin for their contributions to this release.
 | 
			
		||||
 | 
			
		||||
## 1.15.0 (23 Apr 2020)
 | 
			
		||||
 | 
			
		||||
Bugfixes:
 | 
			
		||||
* [#804][]: Fix handling of `Time` values out of `UnixNano` range.
 | 
			
		||||
* [#812][]: Fix `IncreaseLevel` being reset after a call to `With`.  
 | 
			
		||||
* [#812][]: Fix `IncreaseLevel` being reset after a call to `With`.
 | 
			
		||||
 | 
			
		||||
Enhancements:
 | 
			
		||||
* [#806][]: Add `WithCaller` option to supersede the `AddCaller` option. This
 | 
			
		||||
  allows disabling annotation of log entries with caller information if
 | 
			
		||||
  previously enabled with `AddCaller`.
 | 
			
		||||
* [#813][]: Deprecate `NewSampler` constructor in favor of 
 | 
			
		||||
* [#813][]: Deprecate `NewSampler` constructor in favor of
 | 
			
		||||
  `NewSamplerWithOptions` which supports a `SamplerHook` option. This option
 | 
			
		||||
   adds support for monitoring sampling decisions through a hook.
 | 
			
		||||
 | 
			
		||||
@@ -399,3 +420,13 @@ upgrade to the upcoming stable release.
 | 
			
		||||
[#812]: https://github.com/uber-go/zap/pull/812
 | 
			
		||||
[#806]: https://github.com/uber-go/zap/pull/806
 | 
			
		||||
[#813]: https://github.com/uber-go/zap/pull/813
 | 
			
		||||
[#629]: https://github.com/uber-go/zap/pull/629
 | 
			
		||||
[#697]: https://github.com/uber-go/zap/pull/697
 | 
			
		||||
[#828]: https://github.com/uber-go/zap/pull/828
 | 
			
		||||
[#835]: https://github.com/uber-go/zap/pull/835
 | 
			
		||||
[#843]: https://github.com/uber-go/zap/pull/843
 | 
			
		||||
[#844]: https://github.com/uber-go/zap/pull/844
 | 
			
		||||
[#852]: https://github.com/uber-go/zap/pull/852
 | 
			
		||||
[#854]: https://github.com/uber-go/zap/pull/854
 | 
			
		||||
[#861]: https://github.com/uber-go/zap/pull/861
 | 
			
		||||
[#862]: https://github.com/uber-go/zap/pull/862
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								vendor/go.uber.org/zap/FAQ.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/go.uber.org/zap/FAQ.md
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -149,6 +149,7 @@ We're aware of the following extensions, but haven't used them ourselves:
 | 
			
		||||
| `github.com/tchap/zapext` | Sentry, syslog |
 | 
			
		||||
| `github.com/fgrosse/zaptest` | Ginkgo |
 | 
			
		||||
| `github.com/blendle/zapdriver` | Stackdriver |
 | 
			
		||||
| `github.com/moul/zapgorm` | Gorm |
 | 
			
		||||
 | 
			
		||||
[go-proverbs]: https://go-proverbs.github.io/
 | 
			
		||||
[import-path]: https://golang.org/cmd/go/#hdr-Remote_import_paths
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/go.uber.org/zap/config.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/go.uber.org/zap/config.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -101,6 +101,7 @@ func NewProductionEncoderConfig() zapcore.EncoderConfig {
 | 
			
		||||
		LevelKey:       "level",
 | 
			
		||||
		NameKey:        "logger",
 | 
			
		||||
		CallerKey:      "caller",
 | 
			
		||||
		FunctionKey:    zapcore.OmitKey,
 | 
			
		||||
		MessageKey:     "msg",
 | 
			
		||||
		StacktraceKey:  "stacktrace",
 | 
			
		||||
		LineEnding:     zapcore.DefaultLineEnding,
 | 
			
		||||
@@ -140,6 +141,7 @@ func NewDevelopmentEncoderConfig() zapcore.EncoderConfig {
 | 
			
		||||
		LevelKey:       "L",
 | 
			
		||||
		NameKey:        "N",
 | 
			
		||||
		CallerKey:      "C",
 | 
			
		||||
		FunctionKey:    zapcore.OmitKey,
 | 
			
		||||
		MessageKey:     "M",
 | 
			
		||||
		StacktraceKey:  "S",
 | 
			
		||||
		LineEnding:     zapcore.DefaultLineEnding,
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								vendor/go.uber.org/zap/field.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								vendor/go.uber.org/zap/field.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -364,11 +364,17 @@ func Timep(key string, val *time.Time) Field {
 | 
			
		||||
// expensive (relatively speaking); this function both makes an allocation and
 | 
			
		||||
// takes about two microseconds.
 | 
			
		||||
func Stack(key string) Field {
 | 
			
		||||
	return StackSkip(key, 1) // skip Stack
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// StackSkip constructs a field similarly to Stack, but also skips the given
 | 
			
		||||
// number of frames from the top of the stacktrace.
 | 
			
		||||
func StackSkip(key string, skip int) Field {
 | 
			
		||||
	// Returning the stacktrace as a string costs an allocation, but saves us
 | 
			
		||||
	// from expanding the zapcore.Field union struct to include a byte slice. Since
 | 
			
		||||
	// taking a stacktrace is already so expensive (~10us), the extra allocation
 | 
			
		||||
	// is okay.
 | 
			
		||||
	return String(key, takeStacktrace())
 | 
			
		||||
	return String(key, takeStacktrace(skip+1)) // skip StackSkip
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Duration constructs a field with the given key and value. The encoder
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								vendor/go.uber.org/zap/go.mod
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/go.uber.org/zap/go.mod
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -8,5 +8,6 @@ require (
 | 
			
		||||
	go.uber.org/atomic v1.6.0
 | 
			
		||||
	go.uber.org/multierr v1.5.0
 | 
			
		||||
	golang.org/x/lint v0.0.0-20190930215403-16217165b5de
 | 
			
		||||
	gopkg.in/yaml.v2 v2.2.2
 | 
			
		||||
	honnef.co/go/tools v0.0.1-2019.2.3
 | 
			
		||||
)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										41
									
								
								vendor/go.uber.org/zap/logger.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										41
									
								
								vendor/go.uber.org/zap/logger.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -49,6 +49,7 @@ type Logger struct {
 | 
			
		||||
	addStack  zapcore.LevelEnabler
 | 
			
		||||
 | 
			
		||||
	callerSkip int
 | 
			
		||||
	onFatal    zapcore.CheckWriteAction // default is WriteThenFatal
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// New constructs a new Logger from the provided zapcore.Core and Options. If
 | 
			
		||||
@@ -280,7 +281,13 @@ func (log *Logger) check(lvl zapcore.Level, msg string) *zapcore.CheckedEntry {
 | 
			
		||||
	case zapcore.PanicLevel:
 | 
			
		||||
		ce = ce.Should(ent, zapcore.WriteThenPanic)
 | 
			
		||||
	case zapcore.FatalLevel:
 | 
			
		||||
		ce = ce.Should(ent, zapcore.WriteThenFatal)
 | 
			
		||||
		onFatal := log.onFatal
 | 
			
		||||
		// Noop is the default value for CheckWriteAction, and it leads to
 | 
			
		||||
		// continued execution after a Fatal which is unexpected.
 | 
			
		||||
		if onFatal == zapcore.WriteThenNoop {
 | 
			
		||||
			onFatal = zapcore.WriteThenFatal
 | 
			
		||||
		}
 | 
			
		||||
		ce = ce.Should(ent, onFatal)
 | 
			
		||||
	case zapcore.DPanicLevel:
 | 
			
		||||
		if log.development {
 | 
			
		||||
			ce = ce.Should(ent, zapcore.WriteThenPanic)
 | 
			
		||||
@@ -297,15 +304,41 @@ func (log *Logger) check(lvl zapcore.Level, msg string) *zapcore.CheckedEntry {
 | 
			
		||||
	// Thread the error output through to the CheckedEntry.
 | 
			
		||||
	ce.ErrorOutput = log.errorOutput
 | 
			
		||||
	if log.addCaller {
 | 
			
		||||
		ce.Entry.Caller = zapcore.NewEntryCaller(runtime.Caller(log.callerSkip + callerSkipOffset))
 | 
			
		||||
		if !ce.Entry.Caller.Defined {
 | 
			
		||||
		frame, defined := getCallerFrame(log.callerSkip + callerSkipOffset)
 | 
			
		||||
		if !defined {
 | 
			
		||||
			fmt.Fprintf(log.errorOutput, "%v Logger.check error: failed to get caller\n", time.Now().UTC())
 | 
			
		||||
			log.errorOutput.Sync()
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		ce.Entry.Caller = zapcore.EntryCaller{
 | 
			
		||||
			Defined:  defined,
 | 
			
		||||
			PC:       frame.PC,
 | 
			
		||||
			File:     frame.File,
 | 
			
		||||
			Line:     frame.Line,
 | 
			
		||||
			Function: frame.Function,
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if log.addStack.Enabled(ce.Entry.Level) {
 | 
			
		||||
		ce.Entry.Stack = Stack("").String
 | 
			
		||||
		ce.Entry.Stack = StackSkip("", log.callerSkip+callerSkipOffset).String
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return ce
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// getCallerFrame gets caller frame. The argument skip is the number of stack
 | 
			
		||||
// frames to ascend, with 0 identifying the caller of getCallerFrame. The
 | 
			
		||||
// boolean ok is false if it was not possible to recover the information.
 | 
			
		||||
//
 | 
			
		||||
// Note: This implementation is similar to runtime.Caller, but it returns the whole frame.
 | 
			
		||||
func getCallerFrame(skip int) (frame runtime.Frame, ok bool) {
 | 
			
		||||
	const skipOffset = 2 // skip getCallerFrame and Callers
 | 
			
		||||
 | 
			
		||||
	pc := make([]uintptr, 1)
 | 
			
		||||
	numFrames := runtime.Callers(skip+skipOffset, pc[:])
 | 
			
		||||
	if numFrames < 1 {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	frame, _ = runtime.CallersFrames(pc).Next()
 | 
			
		||||
	return frame, frame.PC != 0
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										19
									
								
								vendor/go.uber.org/zap/options.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										19
									
								
								vendor/go.uber.org/zap/options.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -86,15 +86,15 @@ func Development() Option {
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// AddCaller configures the Logger to annotate each message with the filename
 | 
			
		||||
// and line number of zap's caller.  See also WithCaller.
 | 
			
		||||
// AddCaller configures the Logger to annotate each message with the filename,
 | 
			
		||||
// line number, and function name of zap's caller. See also WithCaller.
 | 
			
		||||
func AddCaller() Option {
 | 
			
		||||
	return WithCaller(true)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// WithCaller configures the Logger to annotate each message with the filename
 | 
			
		||||
// and line number of zap's caller, or not, depending on the value of enabled.
 | 
			
		||||
// This is a generalized form of AddCaller.
 | 
			
		||||
// WithCaller configures the Logger to annotate each message with the filename,
 | 
			
		||||
// line number, and function name of zap's caller, or not, depending on the
 | 
			
		||||
// value of enabled. This is a generalized form of AddCaller.
 | 
			
		||||
func WithCaller(enabled bool) Option {
 | 
			
		||||
	return optionFunc(func(log *Logger) {
 | 
			
		||||
		log.addCaller = enabled
 | 
			
		||||
@@ -125,9 +125,16 @@ func IncreaseLevel(lvl zapcore.LevelEnabler) Option {
 | 
			
		||||
	return optionFunc(func(log *Logger) {
 | 
			
		||||
		core, err := zapcore.NewIncreaseLevelCore(log.core, lvl)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			fmt.Fprintf(log.errorOutput, "failed to IncreaseLevel: %v", err)
 | 
			
		||||
			fmt.Fprintf(log.errorOutput, "failed to IncreaseLevel: %v\n", err)
 | 
			
		||||
		} else {
 | 
			
		||||
			log.core = core
 | 
			
		||||
		}
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// OnFatal sets the action to take on fatal logs.
 | 
			
		||||
func OnFatal(action zapcore.CheckWriteAction) Option {
 | 
			
		||||
	return optionFunc(func(log *Logger) {
 | 
			
		||||
		log.onFatal = action
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/go.uber.org/zap/sink.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/go.uber.org/zap/sink.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -136,7 +136,7 @@ func newFileSink(u *url.URL) (Sink, error) {
 | 
			
		||||
	case "stderr":
 | 
			
		||||
		return nopCloserSink{os.Stderr}, nil
 | 
			
		||||
	}
 | 
			
		||||
	return os.OpenFile(u.Path, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0644)
 | 
			
		||||
	return os.OpenFile(u.Path, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0666)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func normalizeScheme(s string) (string, error) {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										47
									
								
								vendor/go.uber.org/zap/stacktrace.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										47
									
								
								vendor/go.uber.org/zap/stacktrace.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -22,28 +22,20 @@ package zap
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"runtime"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"sync"
 | 
			
		||||
 | 
			
		||||
	"go.uber.org/zap/internal/bufferpool"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const _zapPackage = "go.uber.org/zap"
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	_stacktracePool = sync.Pool{
 | 
			
		||||
		New: func() interface{} {
 | 
			
		||||
			return newProgramCounters(64)
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// We add "." and "/" suffixes to the package name to ensure we only match
 | 
			
		||||
	// the exact package and not any package with the same prefix.
 | 
			
		||||
	_zapStacktracePrefixes       = addPrefix(_zapPackage, ".", "/")
 | 
			
		||||
	_zapStacktraceVendorContains = addPrefix("/vendor/", _zapStacktracePrefixes...)
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func takeStacktrace() string {
 | 
			
		||||
func takeStacktrace(skip int) string {
 | 
			
		||||
	buffer := bufferpool.Get()
 | 
			
		||||
	defer buffer.Free()
 | 
			
		||||
	programCounters := _stacktracePool.Get().(*programCounters)
 | 
			
		||||
@@ -51,9 +43,9 @@ func takeStacktrace() string {
 | 
			
		||||
 | 
			
		||||
	var numFrames int
 | 
			
		||||
	for {
 | 
			
		||||
		// Skip the call to runtime.Counters and takeStacktrace so that the
 | 
			
		||||
		// Skip the call to runtime.Callers and takeStacktrace so that the
 | 
			
		||||
		// program counters start at the caller of takeStacktrace.
 | 
			
		||||
		numFrames = runtime.Callers(2, programCounters.pcs)
 | 
			
		||||
		numFrames = runtime.Callers(skip+2, programCounters.pcs)
 | 
			
		||||
		if numFrames < len(programCounters.pcs) {
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
@@ -63,19 +55,12 @@ func takeStacktrace() string {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	i := 0
 | 
			
		||||
	skipZapFrames := true // skip all consecutive zap frames at the beginning.
 | 
			
		||||
	frames := runtime.CallersFrames(programCounters.pcs[:numFrames])
 | 
			
		||||
 | 
			
		||||
	// Note: On the last iteration, frames.Next() returns false, with a valid
 | 
			
		||||
	// frame, but we ignore this frame. The last frame is a a runtime frame which
 | 
			
		||||
	// adds noise, since it's only either runtime.main or runtime.goexit.
 | 
			
		||||
	for frame, more := frames.Next(); more; frame, more = frames.Next() {
 | 
			
		||||
		if skipZapFrames && isZapFrame(frame.Function) {
 | 
			
		||||
			continue
 | 
			
		||||
		} else {
 | 
			
		||||
			skipZapFrames = false
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if i != 0 {
 | 
			
		||||
			buffer.AppendByte('\n')
 | 
			
		||||
		}
 | 
			
		||||
@@ -91,24 +76,6 @@ func takeStacktrace() string {
 | 
			
		||||
	return buffer.String()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func isZapFrame(function string) bool {
 | 
			
		||||
	for _, prefix := range _zapStacktracePrefixes {
 | 
			
		||||
		if strings.HasPrefix(function, prefix) {
 | 
			
		||||
			return true
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// We can't use a prefix match here since the location of the vendor
 | 
			
		||||
	// directory affects the prefix. Instead we do a contains match.
 | 
			
		||||
	for _, contains := range _zapStacktraceVendorContains {
 | 
			
		||||
		if strings.Contains(function, contains) {
 | 
			
		||||
			return true
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type programCounters struct {
 | 
			
		||||
	pcs []uintptr
 | 
			
		||||
}
 | 
			
		||||
@@ -116,11 +83,3 @@ type programCounters struct {
 | 
			
		||||
func newProgramCounters(size int) *programCounters {
 | 
			
		||||
	return &programCounters{make([]uintptr, size)}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func addPrefix(prefix string, ss ...string) []string {
 | 
			
		||||
	withPrefix := make([]string, len(ss))
 | 
			
		||||
	for i, s := range ss {
 | 
			
		||||
		withPrefix[i] = prefix + s
 | 
			
		||||
	}
 | 
			
		||||
	return withPrefix
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										30
									
								
								vendor/go.uber.org/zap/zapcore/console_encoder.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										30
									
								
								vendor/go.uber.org/zap/zapcore/console_encoder.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -56,6 +56,10 @@ type consoleEncoder struct {
 | 
			
		||||
// encoder configuration, it will omit any element whose key is set to the empty
 | 
			
		||||
// string.
 | 
			
		||||
func NewConsoleEncoder(cfg EncoderConfig) Encoder {
 | 
			
		||||
	if len(cfg.ConsoleSeparator) == 0 {
 | 
			
		||||
		// Use a default delimiter of '\t' for backwards compatibility
 | 
			
		||||
		cfg.ConsoleSeparator = "\t"
 | 
			
		||||
	}
 | 
			
		||||
	return consoleEncoder{newJSONEncoder(cfg, true)}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -89,12 +93,17 @@ func (c consoleEncoder) EncodeEntry(ent Entry, fields []Field) (*buffer.Buffer,
 | 
			
		||||
 | 
			
		||||
		nameEncoder(ent.LoggerName, arr)
 | 
			
		||||
	}
 | 
			
		||||
	if ent.Caller.Defined && c.CallerKey != "" && c.EncodeCaller != nil {
 | 
			
		||||
		c.EncodeCaller(ent.Caller, arr)
 | 
			
		||||
	if ent.Caller.Defined {
 | 
			
		||||
		if c.CallerKey != "" && c.EncodeCaller != nil {
 | 
			
		||||
			c.EncodeCaller(ent.Caller, arr)
 | 
			
		||||
		}
 | 
			
		||||
		if c.FunctionKey != "" {
 | 
			
		||||
			arr.AppendString(ent.Caller.Function)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	for i := range arr.elems {
 | 
			
		||||
		if i > 0 {
 | 
			
		||||
			line.AppendByte('\t')
 | 
			
		||||
			line.AppendString(c.ConsoleSeparator)
 | 
			
		||||
		}
 | 
			
		||||
		fmt.Fprint(line, arr.elems[i])
 | 
			
		||||
	}
 | 
			
		||||
@@ -102,7 +111,7 @@ func (c consoleEncoder) EncodeEntry(ent Entry, fields []Field) (*buffer.Buffer,
 | 
			
		||||
 | 
			
		||||
	// Add the message itself.
 | 
			
		||||
	if c.MessageKey != "" {
 | 
			
		||||
		c.addTabIfNecessary(line)
 | 
			
		||||
		c.addSeparatorIfNecessary(line)
 | 
			
		||||
		line.AppendString(ent.Message)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -126,7 +135,12 @@ func (c consoleEncoder) EncodeEntry(ent Entry, fields []Field) (*buffer.Buffer,
 | 
			
		||||
 | 
			
		||||
func (c consoleEncoder) writeContext(line *buffer.Buffer, extra []Field) {
 | 
			
		||||
	context := c.jsonEncoder.Clone().(*jsonEncoder)
 | 
			
		||||
	defer context.buf.Free()
 | 
			
		||||
	defer func() {
 | 
			
		||||
		// putJSONEncoder assumes the buffer is still used, but we write out the buffer so
 | 
			
		||||
		// we can free it.
 | 
			
		||||
		context.buf.Free()
 | 
			
		||||
		putJSONEncoder(context)
 | 
			
		||||
	}()
 | 
			
		||||
 | 
			
		||||
	addFields(context, extra)
 | 
			
		||||
	context.closeOpenNamespaces()
 | 
			
		||||
@@ -134,14 +148,14 @@ func (c consoleEncoder) writeContext(line *buffer.Buffer, extra []Field) {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	c.addTabIfNecessary(line)
 | 
			
		||||
	c.addSeparatorIfNecessary(line)
 | 
			
		||||
	line.AppendByte('{')
 | 
			
		||||
	line.Write(context.buf.Bytes())
 | 
			
		||||
	line.AppendByte('}')
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c consoleEncoder) addTabIfNecessary(line *buffer.Buffer) {
 | 
			
		||||
func (c consoleEncoder) addSeparatorIfNecessary(line *buffer.Buffer) {
 | 
			
		||||
	if line.Len() > 0 {
 | 
			
		||||
		line.AppendByte('\t')
 | 
			
		||||
		line.AppendString(c.ConsoleSeparator)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										42
									
								
								vendor/go.uber.org/zap/zapcore/encoder.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										42
									
								
								vendor/go.uber.org/zap/zapcore/encoder.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -21,6 +21,7 @@
 | 
			
		||||
package zapcore
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"go.uber.org/zap/buffer"
 | 
			
		||||
@@ -151,6 +152,14 @@ func RFC3339NanoTimeEncoder(t time.Time, enc PrimitiveArrayEncoder) {
 | 
			
		||||
	encodeTimeLayout(t, time.RFC3339Nano, enc)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// TimeEncoderOfLayout returns TimeEncoder which serializes a time.Time using
 | 
			
		||||
// given layout.
 | 
			
		||||
func TimeEncoderOfLayout(layout string) TimeEncoder {
 | 
			
		||||
	return func(t time.Time, enc PrimitiveArrayEncoder) {
 | 
			
		||||
		encodeTimeLayout(t, layout, enc)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UnmarshalText unmarshals text to a TimeEncoder.
 | 
			
		||||
// "rfc3339nano" and "RFC3339Nano" are unmarshaled to RFC3339NanoTimeEncoder.
 | 
			
		||||
// "rfc3339" and "RFC3339" are unmarshaled to RFC3339TimeEncoder.
 | 
			
		||||
@@ -176,6 +185,35 @@ func (e *TimeEncoder) UnmarshalText(text []byte) error {
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UnmarshalYAML unmarshals YAML to a TimeEncoder.
 | 
			
		||||
// If value is an object with a "layout" field, it will be unmarshaled to  TimeEncoder with given layout.
 | 
			
		||||
//     timeEncoder:
 | 
			
		||||
//       layout: 06/01/02 03:04pm
 | 
			
		||||
// If value is string, it uses UnmarshalText.
 | 
			
		||||
//     timeEncoder: iso8601
 | 
			
		||||
func (e *TimeEncoder) UnmarshalYAML(unmarshal func(interface{}) error) error {
 | 
			
		||||
	var o struct {
 | 
			
		||||
		Layout string `json:"layout" yaml:"layout"`
 | 
			
		||||
	}
 | 
			
		||||
	if err := unmarshal(&o); err == nil {
 | 
			
		||||
		*e = TimeEncoderOfLayout(o.Layout)
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var s string
 | 
			
		||||
	if err := unmarshal(&s); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	return e.UnmarshalText([]byte(s))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UnmarshalJSON unmarshals JSON to a TimeEncoder as same way UnmarshalYAML does.
 | 
			
		||||
func (e *TimeEncoder) UnmarshalJSON(data []byte) error {
 | 
			
		||||
	return e.UnmarshalYAML(func(v interface{}) error {
 | 
			
		||||
		return json.Unmarshal(data, v)
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// A DurationEncoder serializes a time.Duration to a primitive type.
 | 
			
		||||
type DurationEncoder func(time.Duration, PrimitiveArrayEncoder)
 | 
			
		||||
 | 
			
		||||
@@ -279,6 +317,7 @@ type EncoderConfig struct {
 | 
			
		||||
	TimeKey       string `json:"timeKey" yaml:"timeKey"`
 | 
			
		||||
	NameKey       string `json:"nameKey" yaml:"nameKey"`
 | 
			
		||||
	CallerKey     string `json:"callerKey" yaml:"callerKey"`
 | 
			
		||||
	FunctionKey   string `json:"functionKey" yaml:"functionKey"`
 | 
			
		||||
	StacktraceKey string `json:"stacktraceKey" yaml:"stacktraceKey"`
 | 
			
		||||
	LineEnding    string `json:"lineEnding" yaml:"lineEnding"`
 | 
			
		||||
	// Configure the primitive representations of common complex types. For
 | 
			
		||||
@@ -291,6 +330,9 @@ type EncoderConfig struct {
 | 
			
		||||
	// Unlike the other primitive type encoders, EncodeName is optional. The
 | 
			
		||||
	// zero value falls back to FullNameEncoder.
 | 
			
		||||
	EncodeName NameEncoder `json:"nameEncoder" yaml:"nameEncoder"`
 | 
			
		||||
	// Configures the field separator used by the console encoder. Defaults
 | 
			
		||||
	// to tab.
 | 
			
		||||
	ConsoleSeparator string `json:"consoleSeparator" yaml:"consoleSeparator"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ObjectEncoder is a strongly-typed, encoding-agnostic interface for adding a
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										14
									
								
								vendor/go.uber.org/zap/zapcore/entry.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								vendor/go.uber.org/zap/zapcore/entry.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -22,6 +22,7 @@ package zapcore
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"runtime"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"sync"
 | 
			
		||||
	"time"
 | 
			
		||||
@@ -70,10 +71,11 @@ func NewEntryCaller(pc uintptr, file string, line int, ok bool) EntryCaller {
 | 
			
		||||
 | 
			
		||||
// EntryCaller represents the caller of a logging function.
 | 
			
		||||
type EntryCaller struct {
 | 
			
		||||
	Defined bool
 | 
			
		||||
	PC      uintptr
 | 
			
		||||
	File    string
 | 
			
		||||
	Line    int
 | 
			
		||||
	Defined  bool
 | 
			
		||||
	PC       uintptr
 | 
			
		||||
	File     string
 | 
			
		||||
	Line     int
 | 
			
		||||
	Function string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// String returns the full path and line number of the caller.
 | 
			
		||||
@@ -158,6 +160,8 @@ const (
 | 
			
		||||
	// WriteThenNoop indicates that nothing special needs to be done. It's the
 | 
			
		||||
	// default behavior.
 | 
			
		||||
	WriteThenNoop CheckWriteAction = iota
 | 
			
		||||
	// WriteThenGoexit runs runtime.Goexit after Write.
 | 
			
		||||
	WriteThenGoexit
 | 
			
		||||
	// WriteThenPanic causes a panic after Write.
 | 
			
		||||
	WriteThenPanic
 | 
			
		||||
	// WriteThenFatal causes a fatal os.Exit after Write.
 | 
			
		||||
@@ -230,6 +234,8 @@ func (ce *CheckedEntry) Write(fields ...Field) {
 | 
			
		||||
		panic(msg)
 | 
			
		||||
	case WriteThenFatal:
 | 
			
		||||
		exit.Exit()
 | 
			
		||||
	case WriteThenGoexit:
 | 
			
		||||
		runtime.Goexit()
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										18
									
								
								vendor/go.uber.org/zap/zapcore/field.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								vendor/go.uber.org/zap/zapcore/field.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -205,13 +205,23 @@ func addFields(enc ObjectEncoder, fields []Field) {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func encodeStringer(key string, stringer interface{}, enc ObjectEncoder) (err error) {
 | 
			
		||||
func encodeStringer(key string, stringer interface{}, enc ObjectEncoder) (retErr error) {
 | 
			
		||||
	// Try to capture panics (from nil references or otherwise) when calling
 | 
			
		||||
	// the String() method, similar to https://golang.org/src/fmt/print.go#L540
 | 
			
		||||
	defer func() {
 | 
			
		||||
		if v := recover(); v != nil {
 | 
			
		||||
			err = fmt.Errorf("PANIC=%v", v)
 | 
			
		||||
		if err := recover(); err != nil {
 | 
			
		||||
			// If it's a nil pointer, just say "<nil>". The likeliest causes are a
 | 
			
		||||
			// Stringer that fails to guard against nil or a nil pointer for a
 | 
			
		||||
			// value receiver, and in either case, "<nil>" is a nice result.
 | 
			
		||||
			if v := reflect.ValueOf(stringer); v.Kind() == reflect.Ptr && v.IsNil() {
 | 
			
		||||
				enc.AddString(key, "<nil>")
 | 
			
		||||
				return
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			retErr = fmt.Errorf("PANIC=%v", err)
 | 
			
		||||
		}
 | 
			
		||||
	}()
 | 
			
		||||
 | 
			
		||||
	enc.AddString(key, stringer.(fmt.Stringer).String())
 | 
			
		||||
	return
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										30
									
								
								vendor/go.uber.org/zap/zapcore/json_encoder.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										30
									
								
								vendor/go.uber.org/zap/zapcore/json_encoder.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -236,7 +236,9 @@ func (enc *jsonEncoder) AppendComplex128(val complex128) {
 | 
			
		||||
 | 
			
		||||
func (enc *jsonEncoder) AppendDuration(val time.Duration) {
 | 
			
		||||
	cur := enc.buf.Len()
 | 
			
		||||
	enc.EncodeDuration(val, enc)
 | 
			
		||||
	if e := enc.EncodeDuration; e != nil {
 | 
			
		||||
		e(val, enc)
 | 
			
		||||
	}
 | 
			
		||||
	if cur == enc.buf.Len() {
 | 
			
		||||
		// User-supplied EncodeDuration is a no-op. Fall back to nanoseconds to keep
 | 
			
		||||
		// JSON valid.
 | 
			
		||||
@@ -275,7 +277,9 @@ func (enc *jsonEncoder) AppendTimeLayout(time time.Time, layout string) {
 | 
			
		||||
 | 
			
		||||
func (enc *jsonEncoder) AppendTime(val time.Time) {
 | 
			
		||||
	cur := enc.buf.Len()
 | 
			
		||||
	enc.EncodeTime(val, enc)
 | 
			
		||||
	if e := enc.EncodeTime; e != nil {
 | 
			
		||||
		e(val, enc)
 | 
			
		||||
	}
 | 
			
		||||
	if cur == enc.buf.Len() {
 | 
			
		||||
		// User-supplied EncodeTime is a no-op. Fall back to nanos since epoch to keep
 | 
			
		||||
		// output JSON valid.
 | 
			
		||||
@@ -362,14 +366,20 @@ func (enc *jsonEncoder) EncodeEntry(ent Entry, fields []Field) (*buffer.Buffer,
 | 
			
		||||
			final.AppendString(ent.LoggerName)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if ent.Caller.Defined && final.CallerKey != "" {
 | 
			
		||||
		final.addKey(final.CallerKey)
 | 
			
		||||
		cur := final.buf.Len()
 | 
			
		||||
		final.EncodeCaller(ent.Caller, final)
 | 
			
		||||
		if cur == final.buf.Len() {
 | 
			
		||||
			// User-supplied EncodeCaller was a no-op. Fall back to strings to
 | 
			
		||||
			// keep output JSON valid.
 | 
			
		||||
			final.AppendString(ent.Caller.String())
 | 
			
		||||
	if ent.Caller.Defined {
 | 
			
		||||
		if final.CallerKey != "" {
 | 
			
		||||
			final.addKey(final.CallerKey)
 | 
			
		||||
			cur := final.buf.Len()
 | 
			
		||||
			final.EncodeCaller(ent.Caller, final)
 | 
			
		||||
			if cur == final.buf.Len() {
 | 
			
		||||
				// User-supplied EncodeCaller was a no-op. Fall back to strings to
 | 
			
		||||
				// keep output JSON valid.
 | 
			
		||||
				final.AppendString(ent.Caller.String())
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		if final.FunctionKey != "" {
 | 
			
		||||
			final.addKey(final.FunctionKey)
 | 
			
		||||
			final.AppendString(ent.Caller.Function)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if final.MessageKey != "" {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								vendor/go.uber.org/zap/zapcore/marshaler.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								vendor/go.uber.org/zap/zapcore/marshaler.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -23,6 +23,10 @@ package zapcore
 | 
			
		||||
// ObjectMarshaler allows user-defined types to efficiently add themselves to the
 | 
			
		||||
// logging context, and to selectively omit information which shouldn't be
 | 
			
		||||
// included in logs (e.g., passwords).
 | 
			
		||||
//
 | 
			
		||||
// Note: ObjectMarshaler is only used when zap.Object is used or when
 | 
			
		||||
// passed directly to zap.Any. It is not used when reflection-based
 | 
			
		||||
// encoding is used.
 | 
			
		||||
type ObjectMarshaler interface {
 | 
			
		||||
	MarshalLogObject(ObjectEncoder) error
 | 
			
		||||
}
 | 
			
		||||
@@ -39,6 +43,10 @@ func (f ObjectMarshalerFunc) MarshalLogObject(enc ObjectEncoder) error {
 | 
			
		||||
// ArrayMarshaler allows user-defined types to efficiently add themselves to the
 | 
			
		||||
// logging context, and to selectively omit information which shouldn't be
 | 
			
		||||
// included in logs (e.g., passwords).
 | 
			
		||||
//
 | 
			
		||||
// Note: ArrayMarshaler is only used when zap.Array is used or when
 | 
			
		||||
// passed directly to zap.Any. It is not used when reflection-based
 | 
			
		||||
// encoding is used.
 | 
			
		||||
type ArrayMarshaler interface {
 | 
			
		||||
	MarshalLogArray(ArrayEncoder) error
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user