powerest.cpp

Go to the documentation of this file.
00001 /*****************************************************************************
00002     
00003     powerest.cpp -- Описание см. в файле powerest.hpp.
00004 
00005     Этот файл является частью библиотеки Arageli.
00006 
00007     Copyright (C) Nikolai Yu. Zolotykh, 1999--2006
00008     Copyright (C) Sergey S. Lyalin, 2005
00009     University of Nizhni Novgorod, Russia
00010 
00011 *****************************************************************************/
00012 
00013 #include "config.hpp"
00014 
00015 #if !defined(ARAGELI_INCLUDE_CPP_WITH_EXPORT_TEMPLATE) || \
00016     defined(ARAGELI_INCLUDE_CPP_WITH_EXPORT_TEMPLATE_POWEREST)
00017 
00018 #include "powerest.hpp"
00019 
00020 
00021 namespace Arageli
00022 {
00023 
00024 
00025 template <typename T, typename I, typename T_factory>
00026 T power (T a, I n, const T_factory& tfctr)
00027 {
00028     ARAGELI_ASSERT_0(!is_null(a) || is_positive(n));
00029     
00030     T res = tfctr.unit(a);
00031     while(!is_null(n))
00032     {
00033         if(is_odd(n))res = res * a;
00034         a *= a;
00035         n >>= 1;
00036     }
00037     
00038     return res;
00039 }
00040 
00041 
00042 } // namespace Arageli
00043 
00044 #endif
00045 

Generated on Thu Aug 31 17:38:08 2006 for Arageli by  doxygen 1.4.7