/* Copyright (C) 2015 Alejandro Mujica (amujica en cenditel.gob.ve) José Angel Contreras (jancontreras en cenditel.gob.ve) Antonio Araujo (aaraujo en cenditel.gob.ve) Pedro Buitrago (pbuitrago en cenditel.gob.ve) CENDITEL Fundación Centro Nacional de Desarrollo e Investigación en Tecnologías Libres Este programa es software libre; Usted puede usarlo bajo los términos de la licencia de software GPL versión 2.0 de la Free Software Foundation. Este programa se distribuye con la esperanza de que sea útil, pero SIN NINGUNA GARANTÍA; tampoco las implícitas garantías de MERCANTILIDAD o ADECUACIÓN A UN PROPÓSITO PARTICULAR. Consulte la licencia GPL para más detalles. Usted debe recibir una copia de la GPL junto con este programa; si no, escriba a la Free Software Foundation Inc. 51 Franklin Street,5 Piso, Boston, MA 02110-1301, USA. */ /* Este archivo contiene la definiciones y (en algunos casos) implementaciones de funciones utilitarias para problemas presentes en el proyecto. Creado por: Alejandro J. Mujica Fecha de creación: */ # ifndef UTIL_H # define UTIL_H # include /** Calcula la potencia @f$x^y@f$ con @f$x, y \in \mathcal{Z}^+@f$. * * @tparam NumberType * * @pre NumberType debe corresponder a alguno de los tipos enteros sin signo * de la biblioteca estándar de C++. * * * @param base Base de la operación. * @param exp Exponente de la operación. * * @return el resultado de la operación de elevar base al exponente. */ template NumberType positive_int_power(const NumberType & base, const NumberType & exp) { static_assert(std::is_integral::value and std::is_unsigned::value, "Template argument is not an unsigned integral type"); NumberType ret_val(1); for (NumberType i = 0; i < exp; ++i) ret_val *= base; return ret_val; } # endif // UTIL_H