mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-05 23:28:48 +00:00
Add optional sep parameter to fmt.*print and fmt.*println procedures
This commit is contained in:
+24
-24
@@ -61,18 +61,18 @@ register_user_formatter :: proc(id: typeid, formatter: User_Formatter) -> Regist
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fprint :: proc(fd: os.Handle, args: ..any) -> int {
|
fprint :: proc(fd: os.Handle, args: ..any, sep := " ") -> int {
|
||||||
data: [DEFAULT_BUFFER_SIZE]byte;
|
data: [DEFAULT_BUFFER_SIZE]byte;
|
||||||
buf := strings.builder_from_slice(data[:]);
|
buf := strings.builder_from_slice(data[:]);
|
||||||
res := sbprint(&buf, ..args);
|
res := sbprint(buf=&buf, args=args, sep=sep);
|
||||||
os.write_string(fd, res);
|
os.write_string(fd, res);
|
||||||
return len(res);
|
return len(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintln :: proc(fd: os.Handle, args: ..any) -> int {
|
fprintln :: proc(fd: os.Handle, args: ..any, sep := " ") -> int {
|
||||||
data: [DEFAULT_BUFFER_SIZE]byte;
|
data: [DEFAULT_BUFFER_SIZE]byte;
|
||||||
buf := strings.builder_from_slice(data[:]);
|
buf := strings.builder_from_slice(data[:]);
|
||||||
res := sbprintln(&buf, ..args);
|
res := sbprintln(buf=&buf, args=args, sep=sep);
|
||||||
os.write_string(fd, res);
|
os.write_string(fd, res);
|
||||||
return len(res);
|
return len(res);
|
||||||
}
|
}
|
||||||
@@ -86,12 +86,12 @@ fprintf :: proc(fd: os.Handle, fmt: string, args: ..any) -> int {
|
|||||||
|
|
||||||
|
|
||||||
// print* procedures return the number of bytes written
|
// print* procedures return the number of bytes written
|
||||||
print :: proc(args: ..any) -> int { return fprint(os.stdout, ..args); }
|
print :: proc(args: ..any, sep := " ") -> int { return fprint(fd=os.stdout, args=args, sep=sep); }
|
||||||
println :: proc(args: ..any) -> int { return fprintln(os.stdout, ..args); }
|
println :: proc(args: ..any, sep := " ") -> int { return fprintln(fd=os.stdout, args=args, sep=sep); }
|
||||||
printf :: proc(fmt: string, args: ..any) -> int { return fprintf(os.stdout, fmt, ..args); }
|
printf :: proc(fmt: string, args: ..any) -> int { return fprintf(os.stdout, fmt, ..args); }
|
||||||
|
|
||||||
eprint :: proc(args: ..any) -> int { return fprint(os.stderr, ..args); }
|
eprint :: proc(args: ..any, sep := " ") -> int { return fprint(fd=os.stderr, args=args, sep=sep); }
|
||||||
eprintln :: proc(args: ..any) -> int { return fprintln(os.stderr, ..args); }
|
eprintln :: proc(args: ..any, sep := " ") -> int { return fprintln(fd=os.stderr, args=args, sep=sep); }
|
||||||
eprintf :: proc(fmt: string, args: ..any) -> int { return fprintf(os.stderr, fmt, ..args); }
|
eprintf :: proc(fmt: string, args: ..any) -> int { return fprintf(os.stderr, fmt, ..args); }
|
||||||
|
|
||||||
|
|
||||||
@@ -102,14 +102,14 @@ eprintf :: proc(fmt: string, args: ..any) -> int { return fprintf(os.stderr, fm
|
|||||||
|
|
||||||
// aprint* procedures return a string that was allocated with the current context
|
// aprint* procedures return a string that was allocated with the current context
|
||||||
// They must be freed accordingly
|
// They must be freed accordingly
|
||||||
aprint :: proc(args: ..any) -> string {
|
aprint :: proc(args: ..any, sep := " ") -> string {
|
||||||
str := strings.make_builder();
|
str := strings.make_builder();
|
||||||
sbprint(&str, ..args);
|
sbprint(buf=&str, args=args, sep=sep);
|
||||||
return strings.to_string(str);
|
return strings.to_string(str);
|
||||||
}
|
}
|
||||||
aprintln :: proc(args: ..any) -> string {
|
aprintln :: proc(args: ..any, sep := " ") -> string {
|
||||||
str := strings.make_builder();
|
str := strings.make_builder();
|
||||||
sbprintln(&str, ..args);
|
sbprintln(buf=&str, args=args, sep=sep);
|
||||||
return strings.to_string(str);
|
return strings.to_string(str);
|
||||||
}
|
}
|
||||||
aprintf :: proc(fmt: string, args: ..any) -> string {
|
aprintf :: proc(fmt: string, args: ..any) -> string {
|
||||||
@@ -120,14 +120,14 @@ aprintf :: proc(fmt: string, args: ..any) -> string {
|
|||||||
|
|
||||||
|
|
||||||
// tprint* procedures return a string that was allocated with the current context's temporary allocator
|
// tprint* procedures return a string that was allocated with the current context's temporary allocator
|
||||||
tprint :: proc(args: ..any) -> string {
|
tprint :: proc(args: ..any, sep := " ") -> string {
|
||||||
str := strings.make_builder(context.temp_allocator);
|
str := strings.make_builder(context.temp_allocator);
|
||||||
sbprint(&str, ..args);
|
sbprint(buf=&str, args=args, sep=sep);
|
||||||
return strings.to_string(str);
|
return strings.to_string(str);
|
||||||
}
|
}
|
||||||
tprintln :: proc(args: ..any) -> string {
|
tprintln :: proc(args: ..any, sep := " ") -> string {
|
||||||
str := strings.make_builder(context.temp_allocator);
|
str := strings.make_builder(context.temp_allocator);
|
||||||
sbprintln(&str, ..args);
|
sbprintln(buf=&str, args=args, sep=sep);
|
||||||
return strings.to_string(str);
|
return strings.to_string(str);
|
||||||
}
|
}
|
||||||
tprintf :: proc(fmt: string, args: ..any) -> string {
|
tprintf :: proc(fmt: string, args: ..any) -> string {
|
||||||
@@ -138,13 +138,13 @@ tprintf :: proc(fmt: string, args: ..any) -> string {
|
|||||||
|
|
||||||
|
|
||||||
// bprint* procedures return a string using a buffer from an array
|
// bprint* procedures return a string using a buffer from an array
|
||||||
bprint :: proc(buf: []byte, args: ..any) -> string {
|
bprint :: proc(buf: []byte, args: ..any, sep := " ") -> string {
|
||||||
sb := strings.builder_from_slice(buf[0:len(buf)]);
|
sb := strings.builder_from_slice(buf[0:len(buf)]);
|
||||||
return sbprint(&sb, ..args);
|
return sbprint(buf=&sb, args=args, sep=sep);
|
||||||
}
|
}
|
||||||
bprintln :: proc(buf: []byte, args: ..any) -> string {
|
bprintln :: proc(buf: []byte, args: ..any, sep := " ") -> string {
|
||||||
sb := strings.builder_from_slice(buf[0:len(buf)]);
|
sb := strings.builder_from_slice(buf[0:len(buf)]);
|
||||||
return sbprintln(&sb, ..args);
|
return sbprintln(buf=&sb, args=args, sep=sep);
|
||||||
}
|
}
|
||||||
bprintf :: proc(buf: []byte, fmt: string, args: ..any) -> string {
|
bprintf :: proc(buf: []byte, fmt: string, args: ..any) -> string {
|
||||||
sb := strings.builder_from_slice(buf[0:len(buf)]);
|
sb := strings.builder_from_slice(buf[0:len(buf)]);
|
||||||
@@ -182,7 +182,7 @@ fprint_type :: proc(fd: os.Handle, info: ^runtime.Type_Info) {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
sbprint :: proc(buf: ^strings.Builder, args: ..any) -> string {
|
sbprint :: proc(buf: ^strings.Builder, args: ..any, sep := " ") -> string {
|
||||||
fi: Info;
|
fi: Info;
|
||||||
fi.buf = buf;
|
fi.buf = buf;
|
||||||
|
|
||||||
@@ -200,19 +200,19 @@ sbprint :: proc(buf: ^strings.Builder, args: ..any) -> string {
|
|||||||
// and were expecting `*print` to be the same `*println` except for the added newline
|
// and were expecting `*print` to be the same `*println` except for the added newline
|
||||||
// so I am going to keep the same behaviour as `*println` for `*print`
|
// so I am going to keep the same behaviour as `*println` for `*print`
|
||||||
for _, i in args {
|
for _, i in args {
|
||||||
if i > 0 do strings.write_byte(buf, ' ');
|
if i > 0 do strings.write_string(buf, sep);
|
||||||
|
|
||||||
fmt_value(&fi, args[i], 'v');
|
fmt_value(&fi, args[i], 'v');
|
||||||
}
|
}
|
||||||
return strings.to_string(buf^);
|
return strings.to_string(buf^);
|
||||||
}
|
}
|
||||||
|
|
||||||
sbprintln :: proc(buf: ^strings.Builder, args: ..any) -> string {
|
sbprintln :: proc(buf: ^strings.Builder, args: ..any, sep := " ") -> string {
|
||||||
fi: Info;
|
fi: Info;
|
||||||
fi.buf = buf;
|
fi.buf = buf;
|
||||||
|
|
||||||
for _, i in args {
|
for _, i in args {
|
||||||
if i > 0 do strings.write_byte(buf, ' ');
|
if i > 0 do strings.write_string(buf, sep);
|
||||||
|
|
||||||
fmt_value(&fi, args[i], 'v');
|
fmt_value(&fi, args[i], 'v');
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user