diff Pml/Elements/Element.cs @ 0:3ab940a0c7a0

Initial commit
author Ivo Smits <Ivo@UCIS.nl>
date Tue, 11 Sep 2012 16:28:53 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Pml/Elements/Element.cs	Tue Sep 11 16:28:53 2012 +0200
@@ -0,0 +1,80 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace UCIS.Pml {
+	/*public enum PmlElementType : byte {
+		Null = 0,
+
+		Dictionary = 1,
+		Collection = 2,
+
+		Binary = 10,
+		String = 11,
+
+		Integer = 20
+	}*/
+	public enum PmlType {
+		Null,
+		Dictionary,
+		Collection,
+		Binary,
+		String,
+		Integer,
+		//Number,
+	}
+	public abstract class PmlElement {
+		public abstract PmlType Type { get; }
+
+		public virtual PmlElement GetChild(string name) { return null; }
+		public virtual PmlElement GetChild(int index) { return null; }
+		public virtual IEnumerable<PmlElement> GetChildren() { return null; }
+		public virtual IEnumerable<KeyValuePair<String, PmlElement>> GetNamedChildren() { return null; }
+		public virtual int GetChildCount() { return 0; }
+		public virtual void AddChild(string name, PmlElement value) { throw new NotSupportedException(); }
+		public virtual void AddChild(PmlElement value) { throw new NotSupportedException(); }
+
+		public abstract object ToObject();
+		public abstract override string ToString();
+		public abstract bool ToBoolean();
+		public abstract byte ToByte();
+		public abstract decimal ToDecimal();
+		public abstract double ToDouble();
+		public abstract short ToInt16();
+		public abstract int ToInt32();
+		public abstract long ToInt64();
+		public abstract sbyte ToSByte();
+		public abstract float ToSingle();
+		public abstract ushort ToUInt16();
+		public abstract uint ToUInt32();
+		public abstract ulong ToUInt64();
+		public abstract char ToChar();
+		public abstract byte[] ToByteArray();
+
+		public static explicit operator string(PmlElement e) { return e == null ? null : e.ToString(); }
+		public static explicit operator bool(PmlElement e) { return e == null ? false : e.ToBoolean(); }
+		public static explicit operator byte(PmlElement e) { return e == null ? (byte)0 : e.ToByte(); }
+		public static explicit operator decimal(PmlElement e) { return e == null ? (decimal)0 : e.ToDecimal(); }
+		public static explicit operator double(PmlElement e) { return e == null ? (double)0 : e.ToDouble(); }
+		public static explicit operator short(PmlElement e) { return e == null ? (short)0 : e.ToInt16(); }
+		public static explicit operator int(PmlElement e) { return e == null ? (int)0 : e.ToInt32(); }
+		public static explicit operator long(PmlElement e) { return e == null ? (long)0 : e.ToInt64(); }
+		public static explicit operator sbyte(PmlElement e) { return e == null ? (sbyte)0 : e.ToSByte(); }
+		public static explicit operator float(PmlElement e) { return e == null ? (float)0 : e.ToSingle(); }
+		public static explicit operator ushort(PmlElement e) { return e == null ? (ushort)0 : e.ToUInt16(); }
+		public static explicit operator uint(PmlElement e) { return e == null ? (uint)0 : e.ToUInt32(); }
+		public static explicit operator ulong(PmlElement e) { return e == null ? (ulong)0 : e.ToUInt64(); }
+		public static explicit operator char(PmlElement e) { return e == null ? '\0' : e.ToChar(); }
+		public static explicit operator byte[](PmlElement e) { return e == null ? null : e.ToByteArray(); }
+
+		public static implicit operator PmlElement(String str) { return new PmlString(str); }
+		public static implicit operator PmlElement(UInt64 number) { return new PmlInteger(number); }
+		public static implicit operator PmlElement(UInt32 number) { return new PmlInteger(number); }
+		public static implicit operator PmlElement(Int64 number) { return new PmlInteger(number); }
+		public static implicit operator PmlElement(Int32 number) { return new PmlInteger(number); }
+		public static implicit operator PmlElement(Int16 number) { return new PmlInteger(number); }
+		public static implicit operator PmlElement(UInt16 number) { return new PmlInteger(number); }
+		public static implicit operator PmlElement(Byte number) { return new PmlInteger(number); }
+		//public static implicit operator PmlElement(Double number) { return new PmlNumber(number); }
+	}
+}