1/* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
3/*
4Copyright (C) 2000, 2001, 2002, 2003 RiskMap srl
5Copyright (C) 2017 Francois Botha
6
7This file is part of QuantLib, a free-software/open-source library
8for financial quantitative analysts and developers - http://quantlib.org/
9
10QuantLib is free software: you can redistribute it and/or modify it
11under the terms of the QuantLib license. You should have received a
12copy of the license along with this program; if not, please email
13<quantlib-dev@lists.sf.net>. The license is also available online at
14<http://quantlib.org/license.shtml>.
15
16This program is distributed in the hope that it will be useful, but WITHOUT
17ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
18FOR A PARTICULAR PURPOSE. See the license for more details.
19*/
20
21#include <ql/time/calendars/botswana.hpp>
22
23namespace QuantLib {
24
25 Botswana::Botswana() {
26 // all calendar instances share the same implementation instance
27 static ext::shared_ptr<Calendar::Impl> impl(new Botswana::Impl);
28 impl_ = impl;
29 }
30
31 bool Botswana::Impl::isBusinessDay(const Date& date) const {
32 Weekday w = date.weekday();
33 Day d = date.dayOfMonth(), dd = date.dayOfYear();
34 Month m = date.month();
35 Year y = date.year();
36 Day em = easterMonday(y);
37 if (isWeekend(w)
38 // New Year's Day (possibly moved to Monday or Tuesday)
39 || ((d == 1 || (d == 2 && w == Monday) || (d == 3 && w == Tuesday))
40 && m == January)
41 // Good Friday
42 || (dd == em - 3)
43 // Easter Monday
44 || (dd == em)
45 // Labour Day, May 1st (possibly moved to Monday)
46 || ((d == 1 || (d == 2 && w == Monday))
47 && m == May)
48 // Ascension
49 || (dd == em + 38)
50 // Sir Seretse Khama Day, July 1st (possibly moved to Monday)
51 || ((d == 1 || (d == 2 && w == Monday))
52 && m == July)
53 // Presidents' Day (third Monday of July)
54 || ((d >= 15 && d <= 21) && w == Monday && m == July)
55 // Independence Day, September 30th (possibly moved to Monday)
56 || ((d == 30 && m == September) ||
57 (d == 1 && w == Monday && m == October))
58 // Botswana Day, October 1st (possibly moved to Monday or Tuesday)
59 || ((d == 1 || (d == 2 && w == Monday) || (d == 3 && w == Tuesday))
60 && m == October)
61 // Christmas
62 || (d == 25 && m == December)
63 // Boxing Day (possibly moved to Monday)
64 || ((d == 26 || (d == 27 && w == Monday))
65 && m == December)
66 )
67 return false; // NOLINT(readability-simplify-boolean-expr)
68 return true;
69 }
70
71}
72
73

source code of quantlib/ql/time/calendars/botswana.cpp