/*
** 2011 April 5
**
** The author disclaims copyright to this source code. In place of
** a legal notice, here is a blessing:
** May you do good and not evil.
** May you find forgiveness for yourself and forgive others.
** May you share freely, never taking more than you give.
*/
package info.ata4.bsplib.util;
/**
* Utility class to simulate some string related C++ macros.
*
* @author Nico Bergemann <barracuda415 at yahoo.de>
*/
public class StringMacroUtils {
private StringMacroUtils() {
}
/**
* Simulates the MAKEID macro from the Source SDK. It makes a 4-byte
* "packed ID" int out of a 4 character string.
*
* @param id 4 character string
* @return packed integer ID
*/
public static int makeID(String id) {
if (id.length() != 4) {
throw new IllegalArgumentException("String must be exactly 4 characters long");
}
byte[] bytes = id.getBytes();
return (bytes[3] << 24) | (bytes[2] << 16) | (bytes[1] << 8) | bytes[0];
}
/**
* Decodes a "packed ID" into a 4 character string that was made by
* the MAKEID macro from the Source SDK.
*
* @param id packed integer ID
* @return 4 character string
*/
public static String unmakeID(int id) {
byte[] bytes = new byte[] {
(byte) id,
(byte) (id >>> 8),
(byte) (id >>> 16),
(byte) (id >>> 24)
};
return new String(bytes);
}
}