package com.e2u.tree; import com.e2u.bit.BitUtil; public class CGFileHeader { public static final int HEADER_SIZE = 16 + 16 + 16 + 4 * 256; //1072 in bytes public static final int FILE_NAME_SIZE_BY_BYTE = 32; public static final int WEIGHT_TABLE_SIZE_BY_INT = 256; public int headerName; public int headerVer; public int originalLength; public int contentOffset; //32 bytes public byte[] originalFileName; //256 public int[] weightTable; public CGFileHeader() { headerName = 0x54434C47; //GLCT headerVer = 0x01000000; //1.0.0.0 contentOffset = HEADER_SIZE; //Default originalFileName = new byte[FILE_NAME_SIZE_BY_BYTE]; for(int i = 0; i < FILE_NAME_SIZE_BY_BYTE; i++) { originalFileName[i] = 0; } weightTable = new int[WEIGHT_TABLE_SIZE_BY_INT]; } public CGFileHeader(byte[] in, int offset) { originalFileName = new byte[FILE_NAME_SIZE_BY_BYTE]; weightTable = new int[WEIGHT_TABLE_SIZE_BY_INT]; headerName = BitUtil.constructInt(in, offset); offset += 4; headerVer = BitUtil.constructInt(in, offset); offset += 4; originalLength = BitUtil.constructInt(in, offset); offset += 4; contentOffset = BitUtil.constructInt(in, offset); offset += 4; for(int i = 0; i < FILE_NAME_SIZE_BY_BYTE; i++) { originalFileName[i] = in[offset + i]; } offset += FILE_NAME_SIZE_BY_BYTE; for(int i = 0; i < WEIGHT_TABLE_SIZE_BY_INT; i++) { weightTable[i] = BitUtil.constructInt(in, offset); offset += 4; } } public byte[] getBytes() { byte[] result = new byte[HEADER_SIZE]; int offset = 0; BitUtil.toByte(result, offset, headerName); offset += 4; BitUtil.toByte(result, offset, headerVer); offset += 4; BitUtil.toByte(result, offset, originalLength); offset += 4; BitUtil.toByte(result, offset, contentOffset); offset += 4; for(int i = 0; i < FILE_NAME_SIZE_BY_BYTE; i++) { result[offset + i] = originalFileName[i]; } offset += FILE_NAME_SIZE_BY_BYTE; for(int i = 0; i < WEIGHT_TABLE_SIZE_BY_INT; i++) { BitUtil.toByte(result, offset, weightTable[i]); offset += 4; } return result; } }