<?php

namespace Graphp\Algorithms\Property;

use Graphp\Algorithms\BaseGraph;

/**
 * Simple algorithms for working with Graph properties
 *
 * @link https://en.wikipedia.org/wiki/Graph_property
 */
class GraphProperty extends BaseGraph
{
    /**
     * checks whether this graph has no edges
     *
     * Also known as empty Graph. An empty Graph contains no edges, but can
     * possibly contain any number of isolated vertices.
     *
     * @return boolean
     */
    public function isEdgeless()
    {
        return $this->graph->getEdges()->isEmpty();
    }

    /**
     * checks whether this graph is a null graph (no vertex - and thus no edges)
     *
     * Each Edge is incident to two Vertices, or in case of an loop Edge,
     * incident to the same Vertex twice. As such an Edge can not exist when
     * no Vertices exist. So if we check we have no Vertices, we can also be
     * sure that no Edges exist either.
     *
     * @return boolean
     */
    public function isNull()
    {
        return $this->graph->getVertices()->isEmpty();
    }

    /**
     * checks whether this graph is trivial (one vertex and no edges)
     *
     * @return boolean
     */
    public function isTrivial()
    {
        return ($this->graph->getEdges()->isEmpty() && count($this->graph->getVertices()) === 1);
    }
}
