director_concept.h

Back to Director

pastel/sys/director/

// Description: Director concept
// Documentation: director.txt

#ifndef PASTELSYS_DIRECTOR_CONCEPT_H
#define PASTELSYS_DIRECTOR_CONCEPT_H

#include "pastel/sys/integer/integer_concept.h"

namespace Pastel
{

    //! Director
    /*! 
   A director is a function f : ZZ --> ZZ
   such that there exists k in ZZ such that
    
       f(n) in [k, n],   if n >= k, and
       f(n) in (n, k],   if n < k.
   */
    template <typename T, typename Integer>
    concept Director_Concept_ = 
        Integer_Concept<Integer> &&
        requires(T f, Integer n) {
        {f(n)} -> std::convertible_to<Integer>;
    };

    template <typename T, typename Integer>
    concept Director_Concept = 
        Director_Concept_<RemoveCvRef<T>, RemoveCvRef<Integer>>;

}

#endif