diff options
author | Max Horn | 2003-03-08 23:04:24 +0000 |
---|---|---|
committer | Max Horn | 2003-03-08 23:04:24 +0000 |
commit | d8dc1295fbd4f1a80f7a935667bdd073e2467cd0 (patch) | |
tree | a1c4807e7c19082ce6f4377b0845293e73418254 /scumm | |
parent | ce0f95dff2d0a8673491ad9583be77dfcec4e0ec (diff) | |
download | scummvm-rg350-d8dc1295fbd4f1a80f7a935667bdd073e2467cd0.tar.gz scummvm-rg350-d8dc1295fbd4f1a80f7a935667bdd073e2467cd0.tar.bz2 scummvm-rg350-d8dc1295fbd4f1a80f7a935667bdd073e2467cd0.zip |
cleanup / optimization
svn-id: r6779
Diffstat (limited to 'scumm')
-rw-r--r-- | scumm/bundle.cpp | 128 |
1 files changed, 61 insertions, 67 deletions
diff --git a/scumm/bundle.cpp b/scumm/bundle.cpp index 0faf7f3f03..a7e197e4e4 100644 --- a/scumm/bundle.cpp +++ b/scumm/bundle.cpp @@ -24,7 +24,7 @@ #include "bundle.h" #include "file.h" -int16 imcTable[] = { +const int16 imcTable[] = { 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x0010, 0x0011, 0x0013, 0x0015, 0x0017, 0x0019, 0x001C, 0x001F, 0x0022, 0x0025, 0x0029, 0x002D, 0x0032, 0x0037, 0x003C, 0x0042, 0x0049, 0x0050, 0x0058, 0x0061, 0x006B, 0x0076, @@ -36,57 +36,59 @@ int16 imcTable[] = { 0x3BB9, 0x41B2, 0x4844, 0x4F7E, 0x5771, 0x602F, 0x69CE, 0x7462, 0x7FFF }; -byte imxOtherTable1[] = { - 0xFF, 0x04, 0xFF, 0x04 -}; - -byte imxOtherTable2[] = { - 0xFF, 0xFF, 0x02, 0x08, 0xFF, 0xFF, 0x02, 0x08 -}; - -byte imxOtherTable3[] = { - 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x02, 0x04, 0x06, - 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x02, 0x04, 0x06 -}; - -byte imxOtherTable4[] = { - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x01, 0x02, 0x04, 0x06, 0x08, 0x0C, 0x10, 0x20, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x01, 0x02, 0x04, 0x06, 0x08, 0x0C, 0x10, 0x20 -}; - -byte imxOtherTable5[] = { - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x01, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E, - 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x20, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x01, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E, - 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x20 -}; - -byte imxOtherTable6[] = { - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, - 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, - 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, - 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, - 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, - 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, - 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20 +const byte imxOtherTable[6][128] = { + { + 0xFF, 0x04, 0xFF, 0x04 + }, + + { + 0xFF, 0xFF, 0x02, 0x08, 0xFF, 0xFF, 0x02, 0x08 + }, + + { + 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x02, 0x04, 0x06, + 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x02, 0x04, 0x06 + }, + + { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x01, 0x02, 0x04, 0x06, 0x08, 0x0C, 0x10, 0x20, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x01, 0x02, 0x04, 0x06, 0x08, 0x0C, 0x10, 0x20 + }, + + { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x01, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E, + 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x20, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x01, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E, + 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x20 + }, + + { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, + 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, + 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, + 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, + 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, + 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, + 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20 + } }; -byte imxShortTable[] = { +const byte imxShortTable[] = { 0, 0, 1, 3, 7, 15, 31, 63 }; @@ -867,13 +869,13 @@ int32 Bundle::decompressCodec(int32 codec, byte *comp_input, byte *comp_output, return output_size; } - do { + while (left--) { curTableEntry = _destImcTable[curTablePos]; decompTable = curTableEntry - 2; var3b = (1 << decompTable) << 1; readPos = src + (tableEntrySum >> 3); if (readPos+1 >= (comp_input+input_size)) { - printf("Overflow!!! %d >= %d\n", (int)readPos+1, (int)comp_input+input_size); + warning("Overflow!!! %d >= %d", (int)readPos+1, (int)comp_input+input_size); } readWord = (uint16)(READ_BE_UINT16(readPos) << (tableEntrySum & 7)); otherTablePos = (byte)(readWord >> (16 - curTableEntry)); @@ -892,27 +894,19 @@ int32 Bundle::decompressCodec(int32 codec, byte *comp_input, byte *comp_output, outputWord = -0x8000; dst[destPos] = ((int16)outputWord) >> 8; dst[destPos + 1] = (byte)(outputWord); - switch (decompTable) { - case 0: curTablePos += (signed char)imxOtherTable1[otherTablePos]; - break; - case 1: curTablePos += (signed char)imxOtherTable2[otherTablePos]; - break; - case 2: curTablePos += (signed char)imxOtherTable3[otherTablePos]; - break; - case 3: curTablePos += (signed char)imxOtherTable4[otherTablePos]; - break; - case 4: curTablePos += (signed char)imxOtherTable5[otherTablePos]; - break; - case 5: curTablePos += (signed char)imxOtherTable6[otherTablePos]; - break; - } + + assert(decompTable < 6); + curTablePos += (signed char)imxOtherTable[decompTable][otherTablePos]; + + // Clip data if (curTablePos > 88) curTablePos = 88; if (curTablePos < 0) curTablePos = 0; + destPos += channels << 1; imcTableEntry = imcTable[curTablePos]; - } while (--left != 0); + } } } break; |