/*
Реализация среды исполнения языка программирования
Объектно-ориентированный продвинутый векторный транслятор
Copyright © 2021, 2024 Малик Разработчик
Это свободная программа: вы можете перераспространять ее и/или изменять
ее на условиях Меньшей Стандартной общественной лицензии GNU в том виде,
в каком она была опубликована Фондом свободного программного обеспечения;
либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.
Эта программа распространяется в надежде, что она будет полезной,
но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Подробнее см. в Меньшей Стандартной
общественной лицензии GNU.
Вы должны были получить копию Меньшей Стандартной общественной лицензии GNU
вместе с этой программой. Если это не так, см.
<https://www.gnu.org/licenses/>.
*/
package platform.independent.streamformat;
public final class MIMETypeInfo(Object, Cloneable)
{
public static final String TYPE_APPLICATION = "application";
public static final String TYPE_AUDIO = "audio";
public static final String TYPE_EXAMPLE = "example";
public static final String TYPE_FONT = "font";
public static final String TYPE_IMAGE = "image";
public static final String TYPE_MESSAGE = "message";
public static final String TYPE_MODEL = "model";
public static final String TYPE_MULTIPART = "multipart";
public static final String TYPE_TEXT = "text";
public static final String TYPE_VIDEO = "video";
private static final int CODEC = 4;
private static final int ENCODER = 2;
private static final int DECODER = 1;
private final int fldSupported;
private final String fldMIMEType;
public (String mimeType, boolean decoderSupported, boolean encoderSupported, boolean codecSupported) {
fldSupported = (decoderSupported ? DECODER : 0) | (encoderSupported ? ENCODER : 0) | (codecSupported ? CODEC : 0);
fldMIMEType = mimeType;
}
private (String mimeType, int supported) {
fldSupported = supported;
fldMIMEType = mimeType;
}
public boolean equals(Object anot) {
if(anot == this) return true;
if(!(anot instanceof MIMETypeInfo)) return false;
MIMETypeInfo amti = (MIMETypeInfo) anot;
if(fldSupported != amti.fldSupported) return false;
Object mimeType = fldMIMEType;
return mimeType == null ? amti.fldMIMEType == null : mimeType.equals(amti.fldMIMEType);
}
public int hashCode() {
Object mimeType = fldMIMEType;
return (mimeType == null ? -1 : mimeType.hashCode()) ^ fldSupported;
}
public long hashCodeAsLong() {
Object mimeType = fldMIMEType;
return (mimeType == null ? -1L : mimeType.hashCodeAsLong()) ^ fldSupported;
}
public long2 hashCodeAsLong2() {
Object mimeType = fldMIMEType;
return (mimeType == null ? new long2 { -1L, -1L } : mimeType.hashCodeAsLong2()) ^ fldSupported;
}
public long4 hashCodeAsLong4() {
Object mimeType = fldMIMEType;
return Long4.create(mimeType == null ? new long2 { -1L, -1L } : mimeType.hashCodeAsLong2(), fldSupported);
}
public String toString() {
boolean first = false;
int supported = fldSupported;
Object mimeType = fldMIMEType;
StringBuilder result = new StringBuilder() + (mimeType != null ? mimeType : "<null>");
if((supported & DECODER) != 0)
{
result + " [decoder";
first = true;
}
if((supported & ENCODER) != 0)
{
result + (first ? ", encoder" : " [encoder");
first = true;
}
if((supported & CODEC) != 0)
{
result + (first ? ", codec" : " [codec");
first = true;
}
return (first ? result + "]" : result).toString();
}
public MIMETypeInfo clone() { return new MIMETypeInfo(fldMIMEType, fldSupported); }
public String type() {
String mimeType = fldMIMEType;
if(mimeType == null) return null;
int solidusPosition = mimeType.indexOf('/');
return solidusPosition < 0 ? mimeType : mimeType.substring(0, solidusPosition);
}
public String subtype() {
String mimeType = fldMIMEType;
if(mimeType == null) return null;
int solidusPosition = mimeType.indexOf('/');
return solidusPosition < 0 ? "" : mimeType.substring(solidusPosition + 1);
}
public boolean codecSupported { index = CODEC, read = isSupported }
public boolean encoderSupported { index = ENCODER, read = isSupported }
public boolean decoderSupported { index = DECODER, read = isSupported }
public String mimeType { read = fldMIMEType }
private boolean isSupported(int index) { return (fldSupported & index) != 0; }
}