Skip to content

Commit

Permalink
add float attributes
Browse files Browse the repository at this point in the history
  • Loading branch information
UnsignedByte committed Jan 24, 2025
1 parent e0703dd commit 0f2a034
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 33 deletions.
40 changes: 35 additions & 5 deletions crates/utils/src/attr/attributes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,26 @@ use crate::GPosIdx;
use std::{hash::Hash, str::FromStr};

/// Stores the attributes of a component
#[derive(Clone, PartialEq, Eq)]
pub struct Attributes<Bool, Num>
#[derive(Clone)]
pub struct Attributes<Bool, Num, Float>
where
Bool: FromStr + Hash + Eq + Copy,
Num: FromStr + Hash + Eq + Copy,
Float: FromStr + Hash + Eq + Copy,
{
/// Numerical attributes
num_attrs: AttrStore<Num, u64>,
/// Boolean attributes
bool_attrs: AttrStore<Bool, bool>,
/// Float attributes
float_attrs: AttrStore<Float, f64>,
}

impl<Bool, Num> AttrCtx<Num, u64> for Attributes<Bool, Num>
impl<Bool, Num, Float> AttrCtx<Num, u64> for Attributes<Bool, Num, Float>
where
Bool: FromStr + Hash + Eq + Copy,
Num: FromStr + Hash + Eq + Copy,
Float: FromStr + Hash + Eq + Copy,
{
fn get(&self, attr: Num) -> Option<&u64> {
self.num_attrs.get(attr)
Expand All @@ -37,10 +41,11 @@ where
}
}

impl<Bool, Num> AttrCtx<Bool, bool> for Attributes<Bool, Num>
impl<Bool, Num, Float> AttrCtx<Bool, bool> for Attributes<Bool, Num, Float>
where
Bool: FromStr + Hash + Eq + Copy,
Num: FromStr + Hash + Eq + Copy,
Float: FromStr + Hash + Eq + Copy,
{
fn get(&self, attr: Bool) -> Option<&bool> {
self.bool_attrs.get(attr)
Expand All @@ -59,15 +64,40 @@ where
}
}

impl<Bool, Num> Default for Attributes<Bool, Num>
impl<Bool, Num, Float> AttrCtx<Float, f64> for Attributes<Bool, Num, Float>
where
Bool: FromStr + Hash + Eq + Copy,
Num: FromStr + Hash + Eq + Copy,
Float: FromStr + Hash + Eq + Copy,
{
fn get(&self, attr: Float) -> Option<&f64> {
self.float_attrs.get(attr)
}

fn get_loc(&self, attr: Float) -> Option<GPosIdx> {
self.float_attrs.get_loc(attr)
}

fn set(&mut self, attr: Float, value: f64, loc: GPosIdx) {
self.float_attrs.set(attr, value, loc);
}

fn remove(&mut self, attr: Float) {
self.float_attrs.remove(attr);
}
}

impl<Bool, Num, Float> Default for Attributes<Bool, Num, Float>
where
Bool: FromStr + Hash + Eq + Copy,
Num: FromStr + Hash + Eq + Copy,
Float: FromStr + Hash + Eq + Copy,
{
fn default() -> Self {
Self {
num_attrs: AttrStore::default(),
bool_attrs: AttrStore::default(),
float_attrs: AttrStore::default(),
}
}
}
2 changes: 1 addition & 1 deletion crates/utils/src/attr/store.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use crate::{attr::AttrCtx, GPosIdx};
use std::collections::HashMap;

/// A store for attributes
#[derive(Clone, PartialEq, Eq)]
#[derive(Clone)]
pub struct AttrStore<Attr, Value>
where
Attr: Eq + std::hash::Hash + Copy,
Expand Down
5 changes: 3 additions & 2 deletions crates/utils/src/attr/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,13 @@ attr_set! {
CounterFSM: "counter_fsm",
};
};
numeric {
};
numeric {};
float {};
}

attr_set! {
port_attrs;
flag {};
numeric {};
float {};
}
60 changes: 35 additions & 25 deletions crates/utils/src/macros.rs
Original file line number Diff line number Diff line change
Expand Up @@ -124,31 +124,41 @@ attr_set! {
}
*/
macro_rules! attr_set {
(
$module:ident;
flag {
$(
$flag_tokens:tt
)*
};
numeric {
$(
$num_tokens:tt
)*
};
) => {
pub mod $module {
$crate::attr_enum! {
enum Bool;
$($flag_tokens)*
}
(
$module:ident;
flag {
$(
$flag_tokens:tt
)*
};
numeric {
$(
$num_tokens:tt
)*
};
float {
$(
$float_tokens:tt
)*
};
) => {
pub mod $module {
$crate::attr_enum! {
enum Bool;
$($flag_tokens)*
}

$crate::attr_enum! {
enum Num;
$($num_tokens)*
}
$crate::attr_enum! {
enum Num;
$($num_tokens)*
}

pub type Attrs = $crate::Attributes<Bool, Num>;
}
};
$crate::attr_enum! {
enum Float;
$($float_tokens)*
}

pub type Attrs = $crate::Attributes<Bool, Num, Float>;
}
};
}

0 comments on commit 0f2a034

Please sign in to comment.