public IVector combine(IVector vector) { BasicSymbolVector v = (BasicSymbolVector)vector; int newSize = this.rows() + v.rows(); int[] newValue = new int[newSize]; if (v.@base == @base) { values.AddRange(((BasicSymbolVector)vector).getdataArray()); } else { SymbolBase vBase = v.@base; int length = vBase.size(); int[] mapper = new int[length]; for (int i = 0; i < length; ++i) { mapper[i] = @base.find(vBase.getSymbol(i), true); } length = v.rows(); List <int> vValues = v.getdataArray(); int baseRow = this.rows(); for (int i = 0; i < length; ++i) { newValue[baseRow + i] = mapper[vValues[i]]; } } return(new BasicSymbolVector(@base, newValue, false)); }
public BasicTable(ExtendedDataInput @in) { int rows = @in.readInt(); int cols = @in.readInt(); _tableName = @in.readString(); //read column names for (int i = 0; i < cols; ++i) { string name = @in.readString(); name2index_[name] = name2index_.Count; names_.Add(name); } BasicEntityFactory factory = new BasicEntityFactory(); VectorDecompressor decompressor = null; SymbolBaseCollection collection = null; //read columns for (int i = 0; i < cols; ++i) { short flag = @in.readShort(); int form = flag >> 8; int type = flag & 0xff; bool extended = type >= 128; if (type >= 128) { type -= 128; } DATA_FORM df = (DATA_FORM)form; DATA_TYPE dt = (DATA_TYPE)type; if (df != DATA_FORM.DF_VECTOR) { throw new IOException("Invalid form for column [" + names_[i] + "] for table " + _tableName); } IVector vector; if (dt == DATA_TYPE.DT_SYMBOL && extended) { if (collection == null) { collection = new SymbolBaseCollection(); } vector = new BasicSymbolVector(df, @in, collection); } else if (dt == DATA_TYPE.DT_COMPRESS) { if (decompressor == null) { decompressor = new VectorDecompressor(); } vector = decompressor.Decompress(factory, @in, false, true); } else { vector = (IVector)factory.createEntity(df, dt, @in, extended); } if (vector.rows() != rows && vector.rows() != 1) { int tmp = vector.rows(); throw new IOException("The number of rows for column " + names_[i] + " is not consistent with other columns"); } columns_.Add(vector); } }