/* * void addData2(byte[] code, int floor, byte[] data, int offset, int data_size) * { * if (code[0] == (byte)'^') * return; * // if (strcmp(code, "BHS") == 0) * // { * // int k = 0; * // } * int i, j; * totalSize += data_size; * * int candle_cnt = data_size / NET_CANDLE_SIZE; * * int candleSize = CANDLE_SIZE; * int size = candle_cnt * candleSize; * * // if (strlen(code) > 3) * // { * // int k = 0; * // } * * int off = 0; * int[] offsets = { 0 }; * byte[] p0 = seekTo(code, offsets); * off = offsets[0]; * * int p1 = off+8; * * if (p0 == null) * return; * * int old_candle_cnt = Utils.readInt(p0, off); * // move backward memory in buff * int buffSize = MAX_CANDLES * candleSize; * int size2Move = candleSize * old_candle_cnt; * int remain = buffSize - size; * if (remain < size2Move) * size2Move = remain; * * int total_candle_save = 0; * if (size2Move > 0) * { * int end = size + size2Move; * for (i = 0; i < size2Move; i++) * p0[p1 + i + size] = p0[p1 + i]; // copy to the end * //memmove(p1 + size, p1, size2Move); * total_candle_save = size2Move / candleSize; * } * // if network data is too large, skip some first candles * int candleAccept = candle_cnt; * if (candleAccept > MAX_CANDLES) * candleAccept = MAX_CANDLES; * int skipCandle = candle_cnt - candleAccept; * * int c0 = 0; * int postP = (candleAccept - 1) * candleSize; * * int tmp = 0; * * j = 0; * if (skipCandle > 0) * j = skipCandle * NET_CANDLE_SIZE; * * stCandle c = new stCandle(); * * for (i = skipCandle; i < candle_cnt; i++) * { * total_candle_save++; * c0 = p1 + postP; // move backward * postP -= candleSize; * * c.init(p0, c0); * * int open = Utils.readInt(data, j) / 100; j += 4; * int close = Utils.readInt(data, j) / 100; j += 4; * int highest = Utils.readInt(data, j) / 100; j += 4; * int lowest = Utils.readInt(data, j) / 100; j += 4; * //j += 4;//floor = di.readInt()/100; j += 4; * int reference = Utils.readInt(data, j) / 100; j += 4; * * int ce = Utils.readInt(data, j) / 100; j += 4; * * int volume = Utils.readInt(data, j); j += 4; * int date = Utils.readInt(data, j); j += 4; * // correct data: * if (open != 0) tmp = open; * if (close != 0 && tmp == 0) tmp = close; * if (highest != 0 && tmp == 0) tmp = highest; * if (lowest != 0 && tmp == 0) tmp = lowest; * if (reference != 0 && tmp == 0) tmp = reference; * if (ce != 0 && tmp == 0) tmp = ce; * * if (open == 0) open = tmp; * if (close == 0) close = tmp; * if (highest == 0) highest = tmp; * if (lowest == 0) lowest = tmp; * if (reference == 0) reference = close; * * if (ce == 0) ce = tmp; * * c.setOpen(open); * c.setClose(close); * c.setCe(ce); * c.setRef(reference); * c.setVolume(volume); * c.setDate(date); * c.setHighest(highest); * c.setLowest(lowest); * * if (tmp == 0) // reject bad candle * { * i--; * candle_cnt--; * } * } * * Utils.writeInt(p0, off+0, total_candle_save); * Utils.writeInt(p0, off+4, floor); * } */ // addDataToShare for INDICES only // adding data format: int:open, int:close, int highest, int lowest, int floor, int ref, int ce, int volume, int date // 36bytes for each candle // first candle is earlies /* * void addDataToShare(Share s, byte[] data, int offset, int data_size) * { * int candle_cnt = data_size / NET_CANDLE_SIZE; * xDataInput di = mDI; * di.bind(data, offset, data_size); * * int tmp = 0; * stCandle tmpCandle; * * int lastDate = s.getLastCandleDate(); * * for (int i = 0; i < candle_cnt; i++) * { * int open = di.readInt() / 10; * int close = di.readInt() / 10; * int highest = di.readInt() / 10; * int lowest = di.readInt() / 10; * int reference = di.readInt() / 10; * * int ce = di.readInt() / 10; * * int volume = di.readInt(); * int date = di.readInt(); * // correct data: * if (open != 0) tmp = open; * if (close != 0 && tmp == 0) tmp = close; * if (highest != 0 && tmp == 0) tmp = highest; * if (lowest != 0 && tmp == 0) tmp = lowest; * if (reference != 0 && tmp == 0) tmp = reference; * if (ce != 0 && tmp == 0) tmp = ce; * * if (open == 0) open = tmp; * if (close == 0) close = tmp; * if (highest == 0) highest = tmp; * if (lowest == 0) lowest = tmp; * if (reference == 0) reference = tmp; * * if (ce == 0) ce = tmp; * if (tmp == 0) // reject bad candle * { * i--; * candle_cnt--; * } * * if (lastDate != 0) * { * if (date < lastDate) * continue; // skip old candle * else * lastDate = 0; * } * * s.addMoreCandle(open, close, reference, highest, lowest, volume, date); * } * } */ byte[] seekTo(byte[] code, int[] out_offset) { if (mBuffer != null) { // int i = 0; int off = 0; int cnt = mShareCnt; // share count off = HEADER_OFFSET; // skip file header xDataInput di = mDI; di.bind(mBuffer, off, mShareCnt * (SHARE_CODE_LENGTH + 4)); for (int i = 0; i < cnt; i++) { int di_off = di.getCurrentOffset(); bool equal = Utils.strcmp(mBuffer, di_off, code, 0, Share.SHARE_CODE_LENGTH); if (equal) { di.skip(Share.SHARE_CODE_LENGTH); int offset = di.readInt(); out_offset[0] = mDataOffset + offset; return(mBuffer); } di.skip(SHARE_CODE_LENGTH + 4); } } out_offset[0] = 0; // not found, for (int i = 0; i < mNewShareIDs.size(); i++) { byte[] c = (byte[])mNewShareIDs.elementAt(i); if (Utils.strcmp(code, 0, c, 0, Share.SHARE_CODE_LENGTH)) { return((byte[])mNewShares.elementAt(i)); } } byte[] newCode = new byte[Share.SHARE_CODE_LENGTH + 10]; Utils.strcpy(newCode, code); newCode[Share.SHARE_CODE_LENGTH - 1] = 0; mNewShareIDs.addElement(newCode); byte[] data = new byte[4 + 4 + MAX_CANDLES * CANDLE_SIZE]; // candle_cnt + floor + dataOfCandle // candle count = 0 Utils.writeInt(data, 0, 0); mNewShares.addElement(data); return(data); }
// get a resource from the compressed chunks byte[] getResource(string filePath, int[] size) { if (mData == null) { return(null); } size[0] = 0; // looking for the position of the item int pos = -1; int itemSize = 16 * 4; // 16 integers for each byte[] s0 = new byte[filePath.Length]; int i = 0; int n = 0; for (i = 0; i < filePath.Length; i++) { s0[i] = (byte)filePath[i]; } for (i = 0; i < mItemCnt; i++) { n = i * itemSize; //const char* s = (const char*)&mHeader[i*itemSize]; if (utils.Utils.strcmp(s0, 0, mHeader, n, s0.Length)) { pos = n; break; } } if (pos == -1) { return(null); } pos += (14 * 4); // 14*4 is the length of filename n = Utils.convertBigIntToLittleInt(Utils.readInt(mHeader, pos)); int flag = n >> 24; int offset = (n & 0x00FFFFFF) + 8; n = Utils.convertBigIntToLittleInt(Utils.readInt(mHeader, pos + 4)); int dataLen = n;// mHeader[pos + 1]; // calc offset in the real resource file offset = offset + mItemCnt * 64 + 4; // offset + header_len + 4(number_of_items) if (offset >= mData.size()) { return(null); } mData.reset(); mData.skip(offset); //===================================================== // if data is compressed, then data has the format: // compressed_data | actual_size:4 //===================================================== byte[] pData = null; int outSize = 0; // if data is compressed if (flag != 0) // data is compressed { } else { pData = new byte[dataLen]; mData.read(pData, 0, dataLen); // data is in raw format, return now size[0] = dataLen; return(pData); } return(null); }
/* * public void setRefPrice(xDataInput di) { * if (true) // invalid method and not used anymore * return; * int floor = di.readInt(); * int cnt = di.readInt(); * if (cnt < 0) { * return; * } * if (cnt > 5000) { * return; * } * * if (floor < 1 || floor > 2) { * return; * } * * stPriceboardState.alloc_buffer(floor, cnt); * * mHasRefvalue = true; * int j = 0; * //==================================================================== * byte[] data = di.getBytes(); * int off = di.getCurrentOffset(); * * for (int i = 0; i < cnt; i++) { * j = 0; * stPriceboardState p = stPriceboardState.seekPriceboard(floor, data, off); * // code * p.setRef(data, off); * off += 8 + 3 * 4; * } * } * */ /* * public void setZeroPriceboard(xDataInput di) * { * String nextfile = di.readUTF(); * //nextfile = "0"; // CHEAT * * String date = di.readUTF(); * mDate = parseDate(date); * * int floor = di.readInt(); * int max = 10; * if (floor < 1 || floor > max) * { * return; * } * * mNextfile[floor - 1] = nextfile; * * //=====================index=================== * stPriceboardStateIndex index = getPriceboardIndexOfMarket(floor); * int oldStatus = index.market_status; * index.current_point = di.readInt()/100.0f; * index.changed_point = di.readInt()/100.0f; * index.changed_percent = di.readInt(); * index.total_volume = di.readInt(); * index.inc_cnt = di.readInt(); * index.ce_cnt = di.readInt(); * index.dec_cnt = di.readInt(); * index.floor_cnt = di.readInt(); * index.ref_num = di.readInt(); * index.totalGTGD = di.readInt() / 10; // dv 1tr * index.market_status = di.readInt(); * index.update_time = date; * index.reference = index.current_point - index.changed_point; * * index.status_changed = oldStatus != index.market_status ? true : false; * //=====================end of index=================== * * int cnt = di.readInt(); * if (cnt < 0 || cnt > 5000) * { * return; * } * * byte[] data = di.getBytes(); * * int j = 0; * for (int i = 0; i < cnt; i++) * { * stPriceboardState p = getPriceboard(floor, data, di.getCurrentOffset()); * * //Utils.trace("=====" + c0 + c1 + c2); * * if (p == null) * { * di.skip(Share.SHARE_CODE_LENGTH + 54); * continue; * } * di.skip(Share.SHARE_CODE_LENGTH); * * p.setZero(di); * } * } */ public void setZeroPriceboard2016(xDataInput di) { String nextfile = di.readUTF(); //nextfile = "0"; // CHEAT String date = di.readUTF(); mDate = parseDate(date); int floor = di.readInt(); int max = 10; if (floor < 1 || floor > max) { return; } mNextfile[floor - 1] = nextfile; //=====================index=================== stPriceboardStateIndex index = getPriceboardIndexOfMarket(floor); int oldStatus = index.market_status; index.current_point = di.readInt() / 100.0f; index.changed_point = di.readInt() / 100.0f; index.changed_percent = di.readInt(); index.total_volume = di.readInt(); index.inc_cnt = di.readInt(); index.ce_cnt = di.readInt(); index.dec_cnt = di.readInt(); index.floor_cnt = di.readInt(); index.ref_num = di.readInt(); index.totalGTGD = di.readInt() / 10; // dv 1tr index.market_status = di.readInt(); index.update_time = date; index.reference = index.current_point - index.changed_point; index.status_changed = oldStatus != index.market_status ? true : false; //=====================end of index=================== int cnt = di.readInt(); if (cnt < 0 || cnt > 5000) { return; } byte[] data = di.getBytes(); int j = 0; for (int i = 0; i < cnt; i++) { //stPriceboardState p = getPriceboard(floor, data, di.getCurrentOffset()); String scode = Utils.bytesNullTerminatedToString(data, di.getCurrentOffset(), 20); stPriceboardState p = getPriceboard(scode); if (p == null) { di.skip(Share.SHARE_CODE_LENGTH + 72); continue; } p.code = scode; //Utils.trace("=====" + c0 + c1 + c2); di.skip(Share.SHARE_CODE_LENGTH); p.setZero(di); } }