コード例 #1
0
        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));
        }
コード例 #2
0
        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);
            }
        }