1 /* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 
3 /*
4  Copyright (C) 2005 StatPro Italia srl
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  <http://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 #include <ql/time/calendars/iceland.hpp>
21 
22 namespace QuantLib {
23 
Iceland(Market)24     Iceland::Iceland(Market) {
25         // all calendar instances share the same implementation instance
26         static ext::shared_ptr<Calendar::Impl> impl(new Iceland::IcexImpl);
27         impl_ = impl;
28     }
29 
isBusinessDay(const Date & date) const30     bool Iceland::IcexImpl::isBusinessDay(const Date& date) const {
31         Weekday w = date.weekday();
32         Day d = date.dayOfMonth(), dd = date.dayOfYear();
33         Month m = date.month();
34         Year y = date.year();
35         Day em = easterMonday(y);
36         if (isWeekend(w)
37             // New Year's Day
38             || (d == 1 && m == January)
39             // Holy Thursday
40             || (dd == em-4)
41             // Good Friday
42             || (dd == em-3)
43             // Easter Monday
44             || (dd == em)
45             // First day of Summer
46             || (d >= 19 && d <= 25 && w == Thursday && m == April)
47             // Ascension Thursday
48             || (dd == em+38)
49             // Pentecost Monday
50             || (dd == em+49)
51             // Labour Day
52             || (d == 1 && m == May)
53             // Independence Day
54             || (d == 17 && m == June)
55             // Commerce Day
56             || (d <= 7 && w == Monday && m == August)
57             // Christmas
58             || (d == 25 && m == December)
59             // Boxing Day
60             || (d == 26 && m == December))
61             return false; // NOLINT(readability-simplify-boolean-expr)
62         return true;
63     }
64 
65 }
66 
67