public override void OnWrite(ByteObjectWriter writer, object value, Type defaultItemType) { var structType = value.GetType(); writer.Type(structType, defaultItemType); var rule = ByteUtils.GetRule(structType); if (rule != null) { rule.OnWriteInternal(writer, value); } else { var fields = usedFields.GetUnical(structType); if (fields == null) fields = ByteUtils.GetSerializeFields(structType); writer.Ushort((ushort)fields.Length); for (int i = 0; i < fields.Length; i++) { var field = fields[i]; writer.String(field.Name); writer.Complex(field.GetValue(value), null); } } }
public override void OnWrite(ByteObjectWriter writer, object value, Type defaultItemType) { var itemType = value.GetType().GetElementType(); var array = ((Array)value); writer.Type(itemType, defaultItemType); writer.Int(array.Length); for (int i = 0; i < array.Length; i++) writer.Complex(array.GetValue(i), itemType); }
private void DimensionalWriteResoursy(ByteObjectWriter writer, Array array, Type itemType, int dimensional, int[] indexes) { for (int i = 0; i < array.GetLength(dimensional); i++) { indexes[dimensional] = i; if (dimensional < array.Rank - 1) DimensionalWriteResoursy(writer, array, itemType, dimensional + 1, indexes); else { writer.Complex(array.GetValue(indexes), itemType); } } }
public override void OnWrite(ByteObjectWriter writer, object value, Type defaultItemType) { var itemType = value.GetType().GetElementType(); var array = ((Array)value); writer.Type(itemType, defaultItemType); writer.Int(array.Rank); for (int i = 0; i < array.Rank; i++) writer.Int(array.GetLength(i)); var indexes = new int[array.Rank]; DimensionalWriteResoursy(writer, array, itemType, 0, indexes); }
public override void OnWrite(ByteObjectWriter writer, object value, Type defaultItemType) { //Сохраняем данные в хеше, получаем объект который: //Если данные отсутствовали в хеше - возвращает текущую позицию //Если данные были в хеше - возвращает позицию, которая была при сохранении var objData = writer.SaveToClassHashtable(value); if (objData.definitionPosition == writer.position) { writer.Byte(IsDefinition); var classType = value.GetType(); writer.Type(classType, defaultItemType); var rule = ByteUtils.GetRule(classType); if (rule != null) { rule.OnWriteInternal(writer, value); } else { var fields = usedFields.GetUnical(classType); if (fields == null) fields = ByteUtils.GetSerializeFields(classType); writer.Ushort((ushort)fields.Length); for (int i = 0; i < fields.Length; i++) { var field = fields[i]; writer.String(field.Name); writer.Complex(field.GetValue(value), null); } } } else { writer.Byte(IsGoto); writer.Int(objData.definitionPosition); } }
public override void OnWrite(ByteObjectWriter writer, object value, Type defaultItemType) { writer.String((string)value); }
public override void OnWrite(ByteObjectWriter writer, object value, Type defaultItemType) { writer.Short((short)value); }
public override void OnWrite(ByteObjectWriter writer, object value, Type defaultItemType) { writer.Double((double)value); }
public override void OnWrite(ByteObjectWriter writer, object value, Type defaultItemType) { writer.Bool((bool)value); }
public override void OnWrite(ByteObjectWriter writer, object value, Type defaultItemType) { var unityObj = (UnityEngine.Object)value; writer.unityHashtable[unityObj.GetInstanceID()] = unityObj; writer.Int(unityObj.GetInstanceID()); }
public override void OnWrite(ByteObjectWriter writer, object value, Type defaultItemType) { }
public override void OnWrite(ByteObjectWriter writer, object value, Type defaultItemType) { writer.Float((float)value); }
public override void OnWrite(ByteObjectWriter writer, object value, Type defaultItemType) { writer.Char((char)value); }