__plus__ :: (value:u8) -> u8 {
  return value;
};

__plus__ :: (value:i8) -> i8 {
  return value;
};

__plus__ :: (value:u16) -> u16 {
  return value;
};

__plus__ :: (value:i16) -> i16 {
  return value;
};

__plus__ :: (value:u32) -> u32 {
  return value;
};

__plus__ :: (value:i32) -> i32 {
  return value;
};

__plus__ :: (value:u64) -> u64 {
  return value;
};

__plus__ :: (value:i64) -> i64 {
  return value;
};

__minus__ :: (value:i8) -> i8 {
  return @neg(value);
};

__minus__ :: (value:i16) -> i16 {
  return @neg(value);
};

__minus__ :: (value:i32) -> i32 {
  return @neg(value);
};

__minus__ :: (value:i64) -> i64 {
  return @neg(value);
};

__sum__ :: (left:u8,right:u8) -> u8 {
  return @add(left,right);
};

__sum__ :: (left:i8,right:i8) -> i8 {
  return @add(left,right);
};

__sum__ :: (left:u16,right:u16) -> u16 {
  return @add(left,right);
};

__sum__ :: (left:i16,right:i16) -> i16 {
  return @add(left,right);
};

__sum__ :: (left:u32,right:u32) -> u32 {
  return @add(left,right);
};

__sum__ :: (left:i32,right:i32) -> i32 {
  return @add(left,right);
};

__sum__ :: (left:u64,right:u64) -> u64 {
  return @add(left,right);
};

__sum__ :: (left:i64,right:i64) -> i64 {
  return @add(left,right);
};

__sum__ :: (left:f16,right:f16) -> f16 {
  return @add(left,right);
};

__sum__ :: (left:f32,right:f32) -> f32 {
  return @add(left,right);
};

__sum__ :: (left:f64,right:f64) -> f64 {
  return @add(left,right);
};

__sum__ :: (left:f128,right:f128) -> f128 {
  return @add(left,right);
};

__sub__ :: (left:u8,right:u8) -> u8 {
  return @sub(left,right);
};

__sub__ :: (left:i8,right:i8) -> i8 {
  return @sub(left,right);
};

__sub__ :: (left:u16,right:u16) -> u16 {
  return @sub(left,right);
};

__sub__ :: (left:i16,right:i16) -> i16 {
  return @sub(left,right);
};

__sub__ :: (left:u32,right:u32) -> u32 {
  return @sub(left,right);
};

__sub__ :: (left:i32,right:i32) -> i32 {
  return @sub(left,right);
};

__sub__ :: (left:u64,right:u64) -> u64 {
  return @sub(left,right);
};

__sub__ :: (left:i64,right:i64) -> i64 {
  return @sub(left,right);
};

__sub__ :: (left:f16,right:f16) -> f16 {
  return @sub(left,right);
};

__sub__ :: (left:f32,right:f32) -> f32 {
  return @sub(left,right);
};

__sub__ :: (left:f64,right:f64) -> f64 {
  return @sub(left,right);
};

__sub__ :: (left:f128,right:f128) -> f128 {
  return @sub(left,right);
};

__mul__ :: (left:u8,right:u8) -> u8 {
  return @mul(left,right);
};

__mul__ :: (left:i8,right:i8) -> i8 {
  return @mul(left,right);
};

__mul__ :: (left:u16,right:u16) -> u16 {
  return @mul(left,right);
};

__mul__ :: (left:i16,right:i16) -> i16 {
  return @mul(left,right);
};

__mul__ :: (left:u32,right:u32) -> u32 {
  return @mul(left,right);
};

__mul__ :: (left:i32,right:i32) -> i32 {
  return @mul(left,right);
};

__mul__ :: (left:u64,right:u64) -> u64 {
  return @mul(left,right);
};

__mul__ :: (left:i64,right:i64) -> i64 {
  return @mul(left,right);
};

__mul__ :: (left:f16,right:f16) -> f16 {
  return @mul(left,right);
};

__mul__ :: (left:f32,right:f32) -> f32 {
  return @mul(left,right);
};

__mul__ :: (left:f64,right:f64) -> f64 {
  return @mul(left,right);
};

__mul__ :: (left:f128,right:f128) -> f128 {
  return @mul(left,right);
};

__div__ :: (left:u8,right:u8) -> u8 {
  return @div(left,right);
};

__div__ :: (left:i8,right:i8) -> i8 {
  return @div(left,right);
};

__div__ :: (left:u16,right:u16) -> u16 {
  return @div(left,right);
};

__div__ :: (left:i16,right:i16) -> i16 {
  return @div(left,right);
};

__div__ :: (left:u32,right:u32) -> u32 {
  return @div(left,right);
};

__div__ :: (left:i32,right:i32) -> i32 {
  return @div(left,right);
};

__div__ :: (left:u64,right:u64) -> u64 {
  return @div(left,right);
};

__div__ :: (left:i64,right:i64) -> i64 {
  return @div(left,right);
};

__div__ :: (left:f16,right:f16) -> f16 {
  return @div(left,right);
};

__div__ :: (left:f32,right:f32) -> f32 {
  return @div(left,right);
};

__div__ :: (left:f64,right:f64) -> f64 {
  return @div(left,right);
};

__div__ :: (left:f128,right:f128) -> f128 {
  return @div(left,right);
};

__mod__ :: (left:u8,right:u8) -> u8 {
  return @mod(left,right);
};

__mod__ :: (left:i8,right:i8) -> i8 {
  return @mod(left,right);
};

__mod__ :: (left:u16,right:u16) -> u16 {
  return @mod(left,right);
};

__mod__ :: (left:i16,right:i16) -> i16 {
  return @mod(left,right);
};

__mod__ :: (left:u32,right:u32) -> u32 {
  return @mod(left,right);
};

__mod__ :: (left:i32,right:i32) -> i32 {
  return @mod(left,right);
};

__mod__ :: (left:u64,right:u64) -> u64 {
  return @mod(left,right);
};

__mod__ :: (left:i64,right:i64) -> i64 {
  return @mod(left,right);
};

__greater__ :: (left:u8,right:u8) -> bool {
  return @greater(left,right);
};

__greater__ :: (left:i8,right:i8) -> bool {
  return @greater(left,right);
};

__greater__ :: (left:u16,right:u16) -> bool {
  return @greater(left,right);
};

__greater__ :: (left:i16,right:i16) -> bool {
  return @greater(left,right);
};

__greater__ :: (left:u32,right:u32) -> bool {
  return @greater(left,right);
};

__greater__ :: (left:i32,right:i32) -> bool {
  return @greater(left,right);
};

__greater__ :: (left:u64,right:u64) -> bool {
  return @greater(left,right);
};

__greater__ :: (left:i64,right:i64) -> bool {
  return @greater(left,right);
};

__greater__ :: (left:f16,right:f16) -> bool {
  return @greater(left,right);
};

__greater__ :: (left:f32,right:f32) -> bool {
  return @greater(left,right);
};

__greater__ :: (left:f64,right:f64) -> bool {
  return @greater(left,right);
};

__greater__ :: (left:f128,right:f128) -> bool {
  return @greater(left,right);
};

__smaller__ :: (left:u8,right:u8) -> bool {
  return @smaller(left,right);
};

__smaller__ :: (left:i8,right:i8) -> bool {
  return @smaller(left,right);
};

__smaller__ :: (left:u16,right:u16) -> bool {
  return @smaller(left,right);
};

__smaller__ :: (left:i16,right:i16) -> bool {
  return @smaller(left,right);
};

__smaller__ :: (left:u32,right:u32) -> bool {
  return @smaller(left,right);
};

__smaller__ :: (left:i32,right:i32) -> bool {
  return @smaller(left,right);
};

__smaller__ :: (left:u64,right:u64) -> bool {
  return @smaller(left,right);
};

__smaller__ :: (left:i64,right:i64) -> bool {
  return @smaller(left,right);
};

__smaller__ :: (left:f16,right:f16) -> bool {
  return @smaller(left,right);
};

__smaller__ :: (left:f32,right:f32) -> bool {
  return @smaller(left,right);
};

__smaller__ :: (left:f64,right:f64) -> bool {
  return @smaller(left,right);
};

__smaller__ :: (left:f128,right:f128) -> bool {
  return @smaller(left,right);
};

__greater_or_equal__ :: (left:u8,right:u8) -> bool {
  return @greater_or_equal(left,right);
};

__greater_or_equal__ :: (left:i8,right:i8) -> bool {
  return @greater_or_equal(left,right);
};

__greater_or_equal__ :: (left:u16,right:u16) -> bool {
  return @greater_or_equal(left,right);
};

__greater_or_equal__ :: (left:i16,right:i16) -> bool {
  return @greater_or_equal(left,right);
};

__greater_or_equal__ :: (left:u32,right:u32) -> bool {
  return @greater_or_equal(left,right);
};

__greater_or_equal__ :: (left:i32,right:i32) -> bool {
  return @greater_or_equal(left,right);
};

__greater_or_equal__ :: (left:u64,right:u64) -> bool {
  return @greater_or_equal(left,right);
};

__greater_or_equal__ :: (left:i64,right:i64) -> bool {
  return @greater_or_equal(left,right);
};

__greater_or_equal__ :: (left:f16,right:f16) -> bool {
  return @greater_or_equal(left,right);
};

__greater_or_equal__ :: (left:f32,right:f32) -> bool {
  return @greater_or_equal(left,right);
};

__greater_or_equal__ :: (left:f64,right:f64) -> bool {
  return @greater_or_equal(left,right);
};

__greater_or_equal__ :: (left:f128,right:f128) -> bool {
  return @greater_or_equal(left,right);
};

__smaller_or_equal__ :: (left:u8,right:u8) -> bool {
  return @smaller_or_equal(left,right);
};

__smaller_or_equal__ :: (left:i8,right:i8) -> bool {
  return @smaller_or_equal(left,right);
};

__smaller_or_equal__ :: (left:u16,right:u16) -> bool {
  return @smaller_or_equal(left,right);
};

__smaller_or_equal__ :: (left:i16,right:i16) -> bool {
  return @smaller_or_equal(left,right);
};

__smaller_or_equal__ :: (left:u32,right:u32) -> bool {
  return @smaller_or_equal(left,right);
};

__smaller_or_equal__ :: (left:i32,right:i32) -> bool {
  return @smaller_or_equal(left,right);
};

__smaller_or_equal__ :: (left:u64,right:u64) -> bool {
  return @smaller_or_equal(left,right);
};

__smaller_or_equal__ :: (left:i64,right:i64) -> bool {
  return @smaller_or_equal(left,right);
};

__smaller_or_equal__ :: (left:f16,right:f16) -> bool {
  return @smaller_or_equal(left,right);
};

__smaller_or_equal__ :: (left:f32,right:f32) -> bool {
  return @smaller_or_equal(left,right);
};

__smaller_or_equal__ :: (left:f64,right:f64) -> bool {
  return @smaller_or_equal(left,right);
};

__smaller_or_equal__ :: (left:f128,right:f128) -> bool {
  return @smaller_or_equal(left,right);
};

__equal__ :: (left:u8,right:u8) -> bool {
  return @equal(left,right);
};

__equal__ :: (left:i8,right:i8) -> bool {
  return @equal(left,right);
};

__equal__ :: (left:u16,right:u16) -> bool {
  return @equal(left,right);
};

__equal__ :: (left:i16,right:i16) -> bool {
  return @equal(left,right);
};

__equal__ :: (left:u32,right:u32) -> bool {
  return @equal(left,right);
};

__equal__ :: (left:i32,right:i32) -> bool {
  return @equal(left,right);
};

__equal__ :: (left:u64,right:u64) -> bool {
  return @equal(left,right);
};

__equal__ :: (left:i64,right:i64) -> bool {
  return @equal(left,right);
};

__equal__ :: (left:f16,right:f16) -> bool {
  return @equal(left,right);
};

__equal__ :: (left:f32,right:f32) -> bool {
  return @equal(left,right);
};

__equal__ :: (left:f64,right:f64) -> bool {
  return @equal(left,right);
};

__equal__ :: (left:f128,right:f128) -> bool {
  return @equal(left,right);
};

__equal__ :: (left:bool,right:bool) -> bool {
  return @equal(left,right);
};

__equal__ :: (left:type,right:type) -> bool {
  return @equal(left,right);
};

__not_equal__ :: (left:u8,right:u8) -> bool {
  return @not_equal(left,right);
};

__not_equal__ :: (left:i8,right:i8) -> bool {
  return @not_equal(left,right);
};

__not_equal__ :: (left:u16,right:u16) -> bool {
  return @not_equal(left,right);
};

__not_equal__ :: (left:i16,right:i16) -> bool {
  return @not_equal(left,right);
};

__not_equal__ :: (left:u32,right:u32) -> bool {
  return @not_equal(left,right);
};

__not_equal__ :: (left:i32,right:i32) -> bool {
  return @not_equal(left,right);
};

__not_equal__ :: (left:u64,right:u64) -> bool {
  return @not_equal(left,right);
};

__not_equal__ :: (left:i64,right:i64) -> bool {
  return @not_equal(left,right);
};

__not_equal__ :: (left:f16,right:f16) -> bool {
  return @not_equal(left,right);
};

__not_equal__ :: (left:f32,right:f32) -> bool {
  return @not_equal(left,right);
};

__not_equal__ :: (left:f64,right:f64) -> bool {
  return @not_equal(left,right);
};

__not_equal__ :: (left:f128,right:f128) -> bool {
  return @not_equal(left,right);
};

__not_equal__ :: (left:bool,right:bool) -> bool {
  return @not_equal(left,right);
};

__not_equal__ :: (left:type,right:type) -> bool {
  return @not_equal(left,right);
};

__logical_not__ :: (value:bool) -> bool {
  return value == false;
};

__logical_and__ :: (left:bool,lazy right:bool) -> bool {
  if left == false {
    return false;
  } else if right == false {
    return false;
  } else {
    return true;
  }
};

__logical_or__ :: (left:bool,lazy right:bool) -> bool {
  if left == true {
    return true;
  } else if right == true {
    return true;
  } else {
    return false;
  }
};

__bitwise_not__ :: (value:u8) -> u8 {
  return @bitwise_not(value);
};

__bitwise_not__ :: (value:i8) -> i8 {
  return @bitwise_not(value);
};

__bitwise_not__ :: (value:u16) -> u16 {
  return @bitwise_not(value);
};

__bitwise_not__ :: (value:i16) -> i16 {
  return @bitwise_not(value);
};

__bitwise_not__ :: (value:u32) -> u32 {
  return @bitwise_not(value);
};

__bitwise_not__ :: (value:i32) -> i32 {
  return @bitwise_not(value);
};

__bitwise_not__ :: (value:u64) -> u64 {
  return @bitwise_not(value);
};

__bitwise_not__ :: (value:i64) -> i64 {
  return @bitwise_not(value);
};

__bitwise_and__ :: (left:u8,right:u8) -> u8 {
  return @bitwise_and(left,right);
};

__bitwise_and__ :: (left:i8,right:i8) -> i8 {
  return @bitwise_and(left,right);
};

__bitwise_and__ :: (left:u16,right:u16) -> u16 {
  return @bitwise_and(left,right);
};

__bitwise_and__ :: (left:i16,right:i16) -> i16 {
  return @bitwise_and(left,right);
};

__bitwise_and__ :: (left:u32,right:u32) -> u32 {
  return @bitwise_and(left,right);
};

__bitwise_and__ :: (left:i32,right:i32) -> i32 {
  return @bitwise_and(left,right);
};

__bitwise_and__ :: (left:u64,right:u64) -> u64 {
  return @bitwise_and(left,right);
};

__bitwise_and__ :: (left:i64,right:i64) -> i64 {
  return @bitwise_and(left,right);
};

__bitwise_xor__ :: (left:u8,right:u8) -> u8 {
  return @bitwise_xor(left,right);
};

__bitwise_xor__ :: (left:i8,right:i8) -> i8 {
  return @bitwise_xor(left,right);
};

__bitwise_xor__ :: (left:u16,right:u16) -> u16 {
  return @bitwise_xor(left,right);
};

__bitwise_xor__ :: (left:i16,right:i16) -> i16 {
  return @bitwise_xor(left,right);
};

__bitwise_xor__ :: (left:u32,right:u32) -> u32 {
  return @bitwise_xor(left,right);
};

__bitwise_xor__ :: (left:i32,right:i32) -> i32 {
  return @bitwise_xor(left,right);
};

__bitwise_xor__ :: (left:u64,right:u64) -> u64 {
  return @bitwise_xor(left,right);
};

__bitwise_xor__ :: (left:i64,right:i64) -> i64 {
  return @bitwise_xor(left,right);
};

__bitwise_or__ :: (left:u8,right:u8) -> u8 {
  return @bitwise_or(left,right);
};

__bitwise_or__ :: (left:i8,right:i8) -> i8 {
  return @bitwise_or(left,right);
};

__bitwise_or__ :: (left:u16,right:u16) -> u16 {
  return @bitwise_or(left,right);
};

__bitwise_or__ :: (left:i16,right:i16) -> i16 {
  return @bitwise_or(left,right);
};

__bitwise_or__ :: (left:u32,right:u32) -> u32 {
  return @bitwise_or(left,right);
};

__bitwise_or__ :: (left:i32,right:i32) -> i32 {
  return @bitwise_or(left,right);
};

__bitwise_or__ :: (left:u64,right:u64) -> u64 {
  return @bitwise_or(left,right);
};

__bitwise_or__ :: (left:i64,right:i64) -> i64 {
  return @bitwise_or(left,right);
};

__shift_left__ :: (left:u8,right:u8) -> u8 {
  return @shift_left(left,right);
};

__shift_left__ :: (left:i8,right:i8) -> i8 {
  return @shift_left(left,right);
};

__shift_left__ :: (left:u16,right:u16) -> u16 {
  return @shift_left(left,right);
};

__shift_left__ :: (left:i16,right:i16) -> i16 {
  return @shift_left(left,right);
};

__shift_left__ :: (left:u32,right:u32) -> u32 {
  return @shift_left(left,right);
};

__shift_left__ :: (left:i32,right:i32) -> i32 {
  return @shift_left(left,right);
};

__shift_left__ :: (left:u64,right:u64) -> u64 {
  return @shift_left(left,right);
};

__shift_left__ :: (left:i64,right:i64) -> i64 {
  return @shift_left(left,right);
};

__shift_right__ :: (left:u8,right:u8) -> u8 {
  return @shift_right(left,right);
};

__shift_right__ :: (left:i8,right:i8) -> i8 {
  return @shift_right(left,right);
};

__shift_right__ :: (left:u16,right:u16) -> u16 {
  return @shift_right(left,right);
};

__shift_right__ :: (left:i16,right:i16) -> i16 {
  return @shift_right(left,right);
};

__shift_right__ :: (left:u32,right:u32) -> u32 {
  return @shift_right(left,right);
};

__shift_right__ :: (left:i32,right:i32) -> i32 {
  return @shift_right(left,right);
};

__shift_right__ :: (left:u64,right:u64) -> u64 {
  return @shift_right(left,right);
};

__shift_right__ :: (left:i64,right:i64) -> i64 {
  return @shift_right(left,right);
};


//---------------------- Pointers ------------------------

__sum__ :: (left:*anytype,right:i64) -> (@type_of(left)) {
  return @add(left,right);
};

__sub__ :: (left:*anytype,right:i64) -> (@type_of(left)) {
  return @sub(left,right);
};

__get_item__ :: (left:*anytype,index:i64) -> (@type_of(left.*)) {
  return (left + index).*;
};

__set_item__ :: (left:*anytype,index:i64,item:@type_of(left.*)) -> (@type_of(left.*)) {
  return (left + index).* = item;
};

__get_item_address__ :: (left:*anytype,index:i64) -> (@type_of(left)) {
  return (left + index);
};