public static function init() { self::$classCRC32Cache = new IdentityHashMap(); self::$CLASS_TO_SERIALIZER_INSTANCE = new IdentityHashMap(); self::$NO_SUCH_SERIALIZER = new SerializabilityUtilEx_NoSuchSerializer(); self::$SERIALIZED_PRIMITIVE_TYPE_NAMES = new HashMap(); self::$TYPES_WHOSE_IMPLEMENTATION_IS_EXCLUDED_FROM_SIGNATURES = new HashSet(); self::$SERIALIZED_PRIMITIVE_TYPE_NAMES->put(Boolean::typeClass()->getFullName(), "Z"); self::$SERIALIZED_PRIMITIVE_TYPE_NAMES->put(Byte::typeClass()->getFullName(), "B"); self::$SERIALIZED_PRIMITIVE_TYPE_NAMES->put(Character::typeClass()->getFullName(), "C"); self::$SERIALIZED_PRIMITIVE_TYPE_NAMES->put(Double::typeClass()->getFullName(), "D"); self::$SERIALIZED_PRIMITIVE_TYPE_NAMES->put(Float::typeClass()->getFullName(), "F"); self::$SERIALIZED_PRIMITIVE_TYPE_NAMES->put(Integer::typeClass()->getFullName(), "I"); self::$SERIALIZED_PRIMITIVE_TYPE_NAMES->put(Long::typeClass()->getFullName(), "J"); self::$SERIALIZED_PRIMITIVE_TYPE_NAMES->put(Short::typeClass()->getFullName(), "S"); self::$TYPES_WHOSE_IMPLEMENTATION_IS_EXCLUDED_FROM_SIGNATURES->add(Boolean::clazz()); self::$TYPES_WHOSE_IMPLEMENTATION_IS_EXCLUDED_FROM_SIGNATURES->add(Byte::clazz()); self::$TYPES_WHOSE_IMPLEMENTATION_IS_EXCLUDED_FROM_SIGNATURES->add(Character::clazz()); self::$TYPES_WHOSE_IMPLEMENTATION_IS_EXCLUDED_FROM_SIGNATURES->add(Double::clazz()); //TODO Exception class //self::$TYPES_WHOSE_IMPLEMENTATION_IS_EXCLUDED_FROM_SIGNATURES->add(Exception::clazz()); self::$TYPES_WHOSE_IMPLEMENTATION_IS_EXCLUDED_FROM_SIGNATURES->add(Float::clazz()); self::$TYPES_WHOSE_IMPLEMENTATION_IS_EXCLUDED_FROM_SIGNATURES->add(Integer::clazz()); self::$TYPES_WHOSE_IMPLEMENTATION_IS_EXCLUDED_FROM_SIGNATURES->add(Long::clazz()); self::$TYPES_WHOSE_IMPLEMENTATION_IS_EXCLUDED_FROM_SIGNATURES->add(Object::clazz()); self::$TYPES_WHOSE_IMPLEMENTATION_IS_EXCLUDED_FROM_SIGNATURES->add(Short::clazz()); self::$TYPES_WHOSE_IMPLEMENTATION_IS_EXCLUDED_FROM_SIGNATURES->add(String::clazz()); self::$TYPES_WHOSE_IMPLEMENTATION_IS_EXCLUDED_FROM_SIGNATURES->add(Classes::classOf('Throwable')); }
public static function get(Clazz $clazz) { $hash = Hasher::hashObject($clazz); if (isset(self::$ACCESSORS[$hash])) { return self::$ACCESSORS[$hash]; } else { return self::$ACCESSORS[Hasher::hashObject(Object::clazz())]; } }
public function deserializeValue(Clazz $type) { $valueReader = self::$CLASS_TO_VALUE_READER->get($type); if (!is_null($valueReader)) { return $valueReader->readValue($this); } else { return self::$CLASS_TO_VALUE_READER->get(Object::clazz())->readValue($this); } }
private static function classOfArray($className) { // Java array style if ($className[0] == ArrayType::SIGNATURE) { if (self::exists($className)) { return self::getClass($className); } else { $count = substr_count($className, '['); $type = mb_substr($className, $count); if ($type[0] == Object::SIGNATURE) { $clazz = Classes::classOf(mb_substr($type, 1, mb_strlen($type) - 2)); } else { $clazz = self::$SIGNATURES[$type[0]]; } $reformed = $clazz->getName() . str_repeat('[]', $count); $wanted = self::classOfArray($reformed); self::registerClass($className, $wanted); return $wanted; } } else { $count = substr_count($className, '['); $pos = strpos($className, '['); $type = substr($className, 0, $pos); $className = $type . str_repeat('[]', $count); if (self::exists($className)) { return self::getClass($className); } else { $compType = $type . str_repeat('[]', $count - 1); $class = new ArrayClazz(Object::clazz(), Classes::classOf($compType), $count); self::registerClass($class->getName(), $class); return $class; } } }
public static function init() { self::$JS_CHARS_ESCAPED[chr(0)] = '0'; self::$JS_CHARS_ESCAPED[""] = 'b'; self::$JS_CHARS_ESCAPED["\t"] = 't'; self::$JS_CHARS_ESCAPED["\n"] = 'n'; self::$JS_CHARS_ESCAPED["\f"] = 'f'; self::$JS_CHARS_ESCAPED["\r"] = 'r'; self::$JS_CHARS_ESCAPED[self::JS_ESCAPE_CHAR] = self::JS_ESCAPE_CHAR; self::$JS_CHARS_ESCAPED[self::JS_QUOTE_CHAR] = self::JS_QUOTE_CHAR; self::$CLASS_TO_VALUE_WRITER = new IdentityHashMap(); self::$CLASS_TO_VECTOR_WRITER = new IdentityHashMap(); self::$CLASS_TO_VECTOR_WRITER->put(Classes::classOf('boolean[]'), SSSW_VectorWriter::$BOOLEAN_VECTOR); self::$CLASS_TO_VECTOR_WRITER->put(Classes::classOf('byte[]'), SSSW_VectorWriter::$BYTE_VECTOR); self::$CLASS_TO_VECTOR_WRITER->put(Classes::classOf('char[]'), SSSW_VectorWriter::$CHAR_VECTOR); self::$CLASS_TO_VECTOR_WRITER->put(Classes::classOf('double[]'), SSSW_VectorWriter::$DOUBLE_VECTOR); self::$CLASS_TO_VECTOR_WRITER->put(Classes::classOf('float[]'), SSSW_VectorWriter::$FLOAT_VECTOR); self::$CLASS_TO_VECTOR_WRITER->put(Classes::classOf('int[]'), SSSW_VectorWriter::$INT_VECTOR); self::$CLASS_TO_VECTOR_WRITER->put(Classes::classOf('long[]'), SSSW_VectorWriter::$LONG_VECTOR); self::$CLASS_TO_VECTOR_WRITER->put(Classes::classOf('Object[]'), SSSW_VectorWriter::$OBJECT_VECTOR); self::$CLASS_TO_VECTOR_WRITER->put(Classes::classOf('short[]'), SSSW_VectorWriter::$SHORT_VECTOR); self::$CLASS_TO_VECTOR_WRITER->put(Classes::classOf('String[]'), SSSW_VectorWriter::$STRING_VECTOR); self::$CLASS_TO_VALUE_WRITER->put(Boolean::typeClass(), SSSW_ValueWriter::$BOOLEAN); self::$CLASS_TO_VALUE_WRITER->put(Byte::typeClass(), SSSW_ValueWriter::$BYTE); self::$CLASS_TO_VALUE_WRITER->put(Character::typeClass(), SSSW_ValueWriter::$CHAR); self::$CLASS_TO_VALUE_WRITER->put(Double::typeClass(), SSSW_ValueWriter::$DOUBLE); self::$CLASS_TO_VALUE_WRITER->put(Float::typeClass(), SSSW_ValueWriter::$FLOAT); self::$CLASS_TO_VALUE_WRITER->put(Integer::typeClass(), SSSW_ValueWriter::$INT); self::$CLASS_TO_VALUE_WRITER->put(Long::typeClass(), SSSW_ValueWriter::$LONG); self::$CLASS_TO_VALUE_WRITER->put(Object::clazz(), SSSW_ValueWriter::$OBJECT); self::$CLASS_TO_VALUE_WRITER->put(Short::typeClass(), SSSW_ValueWriter::$SHORT); self::$CLASS_TO_VALUE_WRITER->put(String::clazz(), SSSW_ValueWriter::$STRING); }