daily update on 20230320 by nitload youmu
This commit is contained in:
@@ -1,17 +1,30 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace StgSharp
|
||||
{
|
||||
public class ContainerNode<T> where T : INode
|
||||
public interface INode<T> where T : INode<T>
|
||||
{
|
||||
internal readonly T _this;
|
||||
internal ContainerNode<T> ID { get; }
|
||||
|
||||
internal void setID<T>(ContainerNode<T> id) where T : INode<T>;
|
||||
}
|
||||
|
||||
|
||||
public class ContainerNode<T> where T : INode<T>
|
||||
{
|
||||
internal readonly T _value;
|
||||
internal ContainerNode<T> _previous;
|
||||
internal ContainerNode<T> _next;
|
||||
internal ContainerNode<T> _side;
|
||||
|
||||
|
||||
public ContainerNode(T t)
|
||||
{
|
||||
_value = t;
|
||||
t.setID<T>(this);
|
||||
}
|
||||
|
||||
public virtual ContainerNode<T> Previous
|
||||
{
|
||||
@@ -33,13 +46,8 @@ namespace StgSharp
|
||||
|
||||
public T Value
|
||||
{
|
||||
get { return _this; }
|
||||
get { return _value; }
|
||||
}
|
||||
|
||||
public ContainerNode(T t)
|
||||
{
|
||||
_this = t;
|
||||
t.setID<T>(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace StgSharp
|
||||
{
|
||||
public interface INode
|
||||
{
|
||||
internal ContainerNode<INode> ID { get; }
|
||||
|
||||
internal void setID<T>(ContainerNode<T> id) where T:INode;
|
||||
}
|
||||
}
|
||||
@@ -1,25 +1,37 @@
|
||||
using System;
|
||||
using StgSharp.Logic;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace StgSharp
|
||||
{
|
||||
public class LinkedList<T> where T: INode
|
||||
public class LinkedList<T>:IEnumerable where T: INode
|
||||
{
|
||||
internal readonly ContainerNode<T> _heading;
|
||||
internal ContainerNode<T> _first;
|
||||
internal ContainerNode<T> _tail;
|
||||
|
||||
private ContainerNode<T> _cache;
|
||||
|
||||
public LinkedList()
|
||||
{
|
||||
_heading = new ContainerNode<T>(default(T));
|
||||
}
|
||||
|
||||
public T First
|
||||
{
|
||||
get { return _first._this; }
|
||||
set { _first = new ContainerNode<T>(value); }
|
||||
get { return _first._value; }
|
||||
set
|
||||
{
|
||||
_first = new ContainerNode<T>(value);
|
||||
_heading._next = _first;
|
||||
}
|
||||
}
|
||||
|
||||
public T Tail
|
||||
{
|
||||
get { return _tail._this; }
|
||||
get { return _tail._value; }
|
||||
set { _tail = new ContainerNode<T>(value); }
|
||||
}
|
||||
|
||||
@@ -53,8 +65,9 @@ namespace StgSharp
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
IEnumerator IEnumerable.GetEnumerator()
|
||||
{
|
||||
return new LinkedListEnumrator<T>(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace StgSharp.Logic
|
||||
{
|
||||
internal class LinkedListEnumrator<T> : IEnumerator where T : INode
|
||||
{
|
||||
private LinkedList<T> _target;
|
||||
ContainerNode<T> enumrator;
|
||||
|
||||
public LinkedListEnumrator(LinkedList<T> target)
|
||||
{
|
||||
_target = target;
|
||||
enumrator = target._heading;
|
||||
}
|
||||
|
||||
object IEnumerator.Current
|
||||
{
|
||||
get { return enumrator._value; }
|
||||
}
|
||||
|
||||
bool IEnumerator.MoveNext()
|
||||
{
|
||||
enumrator = enumrator._next;
|
||||
return enumrator == default(ContainerNode<T>);
|
||||
}
|
||||
|
||||
void IEnumerator.Reset()
|
||||
{
|
||||
enumrator = _target._heading;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10,18 +10,19 @@ namespace StgSharp
|
||||
{
|
||||
public LinkedList<Point> pointContainer;
|
||||
public LinkedList<IGeometry> geometryContainer;
|
||||
public LinkedList<Sensor> sensorContainer;
|
||||
public LinkedList<Sensor<INode>> sensorContainer;
|
||||
|
||||
public Line leftBoader;
|
||||
public Line rightBoader;
|
||||
public Line topBoader;
|
||||
public Line bottomBoader;
|
||||
|
||||
public Pool()
|
||||
{
|
||||
}
|
||||
|
||||
public void OnRender()
|
||||
{
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -1,28 +1,48 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Text;
|
||||
|
||||
namespace StgSharp
|
||||
{
|
||||
public class Sensor : INode
|
||||
{
|
||||
private ContainerNode<INode> _id;
|
||||
|
||||
ContainerNode<INode> INode.ID
|
||||
public delegate bool SensorRuleHandler(IGeometry target, IGeometry boarder);
|
||||
|
||||
public class Sensor<T>
|
||||
{
|
||||
internal IGeometry _boarder;
|
||||
internal IGeometry _target;
|
||||
internal SensorRuleHandler _rule;
|
||||
|
||||
|
||||
public IGeometry boarder
|
||||
{
|
||||
get { return _id; }
|
||||
get { return _boarder; }
|
||||
}
|
||||
|
||||
void INode.setID<T>(ContainerNode<T> id)
|
||||
public IGeometry target
|
||||
{
|
||||
if (id == null)
|
||||
{
|
||||
_id = id as ContainerNode<INode>;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new ArgumentNullException("Cannot set id teice!");
|
||||
}
|
||||
get { return _target; }
|
||||
set { _target = value; }
|
||||
}
|
||||
|
||||
public SensorRuleHandler Rule
|
||||
{
|
||||
get { return _rule; }
|
||||
set { _rule = value; }
|
||||
}
|
||||
|
||||
public static Sensor<T> operator +(Sensor<T> sensor, SensorRuleHandler rule)
|
||||
{
|
||||
sensor._rule += rule;
|
||||
return sensor;
|
||||
}
|
||||
|
||||
public static Sensor<T> operator -(Sensor<T> sensor, SensorRuleHandler rule)
|
||||
{
|
||||
sensor._rule -= rule;
|
||||
return sensor;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user