refactor: log with zap
This commit is contained in:
		
							
								
								
									
										19
									
								
								vendor/go.uber.org/atomic/.codecov.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								vendor/go.uber.org/atomic/.codecov.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
coverage:
 | 
			
		||||
  range: 80..100
 | 
			
		||||
  round: down
 | 
			
		||||
  precision: 2
 | 
			
		||||
 | 
			
		||||
  status:
 | 
			
		||||
    project:                   # measuring the overall project coverage
 | 
			
		||||
      default:                 # context, you can create multiple ones with custom titles
 | 
			
		||||
        enabled: yes           # must be yes|true to enable this status
 | 
			
		||||
        target: 100            # specify the target coverage for each commit status
 | 
			
		||||
                               #   option: "auto" (must increase from parent commit or pull request base)
 | 
			
		||||
                               #   option: "X%" a static target percentage to hit
 | 
			
		||||
        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/
 | 
			
		||||
							
								
								
									
										12
									
								
								vendor/go.uber.org/atomic/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								vendor/go.uber.org/atomic/.gitignore
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
			
		||||
/bin
 | 
			
		||||
.DS_Store
 | 
			
		||||
/vendor
 | 
			
		||||
cover.html
 | 
			
		||||
cover.out
 | 
			
		||||
lint.log
 | 
			
		||||
 | 
			
		||||
# Binaries
 | 
			
		||||
*.test
 | 
			
		||||
 | 
			
		||||
# Profiling output
 | 
			
		||||
*.prof
 | 
			
		||||
							
								
								
									
										27
									
								
								vendor/go.uber.org/atomic/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								vendor/go.uber.org/atomic/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
sudo: false
 | 
			
		||||
language: go
 | 
			
		||||
go_import_path: go.uber.org/atomic
 | 
			
		||||
 | 
			
		||||
env:
 | 
			
		||||
  global:
 | 
			
		||||
    - GO111MODULE=on
 | 
			
		||||
 | 
			
		||||
matrix:
 | 
			
		||||
  include:
 | 
			
		||||
  - go: oldstable
 | 
			
		||||
  - go: stable
 | 
			
		||||
    env: LINT=1
 | 
			
		||||
 | 
			
		||||
cache:
 | 
			
		||||
  directories:
 | 
			
		||||
    - vendor
 | 
			
		||||
 | 
			
		||||
before_install:
 | 
			
		||||
  - go version
 | 
			
		||||
 | 
			
		||||
script:
 | 
			
		||||
  - test -z "$LINT" || make lint
 | 
			
		||||
  - make cover
 | 
			
		||||
 | 
			
		||||
after_success:
 | 
			
		||||
  - bash <(curl -s https://codecov.io/bash)
 | 
			
		||||
							
								
								
									
										76
									
								
								vendor/go.uber.org/atomic/CHANGELOG.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								vendor/go.uber.org/atomic/CHANGELOG.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,76 @@
 | 
			
		||||
# Changelog
 | 
			
		||||
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}`.
 | 
			
		||||
 | 
			
		||||
## [1.5.1] - 2019-11-19
 | 
			
		||||
- Fix bug where `Bool.CAS` and `Bool.Toggle` do work correctly together
 | 
			
		||||
  causing `CAS` to fail even though the old value matches.
 | 
			
		||||
 | 
			
		||||
## [1.5.0] - 2019-10-29
 | 
			
		||||
### Changed
 | 
			
		||||
- With Go modules, only the `go.uber.org/atomic` import path is supported now.
 | 
			
		||||
  If you need to use the old import path, please add a `replace` directive to
 | 
			
		||||
  your `go.mod`.
 | 
			
		||||
 | 
			
		||||
## [1.4.0] - 2019-05-01
 | 
			
		||||
### Added
 | 
			
		||||
 - Add `atomic.Error` type for atomic operations on `error` values.
 | 
			
		||||
 | 
			
		||||
## [1.3.2] - 2018-05-02
 | 
			
		||||
### Added
 | 
			
		||||
- Add `atomic.Duration` type for atomic operations on `time.Duration` values.
 | 
			
		||||
 | 
			
		||||
## [1.3.1] - 2017-11-14
 | 
			
		||||
### Fixed
 | 
			
		||||
- Revert optimization for `atomic.String.Store("")` which caused data races.
 | 
			
		||||
 | 
			
		||||
## [1.3.0] - 2017-11-13
 | 
			
		||||
### Added
 | 
			
		||||
- Add `atomic.Bool.CAS` for compare-and-swap semantics on bools.
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
- Optimize `atomic.String.Store("")` by avoiding an allocation.
 | 
			
		||||
 | 
			
		||||
## [1.2.0] - 2017-04-12
 | 
			
		||||
### Added
 | 
			
		||||
- Shadow `atomic.Value` from `sync/atomic`.
 | 
			
		||||
 | 
			
		||||
## [1.1.0] - 2017-03-10
 | 
			
		||||
### Added
 | 
			
		||||
- Add atomic `Float64` type.
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
- Support new `go.uber.org/atomic` import path.
 | 
			
		||||
 | 
			
		||||
## [1.0.0] - 2016-07-18
 | 
			
		||||
 | 
			
		||||
- 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
 | 
			
		||||
[1.4.0]: https://github.com/uber-go/atomic/compare/v1.3.2...v1.4.0
 | 
			
		||||
[1.3.2]: https://github.com/uber-go/atomic/compare/v1.3.1...v1.3.2
 | 
			
		||||
[1.3.1]: https://github.com/uber-go/atomic/compare/v1.3.0...v1.3.1
 | 
			
		||||
[1.3.0]: https://github.com/uber-go/atomic/compare/v1.2.0...v1.3.0
 | 
			
		||||
[1.2.0]: https://github.com/uber-go/atomic/compare/v1.1.0...v1.2.0
 | 
			
		||||
[1.1.0]: https://github.com/uber-go/atomic/compare/v1.0.0...v1.1.0
 | 
			
		||||
[1.0.0]: https://github.com/uber-go/atomic/releases/tag/v1.0.0
 | 
			
		||||
							
								
								
									
										19
									
								
								vendor/go.uber.org/atomic/LICENSE.txt
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								vendor/go.uber.org/atomic/LICENSE.txt
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
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.
 | 
			
		||||
							
								
								
									
										78
									
								
								vendor/go.uber.org/atomic/Makefile
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								vendor/go.uber.org/atomic/Makefile
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,78 @@
 | 
			
		||||
# Directory to place `go install`ed binaries into.
 | 
			
		||||
export GOBIN ?= $(shell pwd)/bin
 | 
			
		||||
 | 
			
		||||
GOLINT = $(GOBIN)/golint
 | 
			
		||||
GEN_ATOMICINT = $(GOBIN)/gen-atomicint
 | 
			
		||||
GEN_ATOMICWRAPPER = $(GOBIN)/gen-atomicwrapper
 | 
			
		||||
STATICCHECK = $(GOBIN)/staticcheck
 | 
			
		||||
 | 
			
		||||
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:
 | 
			
		||||
	go build ./...
 | 
			
		||||
 | 
			
		||||
.PHONY: test
 | 
			
		||||
test:
 | 
			
		||||
	go test -race ./...
 | 
			
		||||
 | 
			
		||||
.PHONY: gofmt
 | 
			
		||||
gofmt:
 | 
			
		||||
	$(eval FMT_LOG := $(shell mktemp -t gofmt.XXXXX))
 | 
			
		||||
	gofmt -e -s -l $(GO_FILES) > $(FMT_LOG) || true
 | 
			
		||||
	@[ ! -s "$(FMT_LOG)" ] || (echo "gofmt failed:" && cat $(FMT_LOG) && false)
 | 
			
		||||
 | 
			
		||||
$(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 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  $(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." )
 | 
			
		||||
							
								
								
									
										63
									
								
								vendor/go.uber.org/atomic/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								vendor/go.uber.org/atomic/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,63 @@
 | 
			
		||||
# atomic [![GoDoc][doc-img]][doc] [![Build Status][ci-img]][ci] [![Coverage Status][cov-img]][cov] [![Go Report Card][reportcard-img]][reportcard]
 | 
			
		||||
 | 
			
		||||
Simple wrappers for primitive types to enforce atomic access.
 | 
			
		||||
 | 
			
		||||
## Installation
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
$ go get -u go.uber.org/atomic@v1
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Legacy Import Path
 | 
			
		||||
 | 
			
		||||
As of v1.5.0, the import path `go.uber.org/atomic` is the only supported way
 | 
			
		||||
of using this package. If you are using Go modules, this package will fail to
 | 
			
		||||
compile with the legacy import path path `github.com/uber-go/atomic`.
 | 
			
		||||
 | 
			
		||||
We recommend migrating your code to the new import path but if you're unable
 | 
			
		||||
to do so, or if your dependencies are still using the old import path, you
 | 
			
		||||
will have to add a `replace` directive to your `go.mod` file downgrading the
 | 
			
		||||
legacy import path to an older version.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
replace github.com/uber-go/atomic => github.com/uber-go/atomic v1.4.0
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
You can do so automatically by running the following command.
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
$ go mod edit -replace github.com/uber-go/atomic=github.com/uber-go/atomic@v1.4.0
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Usage
 | 
			
		||||
 | 
			
		||||
The standard library's `sync/atomic` is powerful, but it's easy to forget which
 | 
			
		||||
variables must be accessed atomically. `go.uber.org/atomic` preserves all the
 | 
			
		||||
functionality of the standard library, but wraps the primitive types to
 | 
			
		||||
provide a safer, more convenient API.
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
var atom atomic.Uint32
 | 
			
		||||
atom.Store(42)
 | 
			
		||||
atom.Sub(2)
 | 
			
		||||
atom.CAS(40, 11)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
See the [documentation][doc] for a complete API specification.
 | 
			
		||||
 | 
			
		||||
## Development Status
 | 
			
		||||
 | 
			
		||||
Stable.
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
Released under the [MIT License](LICENSE.txt).
 | 
			
		||||
 | 
			
		||||
[doc-img]: https://godoc.org/github.com/uber-go/atomic?status.svg
 | 
			
		||||
[doc]: https://godoc.org/go.uber.org/atomic
 | 
			
		||||
[ci-img]: https://travis-ci.com/uber-go/atomic.svg?branch=master
 | 
			
		||||
[ci]: https://travis-ci.com/uber-go/atomic
 | 
			
		||||
[cov-img]: https://codecov.io/gh/uber-go/atomic/branch/master/graph/badge.svg
 | 
			
		||||
[cov]: https://codecov.io/gh/uber-go/atomic
 | 
			
		||||
[reportcard-img]: https://goreportcard.com/badge/go.uber.org/atomic
 | 
			
		||||
[reportcard]: https://goreportcard.com/report/go.uber.org/atomic
 | 
			
		||||
							
								
								
									
										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()
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										51
									
								
								vendor/go.uber.org/atomic/error.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								vendor/go.uber.org/atomic/error.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,51 @@
 | 
			
		||||
// @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
 | 
			
		||||
 | 
			
		||||
// Error is an atomic type-safe wrapper for error values.
 | 
			
		||||
type Error struct {
 | 
			
		||||
	_ nocmp // disallow non-atomic comparison
 | 
			
		||||
 | 
			
		||||
	v Value
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var _zeroError error
 | 
			
		||||
 | 
			
		||||
// NewError creates a new Error.
 | 
			
		||||
func NewError(v error) *Error {
 | 
			
		||||
	x := &Error{}
 | 
			
		||||
	if v != _zeroError {
 | 
			
		||||
		x.Store(v)
 | 
			
		||||
	}
 | 
			
		||||
	return x
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Load atomically loads the wrapped error.
 | 
			
		||||
func (x *Error) Load() error {
 | 
			
		||||
	return unpackError(x.v.Load())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 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
 | 
			
		||||
							
								
								
									
										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()
 | 
			
		||||
							
								
								
									
										54
									
								
								vendor/go.uber.org/atomic/string.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								vendor/go.uber.org/atomic/string.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
// @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
 | 
			
		||||
 | 
			
		||||
// String is an atomic type-safe wrapper for string values.
 | 
			
		||||
type String struct {
 | 
			
		||||
	_ nocmp // disallow non-atomic comparison
 | 
			
		||||
 | 
			
		||||
	v Value
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var _zeroString string
 | 
			
		||||
 | 
			
		||||
// NewString creates a new String.
 | 
			
		||||
func NewString(v string) *String {
 | 
			
		||||
	x := &String{}
 | 
			
		||||
	if v != _zeroString {
 | 
			
		||||
		x.Store(v)
 | 
			
		||||
	}
 | 
			
		||||
	return x
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Load atomically loads the wrapped string.
 | 
			
		||||
func (x *String) Load() string {
 | 
			
		||||
	if v := x.v.Load(); v != nil {
 | 
			
		||||
		return v.(string)
 | 
			
		||||
	}
 | 
			
		||||
	return _zeroString
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Store atomically stores the passed string.
 | 
			
		||||
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
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user