// std.string (Ny) - Phase15 MVP // Usage: // include "apps/std/string.hako" // StdStringNy.string_length("abc"), StdStringNy.string_concat("a","b"), // StdStringNy.string_slice("hello",1,4), StdStringNy.string_index_of("banana","na"), StdStringNy.string_equals("x","y") // Notes: // - ASCII only; slice clamps [start,end) // - index_of returns -1 when not found // - Pure functions; no side effects static box StdStringNy { // Return length of string s (Integer) string_length(s) { if s == null { return 0 } return s.length() } // Concatenate two strings string_concat(a, b) { return a.concat(b) } // Slice string in [start, end) with simple clamping string_slice(s, start, end) { if s == null { return "" } return s.substring(start, end) } // Return first index of substring (or -1) string_index_of(s, sub) { if s == null { return -1 } if sub == null { return 0 } local n, m, i n = s.length() m = sub.length() if m == 0 { return 0 } if n < m { return -1 } i = 0 loop (i <= (n - m)) { // Compare window if s.substring(i, i + m) == sub { return i } i = i + 1 } return -1 } // Return 1 if equal else 0 (Integer) string_equals(a, b) { if a == b { return 1 } return 0 } }