using System;
using System.Collections.Generic;
using Artemis.Core.Events;
namespace Artemis.Core
{
///
/// Represents a collection of s on a
///
public interface IPinCollection : IEnumerable
{
///
/// Gets the node the pin collection belongs to
///
INode Node { get; }
///
/// Gets the name of the pin collection
///
string Name { get; }
///
/// Gets the direction of the pin collection and all its pins
///
PinDirection Direction { get; }
///
/// Gets the type of values the pin collection and all its pins holds
///
Type Type { get; }
///
/// Occurs when a pin was added to the collection
///
event EventHandler> PinAdded;
///
/// Occurs when a pin was removed from the collection
///
event EventHandler> PinRemoved;
///
/// Creates a new pin compatible with this collection
///
/// The newly created pin
IPin CreatePin();
///
/// Adds the provided to the collection
///
void Add(IPin pin);
///
/// Removes the provided from the collection
///
/// The pin to remove
bool Remove(IPin pin);
///
/// Resets the pin collection, causing its pins to re-evaluate the next time its value is requested
///
void Reset();
}
}