casacore
Loading...
Searching...
No Matches
Combinatorics.h
Go to the documentation of this file.
1// # Smooth.h: smooth vectors and arrays
2// # Copyright (C) 2010 by ESO (in the framework of the ALMA collaboration)
3// # Copyright (C) 1996,1997,1998,1999,2000,2001
4// # Associated Universities, Inc. Washington DC, USA.
5// #
6// # This library is free software; you can redistribute it and/or modify it
7// # under the terms of the GNU Library General Public License as published by
8// # the Free Software Foundation; either version 2 of the License, or (at your
9// # option) any later version.
10// #
11// # This library is distributed in the hope that it will be useful, but WITHOUT
12// # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13// # FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
14// # License for more details.
15// #
16// # You should have received a copy of the GNU Library General Public License
17// # along with this library; if not, write to the Free Software Foundation,
18// # Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
19// #
20// # Correspondence concerning AIPS++ should be addressed as follows:
21// # Internet email: casa-feedback@nrao.edu.
22// # Postal address: AIPS++ Project Office
23// # National Radio Astronomy Observatory
24// # 520 Edgemont Road
25// # Charlottesville, VA 22903-2475 USA
26
27#ifndef SCIMATH_COMBINATORICS_H
28#define SCIMATH_COMBINATORICS_H
29
30// # Includes
31#include <casacore/casa/aips.h>
32#include <casacore/casa/Arrays/Vector.h>
33
34#include <mutex>
35
36namespace casacore { // # NAMESPACE CASACORE - BEGIN
37
38// <summary>
39// Combinatorics related functions.
40// </summary>
41
42// <use visibility=export>
43
44// # <author>Dave Mehringer</author>
45// <reviewed reviewer="" date="yyyy/mm/dd" tests="" demos="">
46// </reviewed>
47
48// <prerequisite>
49// <li> <linkto class="Vector">Vector</linkto>
50// <li> <linkto class="Array">Array</linkto>
51// </prerequisite>
52
53// <etymology>
54// self-explanatory
55// </etymology>
56
57// <synopsis>
58// Various factorial and combinatorical functions.
59// </synopsis>
60
61// <motivation>
62// Binomial coefficients needed for Images/ImageProfileFitter
63// </motivation>
64
66 public:
67 // Get n!
68 static uInt factorial(const uInt n) {
69 fillCache(n);
70 return _factorialCache[n];
71 }
72
73 // "n choose k" = n!/(k!(n-k)!)
74 // Exception is thrown if k > n.
75 static uInt choose(const uInt n, const uInt k);
76
77 private:
78 static void fillCache(const uInt n);
79
81 static volatile uInt _factorialCacheSize; // # volatile for double checked lock
82 static std::mutex theirMutex;
83};
84} // namespace casacore
85
86#endif
static uInt factorial(const uInt n)
Get n!
static uInt choose(const uInt n, const uInt k)
"n choose k" = n!
static Vector< uInt > _factorialCache
static void fillCache(const uInt n)
static volatile uInt _factorialCacheSize
static std::mutex theirMutex
For temporary backward namespace compatibility, use casa as alias for casacore.
Definition mainpage.dox:28
unsigned int uInt
Definition aipstype.h:49