Programming Language

Nocter

A self-contained systems language built around simplicity, encapsulation, and foolproof design.

/development/std/fmt/implementations.nct

implementations.nct

see ./index.nct
see ./formatting.nct
use /ptr.from_ref
use /internal/ptr.slice_from_raw_parts_value
use /string.String

//! Standard Format implementations for compiler built-in and owned text types.

instance str {
    method &self.format_into(output: &+String): void {
        append_str(output, self)
        return
    }
}

instance String {
    method &self.format_into(output: &+String): void {
        append_string(output, self)
        return
    }
}

instance bool {
    method &self.format_into(output: &+String): void {
        append_bool(output, copy_value(self))
        return
    }
}

instance i8 {
    method &self.format_into(output: &+String): void {
        append_i8(output, copy_value(self))
        return
    }
}

instance i16 {
    method &self.format_into(output: &+String): void {
        append_i16(output, copy_value(self))
        return
    }
}

instance i32 {
    method &self.format_into(output: &+String): void {
        append_i32(output, copy_value(self))
        return
    }
}

instance i64 {
    method &self.format_into(output: &+String): void {
        append_i64(output, copy_value(self))
        return
    }
}

instance isize {
    method &self.format_into(output: &+String): void {
        append_isize(output, copy_value(self))
        return
    }
}

instance u8 {
    method &self.format_into(output: &+String): void {
        append_u8(output, copy_value(self))
        return
    }
}

instance u16 {
    method &self.format_into(output: &+String): void {
        append_u16(output, copy_value(self))
        return
    }
}

instance u32 {
    method &self.format_into(output: &+String): void {
        append_u32(output, copy_value(self))
        return
    }
}

instance u64 {
    method &self.format_into(output: &+String): void {
        append_u64(output, copy_value(self))
        return
    }
}

instance usize {
    method &self.format_into(output: &+String): void {
        append_usize(output, copy_value(self))
        return
    }
}

func copy_value<T>(value: &T): T where copy T {
    let pointer: *T = from_ref(value)
    let values: &[T] = slice_from_raw_parts_value(pointer, 1)
    return values[0]
}