[PD-cvs] externals/clr/pd Atom.cs, 1.5, 1.6 PureData.cs, 1.2, 1.3 pd.csproj, 1.2, 1.3
Thomas Grill
xovo at users.sourceforge.net
Mon Mar 6 01:35:42 CET 2006
- Previous message: [PD-cvs] externals/hardware/arduino/examples PD_all_inputs.pd, NONE, 1.1 PD_two_potentiometers.pd, NONE, 1.1 PD_inputs_to_PD.pd, 1.1, 1.2 PD_send_potentiometer.pd, 1.1, 1.2
- Next message: [PD-cvs] externals/clr/external Counter.cs, 1.3, 1.4 external.csproj, 1.5, 1.6
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/pure-data/externals/clr/pd
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28852/clr/pd
Modified Files:
Atom.cs PureData.cs pd.csproj
Log Message:
many improvements:
- efficient symbol and atom list handling
- better control over function arguments
Index: PureData.cs
===================================================================
RCS file: /cvsroot/pure-data/externals/clr/pd/PureData.cs,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** PureData.cs 28 Jan 2006 10:36:25 -0000 1.2
--- PureData.cs 6 Mar 2006 00:35:40 -0000 1.3
***************
*** 1,9 ****
using System;
using System.Runtime.CompilerServices; // for extern import
namespace PureData
{
// PD core functions
! public class Core
{
[MethodImplAttribute (MethodImplOptions.InternalCall)]
--- 1,10 ----
using System;
using System.Runtime.CompilerServices; // for extern import
+ using System.Runtime.InteropServices; // for structures
namespace PureData
{
// PD core functions
! public unsafe class Core
{
[MethodImplAttribute (MethodImplOptions.InternalCall)]
***************
*** 20,35 ****
[MethodImplAttribute (MethodImplOptions.InternalCall)]
! public extern static IntPtr GenSym(string sym);
[MethodImplAttribute (MethodImplOptions.InternalCall)]
! public extern static string EvalSym(Symbol sym);
}
// This is the base class for a PD/CLR external
! public class External
: Core
{
! private readonly IntPtr ptr;
!
protected virtual void MethodBang() { Post("No bang handler"); }
--- 21,37 ----
[MethodImplAttribute (MethodImplOptions.InternalCall)]
! internal extern static void *SymGen(string sym);
[MethodImplAttribute (MethodImplOptions.InternalCall)]
! internal extern static string SymEval(void *sym);
}
// This is the base class for a PD/CLR external
! public unsafe class External
: Core
{
! // PD object pointer
! private readonly void *ptr;
!
protected virtual void MethodBang() { Post("No bang handler"); }
***************
*** 40,46 ****
protected virtual void MethodPointer(Pointer p) { Post("No pointer handler");}
! protected virtual void MethodList(Atom[] lst) { Post("No list handler"); }
! protected virtual void MethodAnything(Atom[] lst) { Post("No list handler"); }
}
}
--- 42,48 ----
protected virtual void MethodPointer(Pointer p) { Post("No pointer handler");}
! protected virtual void MethodList(AtomList lst) { Post("No list handler"); }
! protected virtual void MethodAnything(Symbol tag,AtomList lst) { Post("No anything handler"); }
}
}
Index: pd.csproj
===================================================================
RCS file: /cvsroot/pure-data/externals/clr/pd/pd.csproj,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** pd.csproj 27 Jan 2006 22:50:00 -0000 1.2
--- pd.csproj 6 Mar 2006 00:35:40 -0000 1.3
***************
*** 1,105 ****
! <VisualStudioProject>
! <CSHARP
! ProjectType = "Local"
! ProductVersion = "7.10.3077"
! SchemaVersion = "2.0"
! ProjectGuid = "{FFBC9D2E-1FB7-4E82-B5DC-46B31F8A58A2}"
! >
! <Build>
! <Settings
! ApplicationIcon = ""
! AssemblyKeyContainerName = ""
! AssemblyName = "PureData"
! AssemblyOriginatorKeyFile = ""
! DefaultClientScript = "JScript"
! DefaultHTMLPageLayout = "Grid"
! DefaultTargetSchema = "IE50"
! DelaySign = "false"
! OutputType = "Library"
! PreBuildEvent = ""
! PostBuildEvent = ""
! RootNamespace = "PureData"
! RunPostBuildEvent = "OnBuildSuccess"
! StartupObject = ""
! >
! <Config
! Name = "Debug"
! AllowUnsafeBlocks = "false"
! BaseAddress = "285212672"
! CheckForOverflowUnderflow = "false"
! ConfigurationOverrideFile = ""
! DefineConstants = "DEBUG;TRACE"
! DocumentationFile = ""
! DebugSymbols = "true"
! FileAlignment = "4096"
! IncrementalBuild = "false"
! NoStdLib = "false"
! NoWarn = ""
! Optimize = "false"
! OutputPath = "..\"
! RegisterForComInterop = "false"
! RemoveIntegerChecks = "false"
! TreatWarningsAsErrors = "false"
! WarningLevel = "4"
! />
! <Config
! Name = "Release"
! AllowUnsafeBlocks = "false"
! BaseAddress = "285212672"
! CheckForOverflowUnderflow = "false"
! ConfigurationOverrideFile = ""
! DefineConstants = "TRACE"
! DocumentationFile = ""
! DebugSymbols = "false"
! FileAlignment = "4096"
! IncrementalBuild = "false"
! NoStdLib = "false"
! NoWarn = ""
! Optimize = "true"
! OutputPath = "bin\Release\"
! RegisterForComInterop = "false"
! RemoveIntegerChecks = "false"
! TreatWarningsAsErrors = "false"
! WarningLevel = "4"
! />
! </Settings>
! <References>
! <Reference
! Name = "System"
! AssemblyName = "System"
! HintPath = "..\..\..\..\..\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.dll"
! />
! <Reference
! Name = "System.Data"
! AssemblyName = "System.Data"
! HintPath = "..\..\..\..\..\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.Data.dll"
! />
! <Reference
! Name = "System.XML"
! AssemblyName = "System.Xml"
! HintPath = "..\..\..\..\..\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.XML.dll"
! />
! </References>
! </Build>
! <Files>
! <Include>
! <File
! RelPath = "AssemblyInfo.cs"
! SubType = "Code"
! BuildAction = "Compile"
! />
! <File
! RelPath = "Atom.cs"
! SubType = "Code"
! BuildAction = "Compile"
! />
! <File
! RelPath = "PureData.cs"
! SubType = "Code"
! BuildAction = "Compile"
! />
! </Include>
! </Files>
! </CSHARP>
! </VisualStudioProject>
!
--- 1,105 ----
! <VisualStudioProject>
! <CSHARP
! ProjectType = "Local"
! ProductVersion = "7.10.3077"
! SchemaVersion = "2.0"
! ProjectGuid = "{FFBC9D2E-1FB7-4E82-B5DC-46B31F8A58A2}"
! >
! <Build>
! <Settings
! ApplicationIcon = ""
! AssemblyKeyContainerName = ""
! AssemblyName = "PureData"
! AssemblyOriginatorKeyFile = ""
! DefaultClientScript = "JScript"
! DefaultHTMLPageLayout = "Grid"
! DefaultTargetSchema = "IE50"
! DelaySign = "false"
! OutputType = "Library"
! PreBuildEvent = ""
! PostBuildEvent = ""
! RootNamespace = "PureData"
! RunPostBuildEvent = "OnBuildSuccess"
! StartupObject = ""
! >
! <Config
! Name = "Debug"
! AllowUnsafeBlocks = "true"
! BaseAddress = "285212672"
! CheckForOverflowUnderflow = "false"
! ConfigurationOverrideFile = ""
! DefineConstants = "DEBUG;TRACE"
! DocumentationFile = ""
! DebugSymbols = "true"
! FileAlignment = "4096"
! IncrementalBuild = "false"
! NoStdLib = "false"
! NoWarn = ""
! Optimize = "false"
! OutputPath = "..\"
! RegisterForComInterop = "false"
! RemoveIntegerChecks = "false"
! TreatWarningsAsErrors = "false"
! WarningLevel = "4"
! />
! <Config
! Name = "Release"
! AllowUnsafeBlocks = "true"
! BaseAddress = "285212672"
! CheckForOverflowUnderflow = "false"
! ConfigurationOverrideFile = ""
! DefineConstants = "TRACE"
! DocumentationFile = ""
! DebugSymbols = "false"
! FileAlignment = "4096"
! IncrementalBuild = "false"
! NoStdLib = "false"
! NoWarn = ""
! Optimize = "true"
! OutputPath = "bin\Release\"
! RegisterForComInterop = "false"
! RemoveIntegerChecks = "false"
! TreatWarningsAsErrors = "false"
! WarningLevel = "4"
! />
! </Settings>
! <References>
! <Reference
! Name = "System"
! AssemblyName = "System"
! HintPath = "..\..\..\..\..\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.dll"
! />
! <Reference
! Name = "System.Data"
! AssemblyName = "System.Data"
! HintPath = "..\..\..\..\..\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.Data.dll"
! />
! <Reference
! Name = "System.XML"
! AssemblyName = "System.Xml"
! HintPath = "..\..\..\..\..\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.XML.dll"
! />
! </References>
! </Build>
! <Files>
! <Include>
! <File
! RelPath = "AssemblyInfo.cs"
! SubType = "Code"
! BuildAction = "Compile"
! />
! <File
! RelPath = "Atom.cs"
! SubType = "Code"
! BuildAction = "Compile"
! />
! <File
! RelPath = "PureData.cs"
! SubType = "Code"
! BuildAction = "Compile"
! />
! </Include>
! </Files>
! </CSHARP>
! </VisualStudioProject>
!
Index: Atom.cs
===================================================================
RCS file: /cvsroot/pure-data/externals/clr/pd/Atom.cs,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** Atom.cs 28 Jan 2006 10:36:25 -0000 1.5
--- Atom.cs 6 Mar 2006 00:35:40 -0000 1.6
***************
*** 1,61 ****
using System;
using System.Runtime.InteropServices; // for structures
namespace PureData
{
- public enum AtomType {Null = 0, Float = 1, Symbol = 2, Pointer = 3};
-
[StructLayout (LayoutKind.Sequential)]
! sealed public class Symbol
{
! // this should NOT be public
! readonly private IntPtr ptr;
!
! public Symbol(IntPtr p)
! {
! ptr = p;
! }
!
! public Symbol(Symbol s)
! {
! ptr = s.ptr;
! }
public Symbol(string s)
{
! ptr = Core.GenSym(s);
}
!
! override public string ToString()
{
! return Core.EvalSym(this);
}
}
[StructLayout (LayoutKind.Sequential)]
! sealed public class Pointer
{
! public IntPtr ptr;
! }
! [StructLayout (LayoutKind.Explicit)]
! public struct Word
! {
! [FieldOffset(0)] public float w_float;
! [FieldOffset(0)] public Symbol w_symbol;
! [FieldOffset(0)] public Pointer w_pointer;
}
- //[StructLayout (LayoutKind.Explicit)]
[StructLayout (LayoutKind.Sequential)]
! sealed public class Atom
{
!
! public AtomType type;
! public Word word;
public Atom(float f)
{
type = AtomType.Float;
word.w_float = f;
}
--- 1,62 ----
using System;
using System.Runtime.InteropServices; // for structures
+ using System.Collections;
+ #if NET_2_0
+ using System.Collections.Generic;
+ #endif
namespace PureData
{
[StructLayout (LayoutKind.Sequential)]
! public unsafe struct Symbol
{
! // this should NOT be public (or at least read only)
! private readonly void *sym;
public Symbol(string s)
{
! sym = Core.SymGen(s);
}
!
! public override string ToString()
{
! return Core.SymEval(sym);
}
}
[StructLayout (LayoutKind.Sequential)]
! public unsafe struct Pointer
{
! private readonly void *ptr;
! public override string ToString()
! {
! if(sizeof(void *) == 4)
! return ((int)ptr).ToString();
! else
! return ((long)ptr).ToString();
! }
}
[StructLayout (LayoutKind.Sequential)]
! public unsafe struct Atom
{
! private enum AtomType {Null = 0, Float = 1, Symbol = 2, Pointer = 3};
!
! [StructLayout (LayoutKind.Explicit)]
! private struct Word
! {
! [FieldOffset(0)] public float w_float;
! [FieldOffset(0)] public Symbol w_sym;
! [FieldOffset(0)] public Pointer w_ptr;
! }
!
! private AtomType type;
! private Word word;
public Atom(float f)
{
type = AtomType.Float;
+ word = new Word();
word.w_float = f;
}
***************
*** 64,67 ****
--- 65,69 ----
{
type = AtomType.Float;
+ word = new Word();
word.w_float = (float)i;
}
***************
*** 70,74 ****
{
type = AtomType.Symbol;
! word.w_symbol = s;
}
--- 72,77 ----
{
type = AtomType.Symbol;
! word = new Word();
! word.w_sym = s;
}
***************
*** 76,104 ****
{
type = AtomType.Symbol;
! word.w_symbol = new Symbol(s);
}
! }
!
! // this struct is relative to this c struct, see clr.c
! /*
! // simplyfied atom
! typedef struct atom_simple atom_simple;
! typedef enum
! {
! A_S_NULL=0,
! A_S_FLOAT=1,
! A_S_SYMBOL=2,
! } t_atomtype_simple;
! typedef struct atom_simple
! {
! t_atomtype_simple a_type;
! union{
! float float_value;
! MonoString *string_value;
! } stuff;
! };
! */
! }
\ No newline at end of file
--- 79,270 ----
{
type = AtomType.Symbol;
! word = new Word();
! word.w_sym = new Symbol(s);
}
!
! public Atom(Pointer p)
! {
! type = AtomType.Pointer;
! word = new Word();
! word.w_ptr = p;
! }
!
! public bool IsFloat { get { return type == AtomType.Float; } }
! public bool IsSymbol { get { return type == AtomType.Symbol; } }
! public bool IsPointer { get { return type == AtomType.Pointer; } }
!
! public float ToFloat()
! {
! if(IsFloat)
! return word.w_float;
! else
! throw new System.InvalidCastException("Can't be cast to float.");
! }
!
! public Symbol ToSymbol()
! {
! if(IsSymbol)
! return word.w_sym;
! else
! throw new System.InvalidCastException("Can't be cast to Symbol.");
! }
!
! public Pointer ToPointer()
! {
! if(IsPointer)
! return word.w_ptr;
! else
! throw new System.InvalidCastException("Can't be cast to Pointer.");
! }
!
! override public string ToString()
! {
! if(IsFloat)
! return word.w_float.ToString();
! else if(IsSymbol)
! return word.w_sym.ToString();
! else if(IsPointer)
! return word.w_ptr.ToString();
! else
! // should never happen
! throw new System.InvalidProgramException("Internal error.");
! }
!
! public static explicit operator float(Atom a)
! {
! return a.ToFloat();
! }
!
! public static explicit operator Symbol(Atom a)
! {
! return a.ToSymbol();
! }
!
! public static explicit operator Pointer(Atom a)
! {
! return a.ToPointer();
! }
! }
! public class AtomListEnum
! : IEnumerator
! {
! public AtomList list;
! // Enumerators are positioned before the first element
! // until the first MoveNext() call.
! int position = -1;
! public AtomListEnum(AtomList l)
! {
! list = l;
! }
!
! public bool MoveNext()
! {
! return ++position < list.Count;
! }
!
! public void Reset()
! {
! position = -1;
! }
!
! public object Current
! {
! get
! {
! try
! {
! return list[position];
! }
! catch (IndexOutOfRangeException)
! {
! throw new InvalidOperationException();
! }
! }
! }
! }
!
!
! // attention: this is dangerous, because we could do the following
! // AtomList l2 = l;
! // with l also being an AtomList... the two private memebers will get copied, although atoms is only a temporary reference
!
! [StructLayout (LayoutKind.Sequential)]
! unsafe public struct AtomList
! #if NET_2_0
! : ICollection<Atom>
! #else
! : ICollection
! #endif
! {
! private readonly int len;
! private readonly Atom *atoms;
!
! public int Count { get { return len; } }
! #if NET_2_0
! public bool IsReadOnly { get { return false; } } // member of generic.ICollection<Atom> (C# 2.0)
! #endif
! public bool IsSynchronized { get { return false; } }
! public Object SyncRoot { get { return null; } }
!
! // protect this from being used
! private AtomList(AtomList a) { len = 0; atoms = null; }
!
! #if NET_2_0
! public void CopyTo(Atom[] array,int start)
! #else
! public void CopyTo(Array array,int start)
! #endif
! {
! if(len > array.GetUpperBound(0)+1-start)
! throw new System.ArgumentException("Destination array is not long enough.");
! int i;
! for(i = 0; i < len-start; ++i)
! array.SetValue(atoms[start+i],i);
! }
!
! public IEnumerator GetEnumerator()
! {
! return new AtomListEnum(this);
! }
!
! public Atom this[int i]
! {
! get
! {
! if(i < 0 || i >= len)
! throw new System.IndexOutOfRangeException("Index outside array bounds.");
! return atoms[i];
! }
! set
! {
! if(i < 0 || i >= len)
! throw new System.IndexOutOfRangeException("Index outside array bounds.");
! atoms[i] = value;
! }
! }
!
! #if !NET_2_0
! public static explicit operator Atom[](AtomList l)
! {
! Atom[] ret = new Atom[l.Count];
! int i;
! for(i = 0; i < l.Count; ++i) ret[i] = l.atoms[i];
! return ret;
! }
! #endif
!
! override public string ToString()
! {
! string n = "{";
! if(len > 0) {
! int i;
! for(i = 0; i < len-1; ++i) n += atoms[i].ToString()+",";
! n += atoms[i].ToString();
! }
! return n+"}";
! }
! }
! }
- Previous message: [PD-cvs] externals/hardware/arduino/examples PD_all_inputs.pd, NONE, 1.1 PD_two_potentiometers.pd, NONE, 1.1 PD_inputs_to_PD.pd, 1.1, 1.2 PD_send_potentiometer.pd, 1.1, 1.2
- Next message: [PD-cvs] externals/clr/external Counter.cs, 1.3, 1.4 external.csproj, 1.5, 1.6
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Pd-cvs
mailing list