package php.runtime.ext.core.classes.lib;
import php.runtime.Memory;
import php.runtime.common.HintType;
import php.runtime.env.Environment;
import php.runtime.lang.BaseObject;
import php.runtime.lang.ForeachIterator;
import php.runtime.memory.BinaryMemory;
import php.runtime.reflection.ClassEntity;
import php.runtime.reflection.ParameterEntity;
import java.io.ByteArrayOutputStream;
import static php.runtime.annotation.Reflection.*;
import static php.runtime.annotation.Runtime.FastMethod;
@Name("php\\lib\\Bin")
public class BinUtils extends BaseObject {
public BinUtils(Environment env, ClassEntity clazz) {
super(env, clazz);
}
@Signature
private Memory __construct(Environment env, Memory... args) { return Memory.NULL; }
@FastMethod
@Signature(@Arg("value"))
public static Memory of(Environment env, Memory... args) {
if (ParameterEntity.checkTypeHinting(env, args[0], HintType.TRAVERSABLE)) {
ForeachIterator iterator = args[0].getNewIterator(env, false, false);
ByteArrayOutputStream tmp = new ByteArrayOutputStream();
while (iterator.next()) {
tmp.write(iterator.getValue().toInteger());
}
return new BinaryMemory(tmp.toByteArray());
}
return new BinaryMemory(args[0].getBinaryBytes(env.getDefaultCharset()));
}
}