shape-runtime 0.2.0

Bytecode compiler, builtins, and runtime infrastructure for Shape
Documentation
/// @module std::core::table_iterable
/// Iterable implementation for Table<T>.
///
/// Makes Table<T> a first-class Iterable, enabling collection operations
/// on in-memory tables. Delegates to Table's native methods where available.

impl Iterable for Table {
    method findIndex(predicate) {
        let i = 0;
        let rows = self.map(|row| row);
        while i < rows.len() {
            if predicate(rows[i]) {
                return i
            }
            i = i + 1;
        }
        -1
    }

    method includes(value) -> bool {
        self.some(|row| row == value)
    }

    method zip(other) {
        let self_rows = self.map(|row| row);
        let other_rows = other.map(|row| row);
        let n = if self_rows.len() < other_rows.len() { self_rows.len() } else { other_rows.len() };
        let result = [];
        let i = 0;
        while i < n {
            result.push([self_rows[i], other_rows[i]]);
            i = i + 1;
        }
        result
    }

    method chunk(size) {
        let rows = self.map(|row| row);
        let result = [];
        let i = 0;
        while i < rows.len() {
            result.push(rows.slice(i, i + size));
            i = i + size;
        }
        result
    }

    method unique() {
        let rows = self.map(|row| row);
        rows.unique()
    }

    method flatten() {
        let rows = self.map(|row| row);
        rows.flatten()
    }

    method slice(start, end) {
        let rows = self.map(|row| row);
        rows.slice(start, end)
    }

    method join(separator) {
        let rows = self.map(|row| row.toString());
        rows.join(separator)
    }

    method sortBy(key_fn) {
        self.orderBy(key_fn, "asc")
    }

    method take(n) {
        self.head(n)
    }

    method skip(n) {
        self.tail(self.count() - n)
    }

    method enumerate() {
        let rows = self.map(|row| row);
        let result = [];
        let i = 0;
        while i < rows.len() {
            result.push({ index: i, value: rows[i] });
            i = i + 1;
        }
        result
    }
}