youtubebeat/vendor/github.com/elastic/beats/libbeat/common/atomic/atomic64.go

50 lines
2.5 KiB
Go

// Licensed to Elasticsearch B.V. under one or more contributor
// license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright
// ownership. Elasticsearch B.V. licenses this file to you under
// the Apache License, Version 2.0 (the "License"); you may
// not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
// +build amd64 arm64 ppc64 ppc64le mips64 mips64le s390x
package atomic
// atomic Uint/Int for 64bit systems
// Uint provides an architecture specific atomic uint.
type Uint struct{ a Uint64 }
// Int provides an architecture specific atomic uint.
type Int struct{ a Int64 }
func MakeUint(v uint) Uint { return Uint{MakeUint64(uint64(v))} }
func NewUint(v uint) *Uint { return &Uint{MakeUint64(uint64(v))} }
func (u *Uint) Load() uint { return uint(u.a.Load()) }
func (u *Uint) Store(v uint) { u.a.Store(uint64(v)) }
func (u *Uint) Swap(new uint) uint { return uint(u.a.Swap(uint64(new))) }
func (u *Uint) Add(delta uint) uint { return uint(u.a.Add(uint64(delta))) }
func (u *Uint) Sub(delta uint) uint { return uint(u.a.Add(uint64(-delta))) }
func (u *Uint) Inc() uint { return uint(u.a.Inc()) }
func (u *Uint) Dec() uint { return uint(u.a.Dec()) }
func (u *Uint) CAS(old, new uint) bool { return u.a.CAS(uint64(old), uint64(new)) }
func MakeInt(v int) Int { return Int{MakeInt64(int64(v))} }
func NewInt(v int) *Int { return &Int{MakeInt64(int64(v))} }
func (i *Int) Load() int { return int(i.a.Load()) }
func (i *Int) Store(v int) { i.a.Store(int64(v)) }
func (i *Int) Swap(new int) int { return int(i.a.Swap(int64(new))) }
func (i *Int) Add(delta int) int { return int(i.a.Add(int64(delta))) }
func (i *Int) Sub(delta int) int { return int(i.a.Add(int64(-delta))) }
func (i *Int) Inc() int { return int(i.a.Inc()) }
func (i *Int) Dec() int { return int(i.a.Dec()) }
func (i *Int) CAS(old, new int) bool { return i.a.CAS(int64(old), int64(new)) }