All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.deephaven.qst.column.header.ColumnHeaders3 Maven / Gradle / Ivy

There is a newer version: 0.37.4
Show newest version
//
// Copyright (c) 2016-2024 Deephaven Data Labs and Patent Pending
//
package io.deephaven.qst.column.header;

import io.deephaven.annotations.SimpleStyle;
import io.deephaven.qst.array.Array;
import io.deephaven.qst.array.ArrayBuilder;
import io.deephaven.qst.column.Column;
import io.deephaven.qst.table.NewTable;
import io.deephaven.qst.table.TableHeader;
import io.deephaven.qst.type.Type;
import org.immutables.value.Value.Immutable;
import org.immutables.value.Value.Parameter;

import java.util.Iterator;
import java.util.stream.Stream;

import static io.deephaven.qst.column.header.ColumnHeader.DEFAULT_BUILDER_INITIAL_CAPACITY;

@Immutable
@SimpleStyle
public abstract class ColumnHeaders3 implements TableHeader.Buildable {

    @Parameter
    public abstract ColumnHeader header3();

    @Parameter
    public abstract ColumnHeaders2 others();

    public final  ColumnHeaders4 header(String name, Class clazz) {
        return header(ColumnHeader.of(name, clazz));
    }

    public final  ColumnHeaders4 header(String name, Type type) {
        return header(ColumnHeader.of(name, type));
    }

    public final  ColumnHeaders4 header(ColumnHeader header) {
        return ImmutableColumnHeaders4.of(header, this);
    }

    public final Rows start(int initialCapacity) {
        return new Rows(initialCapacity);
    }

    public final Rows row(T1 a, T2 b, T3 c) {
        return start(DEFAULT_BUILDER_INITIAL_CAPACITY).row(a, b, c);
    }

    public class Rows implements NewTable.Buildable {
        private final ColumnHeaders2.Rows others;
        private final ArrayBuilder builder;

        Rows(int initialCapacity) {
            others = others().start(initialCapacity);
            builder = Array.builder(header3().componentType(), initialCapacity);
        }

        public final Rows row(T1 a, T2 b, T3 c) {
            others.row(a, b);
            builder.add(c);
            return this;
        }

        final Stream> stream() {
            Column thisColumn = Column.of(header3().name(), builder.build());
            return Stream.concat(others.stream(), Stream.of(thisColumn));
        }

        @Override
        public final Iterator> iterator() {
            return stream().iterator();
        }
    }

    final Stream> stream() {
        return Stream.concat(others().stream(), Stream.of(header3()));
    }

    @Override
    public final Iterator> iterator() {
        return stream().iterator();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy