Coverage Report

Created: 2026-08-14 07:10

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/quantlib/ql/time/ecb.hpp
Line
Count
Source
1
/* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
3
/*
4
 Copyright (C) 2009 Ferdinando Ametrano
5
6
 This file is part of QuantLib, a free-software/open-source library
7
 for financial quantitative analysts and developers - http://quantlib.org/
8
9
 QuantLib is free software: you can redistribute it and/or modify it
10
 under the terms of the QuantLib license.  You should have received a
11
 copy of the license along with this program; if not, please email
12
 <quantlib-dev@lists.sf.net>. The license is also available online at
13
 <https://www.quantlib.org/license.shtml>.
14
15
 This program is distributed in the hope that it will be useful, but WITHOUT
16
 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
17
 FOR A PARTICULAR PURPOSE.  See the license for more details.
18
*/
19
20
/*! \file ecb.hpp
21
    \brief European Central Bank reserve maintenance date functions
22
*/
23
24
#ifndef quantlib_ecb_hpp
25
#define quantlib_ecb_hpp
26
27
#include <ql/time/date.hpp>
28
#include <set>
29
#include <vector>
30
31
namespace QuantLib {
32
33
    //! European Central Bank reserve maintenance dates
34
    struct ECB {
35
36
        static const std::set<Date>& knownDates();
37
        static void addDate(const Date& d);
38
        static void removeDate(const Date& d);
39
40
        //! maintenance period start date in the given month/year
41
        static Date date(Month m,
42
0
                         Year y) { return nextDate(Date(1, m, y) - 1); }
43
44
        /*! returns the ECB date for the given ECB code
45
            (e.g. March xxth, 2013 for MAR10).
46
47
            \warning It raises an exception if the input
48
                     string is not an ECB code
49
        */
50
        static Date date(const std::string& ecbCode,
51
                         const Date& referenceDate = Date());
52
53
        /*! returns the ECB code for the given date
54
            (e.g. MAR10 for March xxth, 2010).
55
56
            \warning It raises an exception if the input
57
                     date is not an ECB date
58
        */
59
        static std::string code(const Date& ecbDate);
60
61
        //! next maintenance period start date following the given date
62
        static Date nextDate(const Date& d = Date());
63
64
        //! next maintenance period start date following the given ECB code
65
        static Date nextDate(const std::string& ecbCode,
66
0
                             const Date& referenceDate = Date()) {
67
0
            return nextDate(date(ecbCode, referenceDate));
68
0
        }
69
70
        //! next maintenance period start dates following the given date
71
        static std::vector<Date> nextDates(const Date& d = Date());
72
73
        //! next maintenance period start dates following the given code
74
        static std::vector<Date> nextDates(const std::string& ecbCode,
75
0
                                           const Date& referenceDate = Date()) {
76
0
            return nextDates(date(ecbCode, referenceDate));
77
0
        }
78
79
        /*! returns whether or not the given date is
80
            a maintenance period start date */
81
0
        static bool isECBdate(const Date& d) {
82
0
            Date date = nextDate(d-1);
83
0
            return d==date;
84
0
        }
85
86
        //! returns whether or not the given string is an ECB code
87
        static bool isECBcode(const std::string& in);
88
89
        //! next ECB code following the given date
90
0
        static std::string nextCode(const Date& d = Date()) {
91
0
            return code(nextDate(d));
92
0
        }
93
94
        //! next ECB code following the given code
95
        static std::string nextCode(const std::string& ecbCode);
96
97
    };
98
99
}
100
101
#endif