You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
As I saw in the current core, a concrete VecView can be obtained by op_as_view(start_including, end_excluding) operator. Although not yet implemented, similar viewing logic may be applied to other linear containers like Array or List.
I suggest adding View[T] built-in trait as an abstraction of a minimum subset of methods for any View. A suggested definition is:
/// View[T] is a logical contiguous sequence of T with random access by index. (Not guaranteed to be contiguous in memory)
pub trait[T] View[T] { // <- not supported by compiler yet
length[T](Self) -> Int
op_get[T](Self, Int) -> T
as_iter[T](Self) -> Iter[T]
}
This allows Char, String and Bytes related methods work for various data sources, without bloating the numbers of methods at the same time.
// before
let a = Buffer::make(256);
a.write_string("DEV")
a.write_sub_string("ELOPEZZZ", 0, 5)
a.write_char('R')
println(a.to_string()) // -> DEVELOPER
// after - assuming exists:
// fn write[Char](self: Buffer, view: impl View[Char]) -> Unit
// fn view(self: Char) -> impl View[Char]
// fn view(self: String) -> impl View[Char]
// fn subview(self: String, start: Int, end: Int) -> impl View[Char]
let a = Buffer::make(256);
a.write("DEV".view())
a.write("ELOPEZZZ".subview(0, 1))
a.write('R'.view())
println(a.to_string()) // -> DEVELOPER
// before
let moon = Bytes::of_string("MOON")
let mo = Bytes::[0x6d, 0x00, 0x6f, 0x00, 0x7a, 0x00]
moon.blit(0, mo, 0, 4)
moon.blit_from_string(4, "on", 0, 2)
println(moon.to_string()) // -> moon
// after - assuming exists:
// fn blit(self: Bytes, source: impl View[Byte]) -> Unit
// fn op_as_view(self: Bytes, start: Int, end: Int) -> impl View[Byte]
// fn view_bytes(self: String) -> impl View[Byte]
let moon = Bytes::of_string("MOON")
let mo = Bytes::[0x6d, 0x00, 0x6f, 0x00, 0x7a, 0x00]
moon.blit(0, mo[0..4])
moon.blit(4, "on".view_bytes())
println(moon.to_string()) // -> moon
This feature cannot be completed by a simple PR, since it requires generic traits to be implemented by the compiler first.
This request is directly inspired by the std::slice of Rust language. Very rough, polishment & discussion required.
The text was updated successfully, but these errors were encountered:
As I saw in the current
core
, a concreteVecView
can be obtained byop_as_view(start_including, end_excluding)
operator. Although not yet implemented, similar viewing logic may be applied to other linear containers likeArray
orList
.I suggest adding
View[T]
built-in trait as an abstraction of a minimum subset of methods for anyView
. A suggested definition is:This allows
Char
,String
andBytes
related methods work for various data sources, without bloating the numbers of methods at the same time.This feature cannot be completed by a simple PR, since it requires generic traits to be implemented by the compiler first.
This request is directly inspired by the
std::slice
of Rust language. Very rough, polishment & discussion required.The text was updated successfully, but these errors were encountered: