1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- // Go MySQL Driver - A MySQL-Driver for Go's database/sql package.
- //
- // Copyright 2022 The Go-MySQL-Driver Authors. All rights reserved.
- //
- // This Source Code Form is subject to the terms of the Mozilla Public
- // License, v. 2.0. If a copy of the MPL was not distributed with this file,
- // You can obtain one at http://mozilla.org/MPL/2.0/.
- //go:build !go1.19
- // +build !go1.19
- package mysql
- import "sync/atomic"
- /******************************************************************************
- * Sync utils *
- ******************************************************************************/
- // atomicBool is an implementation of atomic.Bool for older version of Go.
- // it is a wrapper around uint32 for usage as a boolean value with
- // atomic access.
- type atomicBool struct {
- _ noCopy
- value uint32
- }
- // Load returns whether the current boolean value is true
- func (ab *atomicBool) Load() bool {
- return atomic.LoadUint32(&ab.value) > 0
- }
- // Store sets the value of the bool regardless of the previous value
- func (ab *atomicBool) Store(value bool) {
- if value {
- atomic.StoreUint32(&ab.value, 1)
- } else {
- atomic.StoreUint32(&ab.value, 0)
- }
- }
- // Swap sets the value of the bool and returns the old value.
- func (ab *atomicBool) Swap(value bool) bool {
- if value {
- return atomic.SwapUint32(&ab.value, 1) > 0
- }
- return atomic.SwapUint32(&ab.value, 0) > 0
- }
|