Last active
December 31, 2015 00:39
-
-
Save jandk/7908352 to your computer and use it in GitHub Desktop.
Remove unneeded brackets and casts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
class ConvertBytes | |
{ | |
public static void Convert08to08(byte[] src, int srcOff, short[] dst, int dstOff, int dstLen) | |
{ | |
ValidateRange(src, srcOff, dst, dstOff, dstLen, 8); | |
int n = dstLen / 4; | |
for (int i = 0; i < n; i++) | |
{ | |
dst[dstOff++] = src[srcOff++]; | |
dst[dstOff++] = src[srcOff++]; | |
dst[dstOff++] = src[srcOff++]; | |
dst[dstOff++] = src[srcOff++]; | |
} | |
} | |
public static void Convert08to08(short[] src, int srcOff, byte[] dst, int dstOff, int srcLen) | |
{ | |
ValidateRange(src, srcOff, dst, dstOff, srcLen, 8); | |
int n = srcLen / 4; | |
for (int i = 0; i < n; i++) | |
{ | |
dst[dstOff++] = (byte)src[srcOff++]; | |
dst[dstOff++] = (byte)src[srcOff++]; | |
dst[dstOff++] = (byte)src[srcOff++]; | |
dst[dstOff++] = (byte)src[srcOff++]; | |
} | |
} | |
public static void Convert08to10(byte[] src, int srcOff, short[] dst, int dstOff, int dstLen) | |
{ | |
ValidateRange(src, srcOff, dst, dstOff, dstLen, 10); | |
int n = dstLen / 4; | |
for (int i = 0; i < n; i++) | |
{ | |
byte b0 = src[srcOff++]; | |
byte b1 = src[srcOff++]; | |
byte b2 = src[srcOff++]; | |
byte b3 = src[srcOff++]; | |
byte b4 = src[srcOff++]; | |
dst[dstOff++] = (short)(b0 << 2 | (b1 & 0xc0) >> 6); | |
dst[dstOff++] = (short)((b1 & 0x3f) << 4 | (b2 & 0xf0) >> 4); | |
dst[dstOff++] = (short)((b2 & 0x0f) << 6 | (b3 & 0xfc) >> 2); | |
dst[dstOff++] = (short)((b3 & 0x03) << 8 | b4); | |
} | |
} | |
public static void Convert08to12(byte[] src, int srcOff, short[] dst, int dstOff, int dstLen) | |
{ | |
ValidateRange(src, srcOff, dst, dstOff, dstLen, 12); | |
int n = dstLen / 4; | |
for (int i = 0; i < n; i++) | |
{ | |
byte b0 = src[srcOff++]; | |
byte b1 = src[srcOff++]; | |
byte b2 = src[srcOff++]; | |
byte b3 = src[srcOff++]; | |
byte b4 = src[srcOff++]; | |
byte b5 = src[srcOff++]; | |
dst[dstOff++] = (short)(b0 << 4 | (b1 & 0xf0) >> 4); | |
dst[dstOff++] = (short)((b1 & 0x0f) << 8 | b2); | |
dst[dstOff++] = (short)(b3 << 4 | (b4 & 0xf0) >> 4); | |
dst[dstOff++] = (short)((b4 & 0x0f) << 8 | b5); | |
} | |
} | |
public static void Convert08to14(byte[] src, int srcOff, short[] dst, int dstOff, int dstLen) | |
{ | |
ValidateRange(src, srcOff, dst, dstOff, dstLen, 14); | |
int n = dstLen / 4; | |
for (int i = 0; i < n; i++) | |
{ | |
byte b0 = src[srcOff++]; | |
byte b1 = src[srcOff++]; | |
byte b2 = src[srcOff++]; | |
byte b3 = src[srcOff++]; | |
byte b4 = src[srcOff++]; | |
byte b5 = src[srcOff++]; | |
byte b6 = src[srcOff++]; | |
dst[dstOff++] = (short)(b0 << 6 | (b1 & 0xfc) >> 2); | |
dst[dstOff++] = (short)((b1 & 0x03) << 12 | b2 << 4 | (b3 & 0xf0) >> 4); | |
dst[dstOff++] = (short)((b3 & 0x0f) << 10 | b4 << 2 | (b5 & 0xc0) >> 6); | |
dst[dstOff++] = (short)((b5 & 0x3f) << 8 | b6); | |
} | |
} | |
public static void Convert08to16(byte[] src, int srcOff, short[] dst, int dstOff, int dstLen) | |
{ | |
ValidateRange(src, srcOff, dst, dstOff, dstLen, 16); | |
int n = dstLen / 4; | |
for (int i = 0; i < n; i++) | |
{ | |
dst[dstOff++] = (short)(src[srcOff++] << 8 | src[srcOff++]); | |
dst[dstOff++] = (short)(src[srcOff++] << 8 | src[srcOff++]); | |
dst[dstOff++] = (short)(src[srcOff++] << 8 | src[srcOff++]); | |
dst[dstOff++] = (short)(src[srcOff++] << 8 | src[srcOff++]); | |
} | |
} | |
public static void Convert10to08(short[] src, int srcOff, byte[] dst, int dstOff, int srcLen) | |
{ | |
ValidateRange(src, srcOff, dst, dstOff, srcLen, 10); | |
int n = srcLen / 4; | |
for (int i = 0; i < n; i++) | |
{ | |
short s0 = src[srcOff++]; | |
short s1 = src[srcOff++]; | |
short s2 = src[srcOff++]; | |
short s3 = src[srcOff++]; | |
dst[dstOff++] = (byte)((s0 & 0x3fc) >> 2); | |
dst[dstOff++] = (byte)((s0 & 0x003) << 6 | (s1 & 0x3f0) >> 4); | |
dst[dstOff++] = (byte)((s1 & 0x00f) << 4 | (s2 & 0x3c0) >> 6); | |
dst[dstOff++] = (byte)((s2 & 0x03f) << 2 | (s3 & 0x300) >> 8); | |
dst[dstOff++] = (byte)s3; | |
} | |
} | |
public static void Convert12to08(short[] src, int srcOff, byte[] dst, int dstOff, int srcLen) | |
{ | |
ValidateRange(src, srcOff, dst, dstOff, srcLen, 12); | |
int n = srcLen / 4; | |
for (int i = 0; i < n; i++) | |
{ | |
short s0 = src[srcOff++]; | |
short s1 = src[srcOff++]; | |
short s2 = src[srcOff++]; | |
short s3 = src[srcOff++]; | |
dst[dstOff++] = (byte)((s0 & 0xff0) >> 4); | |
dst[dstOff++] = (byte)((s0 & 0x00f) << 4 | (s1 & 0xf00) >> 8); | |
dst[dstOff++] = (byte)s1; | |
dst[dstOff++] = (byte)((s2 & 0xff0) >> 4); | |
dst[dstOff++] = (byte)((s2 & 0x00f) << 4 | (s3 & 0xf00) >> 8); | |
dst[dstOff++] = (byte)s3; | |
} | |
} | |
public static void Convert14to08(short[] src, int srcOff, byte[] dst, int dstOff, int srcLen) | |
{ | |
ValidateRange(src, srcOff, dst, dstOff, srcLen, 14); | |
int n = srcLen / 4; | |
for (int i = 0; i < n; i++) | |
{ | |
short s0 = src[srcOff++]; | |
short s1 = src[srcOff++]; | |
short s2 = src[srcOff++]; | |
short s3 = src[srcOff++]; | |
dst[dstOff++] = (byte)((s0 & 0x3fc0) >> 6); | |
dst[dstOff++] = (byte)((s0 & 0x003f) << 2 | (s1 & 0x3000) >> 12); | |
dst[dstOff++] = (byte)((s1 & 0x0ff0) >> 4); | |
dst[dstOff++] = (byte)((s1 & 0x000f) << 4 | (s2 & 0x3c00) >> 10); | |
dst[dstOff++] = (byte)((s2 & 0x03fc) >> 2); | |
dst[dstOff++] = (byte)((s2 & 0x0003) << 6 | (s3 & 0x3f00) >> 8); | |
dst[dstOff++] = (byte)s3; | |
} | |
} | |
public static void Convert16to08(short[] src, int srcOff, byte[] dst, int dstOff, int srcLen) | |
{ | |
ValidateRange(src, srcOff, dst, dstOff, srcLen, 16); | |
int n = srcLen / 4; | |
for (int i = 0; i < n; i++) | |
{ | |
short s0 = src[srcOff++]; | |
short s1 = src[srcOff++]; | |
short s2 = src[srcOff++]; | |
short s3 = src[srcOff++]; | |
dst[dstOff++] = (byte)((s0 & 0xff00) >> 8); | |
dst[dstOff++] = (byte)s0; | |
dst[dstOff++] = (byte)((s1 & 0xff00) >> 8); | |
dst[dstOff++] = (byte)s1; | |
dst[dstOff++] = (byte)((s2 & 0xff00) >> 8); | |
dst[dstOff++] = (byte)s2; | |
dst[dstOff++] = (byte)((s3 & 0xff00) >> 8); | |
dst[dstOff++] = (byte)s3; | |
} | |
} | |
private static void ValidateRange(byte[] src, int srcOff, short[] dst, int dstOff, int len, int dstBits) | |
{ | |
if (src == null || dst == null) | |
throw new ArgumentException("src or dst is null"); | |
ValidateRange(src.Length, srcOff, dst.Length, dstOff, len, 8, dstBits); | |
} | |
private static void ValidateRange(int srcLen, int srcOff, int dstLen, int dstOff, int len, int srcBits, int dstBits) | |
{ | |
int srcNeed = (srcBits == 8) ? ((len + dstBits - 1) / 8) : len; | |
int dstNeed = (dstBits == 8) ? ((len + srcBits - 1) / 8) : len; | |
if (srcOff + srcNeed > srcLen) | |
throw new ArgumentException("src too short"); | |
if (dstOff + dstNeed > dstLen) | |
throw new ArgumentException("dst too short"); | |
if (len % 4 != 0) | |
throw new ArgumentException("short[] len should be a multiple of 4"); | |
} | |
private static void ValidateRange(short[] src, int srcOff, byte[] dst, int dstOff, int len, int srcBits) | |
{ | |
if (src == null || dst == null) | |
throw new ArgumentException("src or dst is null"); | |
ValidateRange(src.Length, srcOff, dst.Length, dstOff, len, srcBits, 8); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment