package org.vitrivr.cineast.core.data;

import java.util.List;

import gnu.trove.list.array.TFloatArrayList;

public class FloatVectorImpl implements FloatVector {

  private TFloatArrayList list;

  public FloatVectorImpl(TFloatArrayList list) {
    this.list = list;
  }

  public FloatVectorImpl(Iterable<Float> iterable) {
    this();
    for (float f : iterable) {
      this.list.add(f);
    }
  }

  public FloatVectorImpl(float[] array) {
    this();
    for (float f : array) {
      this.list.add(f);
    }
  }

  public FloatVectorImpl() {
    this(new TFloatArrayList());
  }

  public FloatVectorImpl(List<Double> list) {
    this();
    for (double d : list) {
      this.list.add((float) d);
    }
  }

  public FloatVectorImpl(short[] array) {
    this();
    for (short s : array) {
      this.list.add(s);
    }
  }

  public FloatVectorImpl(double[] array) {
    this();
    for (double s : array) {
      this.list.add((float) s);
    }
  }

  @Override
  public int getElementCount() {
    return this.list.size();
  }

  @Override
  public float getElement(int num) {
    return this.list.get(num);
  }

  @Override
  public void setElement(int num, float val) {
    this.list.set(num, val);
  }

  public void add(float element) {
    this.list.add(element);
  }

  public String toFeatureString() {
    StringBuffer buf = new StringBuffer();
    buf.append('<');
    for (int i = 0; i < this.list.size(); ++i) {
      buf.append(list.get(i));
      if (i < this.list.size() - 1) {
        buf.append(", ");
      }
    }
    buf.append('>');
    return buf.toString();
  }

  @Override
  public String toString() {
    return this.toFeatureString();
  }
}