<?php
/** @license MIT
 * Copyright 2017 J. King, Dustin Wilson et al.
 * See LICENSE and AUTHORS files for details */

declare(strict_types=1);
namespace JKingWeb\Arsse\Context;

class Context extends AbstractContext {
    use BooleanMethods;
    use BooleanProperties;
    use ExclusionMethods;
    use ExclusionProperties;

    /** @var ExclusionContext */
    public $not;
    public $limit = 0;
    public $offset = 0;

    public function __construct() {
        $this->not = new ExclusionContext($this);
    }

    public function __clone() {
        // clone the exclusion context as well
        $this->not = clone $this->not;
    }

    /** @codeCoverageIgnore */
    public function __destruct() {
        unset($this->not);
    }

    public function limit(int $spec = null) {
        return $this->act(__FUNCTION__, func_num_args(), $spec);
    }

    public function offset(int $spec = null) {
        return $this->act(__FUNCTION__, func_num_args(), $spec);
    }
}