Skip to content

Commit

Permalink
feat(metrics): impl Atomic<u32> for AtomicU32
Browse files Browse the repository at this point in the history
  • Loading branch information
koushiro committed Mar 6, 2024
1 parent 4eecdc3 commit a03302f
Showing 1 changed file with 42 additions and 16 deletions.
58 changes: 42 additions & 16 deletions src/metrics/gauge.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use crate::encoding::{EncodeGaugeValue, EncodeMetric, MetricEncoder};

use super::{MetricType, TypedMetric};
use std::marker::PhantomData;
use std::sync::atomic::{AtomicI32, Ordering};
use std::sync::atomic::{AtomicI32, AtomicU32, Ordering};
#[cfg(not(any(target_arch = "mips", target_arch = "powerpc")))]
use std::sync::atomic::{AtomicI64, AtomicU64};
use std::sync::Arc;
Expand Down Expand Up @@ -134,55 +134,81 @@ pub trait Atomic<N> {
fn get(&self) -> N;
}

#[cfg(not(any(target_arch = "mips", target_arch = "powerpc")))]
impl Atomic<i64> for AtomicI64 {
fn inc(&self) -> i64 {
impl Atomic<i32> for AtomicI32 {
fn inc(&self) -> i32 {
self.inc_by(1)
}

fn inc_by(&self, v: i64) -> i64 {
fn inc_by(&self, v: i32) -> i32 {
self.fetch_add(v, Ordering::Relaxed)
}

fn dec(&self) -> i64 {
fn dec(&self) -> i32 {
self.dec_by(1)
}

fn dec_by(&self, v: i64) -> i64 {
fn dec_by(&self, v: i32) -> i32 {
self.fetch_sub(v, Ordering::Relaxed)
}

fn set(&self, v: i64) -> i64 {
fn set(&self, v: i32) -> i32 {
self.swap(v, Ordering::Relaxed)
}

fn get(&self) -> i64 {
fn get(&self) -> i32 {
self.load(Ordering::Relaxed)
}
}

impl Atomic<i32> for AtomicI32 {
fn inc(&self) -> i32 {
impl Atomic<u32> for AtomicU32 {
fn inc(&self) -> u32 {
self.inc_by(1)
}

fn inc_by(&self, v: i32) -> i32 {
fn inc_by(&self, v: u32) -> u32 {
self.fetch_add(v, Ordering::Relaxed)
}

fn dec(&self) -> i32 {
fn dec(&self) -> u32 {
self.dec_by(1)
}

fn dec_by(&self, v: i32) -> i32 {
fn dec_by(&self, v: u32) -> u32 {
self.fetch_sub(v, Ordering::Relaxed)
}

fn set(&self, v: i32) -> i32 {
fn set(&self, v: u32) -> u32 {
self.swap(v, Ordering::Relaxed)
}

fn get(&self) -> i32 {
fn get(&self) -> u32 {
self.load(Ordering::Relaxed)
}
}

#[cfg(not(any(target_arch = "mips", target_arch = "powerpc")))]
impl Atomic<i64> for AtomicI64 {
fn inc(&self) -> i64 {
self.inc_by(1)
}

fn inc_by(&self, v: i64) -> i64 {
self.fetch_add(v, Ordering::Relaxed)
}

fn dec(&self) -> i64 {
self.dec_by(1)
}

fn dec_by(&self, v: i64) -> i64 {
self.fetch_sub(v, Ordering::Relaxed)
}

fn set(&self, v: i64) -> i64 {
self.swap(v, Ordering::Relaxed)
}

fn get(&self) -> i64 {
self.load(Ordering::Relaxed)
}
}
Expand Down

0 comments on commit a03302f

Please sign in to comment.