Merge in the changes from the original Aurora-LibOMV branch (missing a few optimizations that change a lot of base types, not included as I'd rather stick closer to master at this point).

This commit is contained in:
Revolution Smythe
2012-07-27 13:37:13 -04:00
parent 6212cbd766
commit 37597a448e
9 changed files with 236 additions and 19 deletions

View File

@@ -101,6 +101,7 @@ namespace OpenMetaverse.StructuredData
public virtual Vector4 AsVector4() { return Vector4.Zero; }
public virtual Quaternion AsQuaternion() { return Quaternion.Identity; }
public virtual Color4 AsColor4() { return Color4.Black; }
public virtual OSD Copy() { return new OSD(); }
public override string ToString() { return "undef"; }
@@ -289,6 +290,20 @@ namespace OpenMetaverse.StructuredData
else
return Quaternion.Identity;
}
else if (type == typeof(OSDArray))
{
OSDArray newArray = new OSDArray();
foreach (OSD o in (OSDArray)value)
newArray.Add(o);
return newArray;
}
else if (type == typeof(OSDMap))
{
OSDMap newMap = new OSDMap();
foreach (KeyValuePair<string, OSD> o in (OSDMap)value)
newMap.Add(o);
return newMap;
}
else
{
return null;
@@ -418,6 +433,7 @@ namespace OpenMetaverse.StructuredData
public override double AsReal() { return value ? 1d : 0d; }
public override string AsString() { return value ? "1" : "0"; }
public override byte[] AsBinary() { return value ? trueBinary : falseBinary; }
public override OSD Copy() { return new OSDBoolean(value); }
public override string ToString() { return AsString(); }
}
@@ -444,6 +460,7 @@ namespace OpenMetaverse.StructuredData
public override double AsReal() { return (double)value; }
public override string AsString() { return value.ToString(); }
public override byte[] AsBinary() { return Utils.IntToBytesBig(value); }
public override OSD Copy() { return new OSDInteger(value); }
public override string ToString() { return AsString(); }
}
@@ -463,7 +480,8 @@ namespace OpenMetaverse.StructuredData
}
public override bool AsBoolean() { return (!Double.IsNaN(value) && value != 0d); }
public override OSD Copy() { return new OSDReal(value); }
public override int AsInteger()
{
if (Double.IsNaN(value))
@@ -524,6 +542,8 @@ namespace OpenMetaverse.StructuredData
public override OSDType Type { get { return OSDType.String; } }
public override OSD Copy() { return new OSDString(value); }
public OSDString(string value)
{
// Refuse to hold null pointers
@@ -633,6 +653,7 @@ namespace OpenMetaverse.StructuredData
this.value = value;
}
public override OSD Copy() { return new OSDUUID(value); }
public override bool AsBoolean() { return (value == UUID.Zero) ? false : true; }
public override string AsString() { return value.ToString(); }
public override UUID AsUUID() { return value; }
@@ -690,6 +711,7 @@ namespace OpenMetaverse.StructuredData
return Utils.DoubleToBytes(ts.TotalSeconds);
}
public override OSD Copy() { return new OSDDate(value); }
public override DateTime AsDate() { return value; }
public override string ToString() { return AsString(); }
}
@@ -720,6 +742,7 @@ namespace OpenMetaverse.StructuredData
return string.Empty;
}
public override OSD Copy() { return new OSDUri(value); }
public override Uri AsUri() { return value; }
public override byte[] AsBinary() { return Encoding.UTF8.GetBytes(AsString()); }
public override string ToString() { return AsString(); }
@@ -783,6 +806,7 @@ namespace OpenMetaverse.StructuredData
};
}
public override OSD Copy() { return new OSDBinary(value); }
public override string AsString() { return Convert.ToBase64String(value); }
public override byte[] AsBinary() { return value; }
@@ -861,6 +885,11 @@ namespace OpenMetaverse.StructuredData
return OSDParser.SerializeJsonString(this, true);
}
public override OSD Copy()
{
return new OSDMap(new Dictionary<string, OSD>(value));
}
#region IDictionary Implementation
public int Count { get { return value.Count; } }
@@ -1086,6 +1115,11 @@ namespace OpenMetaverse.StructuredData
return color;
}
public override OSD Copy()
{
return new OSDArray(new List<OSD>(value));
}
public override bool AsBoolean() { return value.Count > 0; }
public override string ToString()