private object DoLen(object target, object[] args) { if (args.Length == 0) { return(0); } Array a = args[0] as Array; string s = args[0] as string; DataReader reader = args[0] as DataReader; IStreamTypeParser parser = args[0] as IStreamTypeParser; if (s != null) { return(s.Length); } else if (a != null) { return(a.Length); } else if (reader != null) { return(reader.DataLeft); } else if (parser != null) { DataWriter writer = new DataWriter(); parser.ToStream(writer, CreateState(target), _logger); return(writer.BytesWritten); } return(0); }
public void ToWriter(DataFrames.DataWriter writer, DataFrames.DataKey root, Utils.Logger logger) { StateDictionary state = new StateDictionary(); try { IStreamTypeParser parser = ObjectConverter.FromNode <T>(root, _derivedTypes); parser.ToStream(writer, state, logger); } catch (ThreadAbortException) { throw; } catch (Exception ex) { logger.LogError(CANAPE.Parser.Properties.Resources.GenericStreamParser_WriteException, ex.Message, typeof(T).Name); throw; } }
private byte[] ToBytes(object target, object o, bool littleEndian, Encoding encoding) { if (o is byte) { return(new byte[1] { (byte)o }); } else if (o is sbyte) { return((byte[])(object)(new sbyte[1] { (sbyte)o })); } else if (o.GetType().IsPrimitive) { MemoryStream stm = new MemoryStream(); DataWriter writer = new DataWriter(stm); writer.WritePrimitive(o, o.GetType(), littleEndian); return(stm.ToArray()); } else if (o is byte[]) { return((byte[])o); } else if (o is Array) { MemoryStream stm = new MemoryStream(); foreach (object x in ((Array)o)) { byte[] ba = ToBytes(target, x, littleEndian, encoding); stm.Write(ba, 0, ba.Length); } return(stm.ToArray()); } else if (o is IStreamTypeParser) { MemoryStream stm = new MemoryStream(); DataWriter writer = new DataWriter(stm); IStreamTypeParser parser = (IStreamTypeParser)o; parser.ToStream(writer, CreateState(target), _logger); return(stm.ToArray()); } else if (o is string) { if (encoding != null) { return(encoding.GetBytes((string)o)); } else { return(BinaryEncoding.Instance.GetBytes((string)o)); } } return(new byte[0]); }