# 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).

## Unreleased

- No changes yet.

## [1.11.0] - 2023-05-02

### Fixed

- Fix `Swap` and `CompareAndSwap` for `Value` wrappers without initialization.

### Added

- Add `String` method to `atomic.Pointer[T]` type allowing users to safely print
  underlying values of pointers.

[1.11.0]: https://github.com/uber-go/atomic/compare/v1.10.0...v1.11.0

## [1.10.0] - 2022-08-11

### Added

- Add `atomic.Float32` type for atomic operations on `float32`.
- Add `CompareAndSwap` and `Swap` methods to `atomic.String`, `atomic.Error`,
  and `atomic.Value`.
- Add generic `atomic.Pointer[T]` type for atomic operations on pointers of any
  type. This is present only for Go 1.18 or higher, and is a drop-in for
  replacement for the standard library's `sync/atomic.Pointer` type.

### Changed

- Deprecate `CAS` methods on all types in favor of corresponding
  `CompareAndSwap` methods.

Thanks to @eNV25 and @icpd for their contributions to this release.

[1.10.0]: https://github.com/uber-go/atomic/compare/v1.9.0...v1.10.0

## [1.9.0] - 2021-07-15

### Added

- Add `Float64.Swap` to match int atomic operations.
- Add `atomic.Time` type for atomic operations on `time.Time` values.

[1.9.0]: https://github.com/uber-go/atomic/compare/v1.8.0...v1.9.0

## [1.8.0] - 2021-06-09

### Added

- Add `atomic.Uintptr` type for atomic operations on `uintptr` values.
- Add `atomic.UnsafePointer` type for atomic operations on `unsafe.Pointer` values.

[1.8.0]: https://github.com/uber-go/atomic/compare/v1.7.0...v1.8.0

## [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.7.0]: https://github.com/uber-go/atomic/compare/v1.6.0...v1.7.0

## [1.6.0] - 2020-02-24

### Changed

- Drop library dependency on `golang.org/x/{lint, tools}`.

[1.6.0]: https://github.com/uber-go/atomic/compare/v1.5.1...v1.6.0

## [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.1]: https://github.com/uber-go/atomic/compare/v1.5.0...v1.5.1

## [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.5.0]: https://github.com/uber-go/atomic/compare/v1.4.0...v1.5.0

## [1.4.0] - 2019-05-01

### Added

- Add `atomic.Error` type for atomic operations on `error` values.

[1.4.0]: https://github.com/uber-go/atomic/compare/v1.3.2...v1.4.0

## [1.3.2] - 2018-05-02

### Added

- Add `atomic.Duration` type for atomic operations on `time.Duration` values.

[1.3.2]: https://github.com/uber-go/atomic/compare/v1.3.1...v1.3.2

## [1.3.1] - 2017-11-14

### Fixed

- Revert optimization for `atomic.String.Store("")` which caused data races.

[1.3.1]: https://github.com/uber-go/atomic/compare/v1.3.0...v1.3.1

## [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.3.0]: https://github.com/uber-go/atomic/compare/v1.2.0...v1.3.0

## [1.2.0] - 2017-04-12

### Added

- Shadow `atomic.Value` from `sync/atomic`.

[1.2.0]: https://github.com/uber-go/atomic/compare/v1.1.0...v1.2.0

## [1.1.0] - 2017-03-10

### Added

- Add atomic `Float64` type.

### Changed

- Support new `go.uber.org/atomic` import path.

[1.1.0]: https://github.com/uber-go/atomic/compare/v1.0.0...v1.1.0

## [1.0.0] - 2016-07-18

- Initial release.

[1.0.0]: https://github.com/uber-go/atomic/releases/tag/v1.0.0
