using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;

namespace CategoryTheory
{
    /// <summary>
    /// Category with direct sum
    /// </summary>
    public interface IDirectSumCategory : ICategory
    {

        /// <summary>
        /// Gets direct sum
        /// </summary>
        /// <param name="source">Source</param>
        /// <param name="product">Direct sum</param>
        /// <param name="arrows">Arrows from sum components</param>
        /// <returns>Direct sum</returns>
        ICategoryObject GetDirectSum(ArrayList objects, ArrayList arrows);

        /// <summary>
        /// Gets arrow from direct sum
        /// </summary>
        /// <param name="target">Arrow target</param>
        /// <param name="sum">Direct sum</param>
        /// <param name="arrows">Arrows from objects</param>
        /// <returns>Arrow from direct sum</returns>
        ICategoryArrow GetArrowFromDirectSum(ICategoryObject target, ICategoryObject sum, ArrayList arrows);
    }

}
