From e4b92d17be27ea2341bce05ba09c27e6703bd396 Mon Sep 17 00:00:00 2001 From: David Finkel Date: Thu, 28 Jul 2022 15:55:51 -0400 Subject: [PATCH] AtomicInt: wrap sync/atomic.Int64 w/ go 1.19 Leverage sync/atomic.Int64 with go 1.19 (and keep the same code for earlier versions) Use build tags as appropriate. --- atomic_int.go | 42 ++++++++++++++++++++++++++++++++++++++++++ atomic_int_go1.19.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ galaxycache.go | 19 ------------------- 3 files changed, 86 insertions(+), 19 deletions(-) create mode 100644 atomic_int.go create mode 100644 atomic_int_go1.19.go diff --git a/atomic_int.go b/atomic_int.go new file mode 100644 index 00000000..afd6afef --- /dev/null +++ b/atomic_int.go @@ -0,0 +1,42 @@ +//go:build !go1.19 + +/* +Copyright 2012 Google Inc. + +Licensed 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. +*/ + +package galaxycache + +import ( + "strconv" + "sync/atomic" +) + +// An AtomicInt is an int64 to be accessed atomically. +// It thinly wraps atomic.Int64 with go1.19+ +type AtomicInt int64 + +// Add atomically adds n to i. +func (i *AtomicInt) Add(n int64) { + atomic.AddInt64((*int64)(i), n) +} + +// Get atomically gets the value of i. +func (i *AtomicInt) Get() int64 { + return atomic.LoadInt64((*int64)(i)) +} + +func (i *AtomicInt) String() string { + return strconv.FormatInt(i.Get(), 10) +} diff --git a/atomic_int_go1.19.go b/atomic_int_go1.19.go new file mode 100644 index 00000000..c60f9cf1 --- /dev/null +++ b/atomic_int_go1.19.go @@ -0,0 +1,44 @@ +//go:build go1.19 + +/* +Copyright 2022 Vimeo Inc. + +Licensed 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. +*/ + +package galaxycache + +import ( + "strconv" + "sync/atomic" +) + +// An AtomicInt is an int64 to be accessed atomically. +// It thinly wraps atomic.Int64 with go1.19+ +type AtomicInt struct { + v atomic.Int64 +} + +// Add atomically adds n to i. +func (i *AtomicInt) Add(n int64) { + i.v.Add(n) +} + +// Get atomically gets the value of i. +func (i *AtomicInt) Get() int64 { + return i.v.Load() +} + +func (i *AtomicInt) String() string { + return strconv.FormatInt(i.Get(), 10) +} diff --git a/galaxycache.go b/galaxycache.go index 626db13d..9aa3f0b2 100644 --- a/galaxycache.go +++ b/galaxycache.go @@ -28,9 +28,7 @@ import ( "context" "errors" "fmt" - "strconv" "sync" - "sync/atomic" "time" "unsafe" @@ -765,23 +763,6 @@ func (c *cache) itemsLocked() int64 { return int64(c.lru.Len()) } -// An AtomicInt is an int64 to be accessed atomically. -type AtomicInt int64 - -// Add atomically adds n to i. -func (i *AtomicInt) Add(n int64) { - atomic.AddInt64((*int64)(i), n) -} - -// Get atomically gets the value of i. -func (i *AtomicInt) Get() int64 { - return atomic.LoadInt64((*int64)(i)) -} - -func (i *AtomicInt) String() string { - return strconv.FormatInt(i.Get(), 10) -} - // CacheStats are returned by stats accessors on Galaxy. type CacheStats struct { Bytes int64