safe transmute: use AtomicU32 State ids to appease mips

...instead of `AtomicU64`, which is unavailable.

ref: https://github.com/rust-lang/rust/pull/92268#issuecomment-1197797990
This commit is contained in:
Jack Wrenn 2022-07-28 13:47:11 +00:00
parent aee5f31c68
commit e8a1925b64
2 changed files with 6 additions and 6 deletions

View File

@ -1,7 +1,7 @@
use super::{nfa, Byte, Nfa, Ref};
use crate::Map;
use std::fmt;
use std::sync::atomic::{AtomicU64, Ordering};
use std::sync::atomic::{AtomicU32, Ordering};
#[derive(PartialEq, Clone, Debug)]
pub(crate) struct Dfa<R>
@ -49,7 +49,7 @@ where
/// The states in a `Nfa` represent byte offsets.
#[derive(Hash, Eq, PartialEq, PartialOrd, Ord, Copy, Clone)]
pub(crate) struct State(u64);
pub(crate) struct State(u32);
#[derive(Hash, Eq, PartialEq, Clone, Copy)]
pub(crate) enum Transition<R>
@ -166,7 +166,7 @@ where
impl State {
pub(crate) fn new() -> Self {
static COUNTER: AtomicU64 = AtomicU64::new(0);
static COUNTER: AtomicU32 = AtomicU32::new(0);
Self(COUNTER.fetch_add(1, Ordering::SeqCst))
}
}

View File

@ -1,7 +1,7 @@
use super::{Byte, Ref, Tree, Uninhabited};
use crate::{Map, Set};
use std::fmt;
use std::sync::atomic::{AtomicU64, Ordering};
use std::sync::atomic::{AtomicU32, Ordering};
/// A non-deterministic finite automaton (NFA) that represents the layout of a type.
/// The transmutability of two given types is computed by comparing their `Nfa`s.
@ -17,7 +17,7 @@ where
/// The states in a `Nfa` represent byte offsets.
#[derive(Hash, Eq, PartialEq, PartialOrd, Ord, Copy, Clone)]
pub(crate) struct State(u64);
pub(crate) struct State(u32);
/// The transitions between states in a `Nfa` reflect bit validity.
#[derive(Hash, Eq, PartialEq, Clone, Copy)]
@ -173,7 +173,7 @@ where
impl State {
pub(crate) fn new() -> Self {
static COUNTER: AtomicU64 = AtomicU64::new(0);
static COUNTER: AtomicU32 = AtomicU32::new(0);
Self(COUNTER.fetch_add(1, Ordering::SeqCst))
}
}