Programming Language

Nocter

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

/development/std/str/owned.nct

owned.nct

//! Text operations that materialize independently owned results.

see ./index.nct
see ./search.nct
see ./views.nct

use /string.String
use /vec.Vec

func split(text: &str, separator: &str): Vec<String>! {
    if separator.len() == 0 { return empty_separator_error() }
    var result: Vec<String> = Vec.empty()
    var part_start: usize = 0
    while part_start <= text.len() {
        let separator_start: usize = find_from(text, separator, part_start) otherwise {
            result.push(String.copy(str_subview_unchecked(
                text,
                part_start,
                text.len() - part_start,
            )))
            break
        }
        result.push(String.copy(str_subview_unchecked(
            text,
            part_start,
            separator_start - part_start,
        )))
        part_start = separator_start + separator.len()
    }
    return move result
}