Refactor signal #6

Merged
ThePerfectComputer merged 5 commits from refactor-signal into main 2022-10-26 06:23:08 +00:00
4 changed files with 67 additions and 67 deletions
Showing only changes of commit 746c25b1ba - Show all commits

View file

@ -116,7 +116,7 @@ pub(super) fn parse_events<'a>(
let signal = vcd.dealiasing_signal_idx_to_signal_lookup_mut(signal_idx)?;
match signal {
Signal::Data {
SignalEnum::Data {
name,
sig_type,
ref mut signal_error,
@ -204,7 +204,7 @@ pub(super) fn parse_events<'a>(
Ok(())
}
}
Signal::Alias { .. } => {
SignalEnum::Alias { .. } => {
let (f, l) = (file!(), line!());
let msg = format!(
"Error near {f}:{l}, a signal alias should not point to a signal alias.\n\
@ -229,7 +229,7 @@ pub(super) fn parse_events<'a>(
let signal = vcd.dealiasing_signal_idx_to_signal_lookup_mut(signal_idx)?;
match signal {
Signal::Data {
SignalEnum::Data {
name,
sig_type,
ref mut signal_error,
@ -296,7 +296,7 @@ pub(super) fn parse_events<'a>(
}
Ok(())
}
Signal::Alias { .. } => {
SignalEnum::Alias { .. } => {
let (f, l) = (file!(), line!());
let msg = format!(
"Error near {f}:{l}, a signal alias should not point to a signal alias.\n\
@ -320,7 +320,7 @@ pub(super) fn parse_events<'a>(
let signal = vcd.dealiasing_signal_idx_to_signal_lookup_mut(signal_idx)?;
match signal {
Signal::Data {
SignalEnum::Data {
name,
sig_type,
ref mut signal_error,
@ -387,7 +387,7 @@ pub(super) fn parse_events<'a>(
}
Ok(())
}
Signal::Alias { .. } => {
SignalEnum::Alias { .. } => {
let (f, l) = (file!(), line!());
let msg = format!(
"Error near {f}:{l}, a signal alias should not point to a signal alias.\n\
@ -413,7 +413,7 @@ pub(super) fn parse_events<'a>(
let signal = vcd.dealiasing_signal_idx_to_signal_lookup_mut(signal_idx)?;
match signal {
Signal::Data {
SignalEnum::Data {
name,
sig_type,
ref mut signal_error,
@ -468,7 +468,7 @@ pub(super) fn parse_events<'a>(
string_vals.push(val);
Ok(())
}
Signal::Alias { .. } => {
SignalEnum::Alias { .. } => {
let (f, l) = (file!(), line!());
let msg = format!(
"Error near {f}:{l}, a signal alias should not point to a signal alias.\n\
@ -492,7 +492,7 @@ pub(super) fn parse_events<'a>(
let signal = vcd.dealiasing_signal_idx_to_signal_lookup_mut(signal_idx)?;
match signal {
Signal::Data {
SignalEnum::Data {
ref mut signal_error,
string_vals,
byte_len_of_string_tmstmp_vals_on_tmln,
@ -513,7 +513,7 @@ pub(super) fn parse_events<'a>(
string_vals.push(val);
Ok(())
}
Signal::Alias { .. } => {
SignalEnum::Alias { .. } => {
let (f, l) = (file!(), line!());
let msg = format!(
"Error near {f}:{l}, a signal alias should not point to a signal alias.\n\

View file

@ -95,7 +95,7 @@ pub(super) fn parse_var<'a>(
let full_signal_name = full_signal_name.join(" ");
let num_bytes = if num_bits.is_some() {
let bytes_required = Signal::bytes_required(num_bits.unwrap(), &full_signal_name)?;
let bytes_required = SignalEnum::bytes_required(num_bits.unwrap(), &full_signal_name)?;
Some(bytes_required)
} else {
None
@ -107,7 +107,7 @@ pub(super) fn parse_var<'a>(
let (signal, signal_idx) = match signal_map.get(&signal_alias) {
Some(ref_signal_idx) => {
let signal_idx = SignalIdx(vcd.all_signals.len());
let signal = Signal::Alias {
let signal = SignalEnum::Alias {
name: full_signal_name,
signal_alias: *ref_signal_idx,
};
@ -116,7 +116,7 @@ pub(super) fn parse_var<'a>(
None => {
let signal_idx = SignalIdx(vcd.all_signals.len());
signal_map.insert(signal_alias.to_string(), signal_idx);
let signal = Signal::Data {
let signal = SignalEnum::Data {
name: full_signal_name,
sig_type: var_type,
signal_error: None,

View file

@ -30,7 +30,7 @@ pub(super) enum TimelineQueryResults {
#[derive(Debug)]
pub enum Signal {
pub(super) enum SignalEnum {
Data {
name: String,
sig_type: SigType,
@ -100,18 +100,18 @@ type TimeStamp = BigUint;
type SignalValNum = BigUint;
// getter functions
impl Signal {
impl SignalEnum {
pub fn name(&self) -> String {
match self {
Signal::Data { name, ..} => name,
Signal::Alias { name, .. } => name
SignalEnum::Data { name, ..} => name,
SignalEnum::Alias { name, .. } => name
}.clone()
}
}
// helper functions ultimately used by Signal's query functions later on
impl Signal {
impl SignalEnum {
/// Computes the bytes required to store a signal's numerical value
/// using the num_bits which another function would provide from
/// the num_bits field of the Signal::Data variant.
@ -144,7 +144,7 @@ impl Signal {
lsb_indxs_of_string_tmstmp_vals_on_tmln,
byte_len_of_string_tmstmp_vals_on_tmln,
) = match self {
Signal::Data {
SignalEnum::Data {
string_vals,
lsb_indxs_of_string_tmstmp_vals_on_tmln,
byte_len_of_string_tmstmp_vals_on_tmln,
@ -154,7 +154,7 @@ impl Signal {
lsb_indxs_of_string_tmstmp_vals_on_tmln,
byte_len_of_string_tmstmp_vals_on_tmln,
)),
Signal::Alias { .. } => Err(SignalErrors::PointsToAlias),
SignalEnum::Alias { .. } => Err(SignalErrors::PointsToAlias),
}?;
// get index
@ -193,7 +193,7 @@ impl Signal {
lsb_indxs_of_num_tmstmp_vals_on_tmln,
byte_len_of_num_tmstmp_vals_on_tmln,
) = match self {
Signal::Data {
SignalEnum::Data {
num_bytes,
nums_encoded_as_fixed_width_le_u8,
lsb_indxs_of_num_tmstmp_vals_on_tmln,
@ -205,7 +205,7 @@ impl Signal {
lsb_indxs_of_num_tmstmp_vals_on_tmln,
byte_len_of_num_tmstmp_vals_on_tmln,
)),
Signal::Alias { .. } => Err(SignalErrors::PointsToAlias),
SignalEnum::Alias { .. } => Err(SignalErrors::PointsToAlias),
}?;
// get index
@ -234,12 +234,12 @@ impl Signal {
// Function that take in a desired time on the timeline for a
// specific signal and return a numerical or string value in a Result,
// or an error in a Result.
impl Signal {
impl SignalEnum {
pub fn query_string_val_on_tmln(
&self,
desired_time: &BigUint,
tmstmps_encoded_as_u8s: &Vec<u8>,
all_signals: &Vec<Signal>,
all_signals: &Vec<SignalEnum>,
) -> Result<String, SignalErrors> {
let signal_idx = match self {
Self::Data { self_idx, .. } => {
@ -263,7 +263,7 @@ impl Signal {
// else we propagate Err(..).
let (string_vals, lsb_indxs_of_string_tmstmp_vals_on_tmln) =
match &all_signals[signal_idx] {
Signal::Data {
SignalEnum::Data {
ref string_vals,
ref lsb_indxs_of_string_tmstmp_vals_on_tmln,
..
@ -273,7 +273,7 @@ impl Signal {
lsb_indxs_of_string_tmstmp_vals_on_tmln,
))
}
Signal::Alias { .. } => Err(SignalErrors::PointsToAlias),
SignalEnum::Alias { .. } => Err(SignalErrors::PointsToAlias),
}?;
// this signal should at least have some events, otherwise, trying to index into
// an empty vector later on would fail
@ -354,7 +354,7 @@ impl Signal {
&self,
desired_time: &BigUint,
tmstmps_encoded_as_u8s: &Vec<u8>,
all_signals: &Vec<Signal>,
all_signals: &Vec<SignalEnum>,
) -> Result<BigUint, SignalErrors> {
let signal_idx = match self {
Self::Data { self_idx, .. } => {
@ -379,7 +379,7 @@ impl Signal {
// else we propagate Err(..).
let (nums_encoded_as_fixed_width_le_u8, lsb_indxs_of_num_tmstmp_vals_on_tmln, num_bytes) =
match &all_signals[signal_idx] {
Signal::Data {
SignalEnum::Data {
num_bytes,
ref nums_encoded_as_fixed_width_le_u8,
ref lsb_indxs_of_num_tmstmp_vals_on_tmln,
@ -394,7 +394,7 @@ impl Signal {
num_bytes,
))
}
Signal::Alias { .. } => Err(SignalErrors::PointsToAlias),
SignalEnum::Alias { .. } => Err(SignalErrors::PointsToAlias),
}?;
// this signal should at least have some events, otherwise, trying to index into
// an empty vector later on would fail

View file

@ -2,7 +2,7 @@
// This program is distributed under both the GPLV3 license
// and the YEHOWSHUA license, both of which can be found at
// the root of the folder containing the sources for this program.
use super::Signal;
use super::SignalEnum;
use chrono::prelude::*;
#[derive(Debug)]
@ -58,7 +58,7 @@ pub struct VCD {
// keep track of all timestamp values, a given signal only needs to keep
// track of the timestamps at which the given signal value changes.
pub(super) tmstmps_encoded_as_u8s: Vec<u8>,
pub(super) all_signals: Vec<Signal>,
pub(super) all_signals: Vec<SignalEnum>,
pub(super) all_scopes: Vec<Scope>,
pub(super) root_scopes: Vec<ScopeIdx>,
}
@ -90,23 +90,23 @@ impl VCD {
pub(super) fn dealiasing_signal_idx_to_signal_lookup_mut<'a>(
&'a mut self,
idx: &SignalIdx,
) -> Result<&'a mut Signal, String> {
) -> Result<&'a mut SignalEnum, String> {
// get the signal pointed to be SignalIdx from the arena
let SignalIdx(idx) = idx;
let signal = &self.all_signals[*idx];
// dereference signal if Signal::Alias, or keep idx if Signal::Data
let signal_idx = match signal {
Signal::Data { self_idx, .. } => *self_idx,
Signal::Alias { name, signal_alias } => *signal_alias,
SignalEnum::Data { self_idx, .. } => *self_idx,
SignalEnum::Alias { name, signal_alias } => *signal_alias,
};
// Should now point to Signal::Data variant, or else there's an error
let SignalIdx(idx) = signal_idx;
let signal = self.all_signals.get_mut(idx).unwrap();
match signal {
Signal::Data { .. } => Ok(signal),
Signal::Alias { .. } => Err(format!(
SignalEnum::Data { .. } => Ok(signal),
SignalEnum::Alias { .. } => Err(format!(
"Error near {}:{}. A signal alias shouldn't \
point to a signal alias.",
file!(),
@ -114,37 +114,37 @@ impl VCD {
)),
}
}
/// Takes a signal_idx as input and returns the corresponding signal if the
/// corresponding signal is of the Signal::Data variant, else the function the
/// SignalIdx in the signal_alias field of Signal::Alias variant to index
/// into the signal arena in the all_signals field of the vcd, and returns
/// the resulting signal if that signal is a Signal::Data variant, else,
/// this function returns an Err.
pub fn try_signal_idx_to_signal<'a>(
&'a self,
idx: SignalIdx,
) -> Result<&'a Signal, String> {
// get the signal pointed to be SignalIdx from the arena
let SignalIdx(idx) = idx;
let signal = &self.all_signals[idx];
// Takes a signal_idx as input and returns the corresponding signal if the
// corresponding signal is of the Signal::Data variant, else the function the
// SignalIdx in the signal_alias field of Signal::Alias variant to index
// into the signal arena in the all_signals field of the vcd, and returns
// the resulting signal if that signal is a Signal::Data variant, else,
// this function returns an Err.
// pub fn try_signal_idx_to_signal<'a>(
// &'a self,
// idx: SignalIdx,
// ) -> Result<&'a Signal, String> {
// // get the signal pointed to be SignalIdx from the arena
// let SignalIdx(idx) = idx;
// let signal = &self.all_signals[idx];
// dereference signal if Signal::Alias, or keep idx if Signal::Data
let signal_idx = match signal {
Signal::Data { self_idx, .. } => *self_idx,
Signal::Alias { name, signal_alias } => *signal_alias,
};
// // dereference signal if Signal::Alias, or keep idx if Signal::Data
// let signal_idx = match signal {
// Signal::Data { self_idx, .. } => *self_idx,
// Signal::Alias { name, signal_alias } => *signal_alias,
// };
// Should now point to Signal::Data variant, or else there's an error
let SignalIdx(idx) = signal_idx;
let signal = self.all_signals.get(idx).unwrap();
match signal {
Signal::Data { .. } => Ok(signal),
Signal::Alias { .. } => Err(format!(
"Error near {}:{}. A signal alias shouldn't \
point to a signal alias.",
file!(),
line!()
)),
}
}
// // Should now point to Signal::Data variant, or else there's an error
// let SignalIdx(idx) = signal_idx;
// let signal = self.all_signals.get(idx).unwrap();
// match signal {
// Signal::Data { .. } => Ok(signal),
// Signal::Alias { .. } => Err(format!(
// "Error near {}:{}. A signal alias shouldn't \
// point to a signal alias.",
// file!(),
// line!()
// )),
// }
// }
}