cairo_lang_sierra/extensions/modules/int/
signed128.rs

1use super::signed::{SintDiffLibfunc, SintOperationLibfunc, SintTraits};
2use super::unsigned128::Uint128Type;
3use super::{
4    IntConstLibfunc, IntEqualLibfunc, IntFromFelt252Libfunc, IntToFelt252Libfunc, IntTraits,
5    IntType,
6};
7use crate::define_libfunc_hierarchy;
8use crate::extensions::NamedType;
9use crate::extensions::is_zero::{IsZeroLibfunc, IsZeroTraits};
10use crate::ids::GenericTypeId;
11
12/// Type for i128.
13pub type Sint128Type = IntType<Sint128Traits>;
14
15define_libfunc_hierarchy! {
16    pub enum Sint128Libfunc {
17        Equal(IntEqualLibfunc<Sint128Traits>),
18        Const(IntConstLibfunc<Sint128Traits>),
19        ToFelt252(IntToFelt252Libfunc<Sint128Traits>),
20        FromFelt252(IntFromFelt252Libfunc<Sint128Traits>),
21        Operation(SintOperationLibfunc<Sint128Traits>),
22        Diff(SintDiffLibfunc<Sint128Traits>),
23        IsZero(IsZeroLibfunc<Sint128Traits>),
24    }, Sint128Concrete
25}
26
27#[derive(Default)]
28pub struct Sint128Traits;
29
30impl SintTraits for Sint128Traits {
31    const OVERFLOWING_ADD: &'static str = "i128_overflowing_add_impl";
32    const OVERFLOWING_SUB: &'static str = "i128_overflowing_sub_impl";
33    const DIFF: &'static str = "i128_diff";
34    const UNSIGNED_INT_TYPE: GenericTypeId = <Uint128Type as NamedType>::ID;
35}
36
37impl IntTraits for Sint128Traits {
38    type IntType = i128;
39    const GENERIC_TYPE_ID: GenericTypeId = GenericTypeId::new_inline("i128");
40    const IS_SMALL: bool = false;
41    const CONST: &'static str = "i128_const";
42    const EQUAL: &'static str = "i128_eq";
43    const TO_FELT252: &'static str = "i128_to_felt252";
44    const TRY_FROM_FELT252: &'static str = "i128_try_from_felt252";
45}
46
47impl IsZeroTraits for Sint128Traits {
48    const IS_ZERO: &'static str = "i128_is_zero";
49    const GENERIC_TYPE_ID: GenericTypeId = <Sint128Type as NamedType>::ID;
50}