dynare/dynare++/utils/cc/pascal_triangle.hh

51 lines
941 B
C++
Raw Normal View History

// Copyright (C) 2005, Ondra Kamenik
// $Id: pascal_triangle.h 762 2006-05-22 13:00:07Z kamenik $
#ifndef PASCAL_TRIANGLE_H
#define PASCAL_TRIANGLE_H
#include <vector>
2017-05-16 16:30:27 +02:00
namespace ogu
{
using std::vector;
class PascalRow : public vector<int>
{
int k{1};
2017-05-16 16:30:27 +02:00
public:
2019-01-10 18:24:04 +01:00
PascalRow() : vector<int>{}
2017-05-16 16:30:27 +02:00
{
push_back(2);
}
void setFromPrevious(const PascalRow &prev);
void prolong(const PascalRow &prev);
void prolongFirst(int n);
void print() const;
};
class PascalTriangle
{
vector<PascalRow> tr;
public:
PascalTriangle()
{
tr.emplace_back();
2017-05-16 16:30:27 +02:00
}
2019-01-10 18:24:04 +01:00
PascalTriangle(const PascalTriangle &triang) = default;
PascalTriangle &operator=(const PascalTriangle &triang) = default;
2017-05-16 16:30:27 +02:00
int noverk(int n, int k);
void print() const;
protected:
void ensure(int n, int k);
int max_n() const;
int max_k() const;
};
};
extern ogu::PascalTriangle ptriang;
#endif