1#![no_main]
2#![allow(warnings)]
3
4use indexmap::set::IndexSet;
5
6use mech_core::*;
7
8use paste::paste;
9
10use std::fmt::{Display, Debug};
11use std::marker::PhantomData;
12
13#[cfg(feature = "union")]
14pub mod union;
15#[cfg(feature = "union")]
23pub use self::union::*;
24#[macro_export]
51macro_rules! register_set_fxns {
52 ($lib:ident, $($suffix:ident),* $(,)?) => {
53 paste::paste! {
54 $(
55 register_fxn_descriptor!([<$lib $suffix>],
56 i8, "i8",
57 i16, "i16",
58 i32, "i32",
59 i64, "i64",
60 i128, "i128",
61 u8, "u8",
62 u16, "u16",
63 u32, "u32",
64 u64, "u64",
65 u128, "u128",
66 F32, "f32",
67 F64, "f64",
68 C64, "c64",
69 R64, "r64"
70 );
71 )*
72 }
73 };
74}
75
76#[macro_export]
77macro_rules! impl_set_fxns {
78 ($lib:ident) => {
79 impl_fxns!($lib,T,T,impl_binop);
80 register_set_fxns!($lib,
81 SS, SM1, SM2, SM3, SM4, SM2x3, SM3x2, SMD, SR2, SR3, SR4, SRD,
82 SV2, SV3, SV4, SVD, M1S, M2S, M3S, M4S, M2x3S, M3x2S, MDS,
83 R2S, R3S, R4S, RDS, V2S, V3S, V4S, VDS, M1M1, M2M2, M3M3, M4M4,
84 M2x3M2x3, M3x2M3x2, MDMD, M2V2, M3V3, M4V4, M2x3V2, M3x2V3, MDVD,
85 MDV2, MDV3, MDV4, V2M2, V3M3, V4M4, V2M2x3, V3M3x2, VDMD, V2MD,
86 V3MD, V4MD, M2R2, M3R3, M4R4, M2x3R3, M3x2R2, MDRD, MDR2, MDR3,
87 MDR4, R2M2, R3M3, R4M4, R3M2x3, R2M3x2, RDMD, R2MD, R3MD, R4MD,
88 R2R2, R3R3, R4R4, RDRD, V2V2, V3V3, V4V4, VDVD, Union
89 );
90 }}
91