Boost logo

Boost Users :

From: Antonio Coralles (noche.suapie_at_[hidden])
Date: 2005-01-17 11:08:16

i'm writing on a programm which uses the boost date_time library
[boost-version = 1.32.0] heavily; while i normally programm in linux
using gcc-3.3.5 i also need to compile my program in windows from time
to time. because it makes life easier with another library [gtkmm-2.4.8]
i'm using mingw-3.4.2; everthing worked fine (my code contains about 10
000 lines using boost_date_time) until i started using a
boost::gregorian::year_based_generator. while gcc-3.3.5 in liux accepts
my code without even a single warning [with -Wall], mingw-3.4.2
complains - it seems that the compiler has problems with
calendar.hpp:60: error: variable or field `insertGenerator' declared void
calendar.hpp:60: error: expected `;' before '(' token
calendar.hpp:92: error: expected `)' before '*' token
calendar.hpp:95: error: using-declaration for non-member at class scope
calendar.hpp:95: error: expected `;' before '*' token

here is the header:

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

#include "boost/date_time/gregorian/gregorian.hpp"
#include <stdexcept>
#include <vector>
#include <map>
#ifndef BG
#define BG boost::gregorian

/*!@brief besides of providing you with information if the day you are
looking at is a
 * working day / saturday / sunday you can also store and
retrieve additional
 * information about specific dates */
class calendar
    enum dayChar { NORMAL_DAY = 0,
                   SATURDAY = 1,
                     SUNDAY = 2,
                   PUBLIC_HOLIDAY = 3,
                   SPECIAL_DAY = 4 };
    /*!@brief obtain a calendar for a given context*/
    static calendar& get(unsigned context=0);
    /*!@brief remove all calendar instances which have been created so
    static void removeAll();
    /*!@brief remove the instance for a given context
     * @remark you should call this function if you don't need the
instance associated with
     * with context any more to avoid memory leaks !
    static void remove(unsigned context);
    /*!@param[in] tDay the day to mark
     * @param[in] character the new character
     * @return true if the operation was succesfull
     * @note you cant lower the default character of a given day - e.g.
you can't
     * give a sunday the character of a normal working day*/
    bool markDay(const BG::date& tDay, dayChar character);
    /*!@return true if succesfull*/
    bool unmarkDay(const BG::date& tDay);
    /*!@brief mark a day for every year using a partial_date
     * @param[in] pDate a partial date
     * @param[in] character the new character*/
    void markDay(const BG::partial_date& pDate, dayChar character);
    /*!@return true if succesfull*/
    bool unmarkDay(const BG::partial_date& tDate);
    /*!@brief use this function to define more sophisticated (holi)days
     * @param[in] gen a pointer to a year_based_generator optained from new
     * @param[in] manage if true the calendar is responsible for deleting*/
    void insertGenerator(BG::year_based_generator *gen, dayChar
character, bool manage=true);
    /*!@brief removes all generators inserted with insertGenerator*/
    void removeGenerators();
    /*!@brief get information from our calendar*/
    dayChar getDayCharacter(const BG::date& thatDay) const;
    void reset();
    int getRegularWorkingDaysWithin(const BG::date_period& tPeriod) const;

    /*!@remark this function can be usefull to dump our calendar to a
file */
    const std::map<BG::date, dayChar>& getDateMap() const { return _dMap; }
    /*!@remark this function can be usefull to dump our calendar to a
file */
    const std::map<BG::partial_date, dayChar>& getPartialDateMap() const
{ return _pMap; }
    calendar() {};
    //no copy-construction, no assignement
    calendar(const calendar&);
    calendar& operator=(const calendar&);
    static dayChar getDefaultCharacter(const BG::date& tDate);

    std::map<BG::date, dayChar> _dMap;
    std::map<BG::partial_date, dayChar> _pMap;
    struct hlp
        hlp(BG::year_based_generator *gen, dayChar tChar, bool man)
        : generator(gen), character(tChar), manage(man) {}
        BG::year_based_generator *generator;
        dayChar character;
        bool manage;
    std::vector<hlp> _genVec;
    static std::map<unsigned, calendar*> _sc_calMap;

std::ostream& operator<<(std::ostream& os, calendar::dayChar dChar);
std::istream& operator>>(std::istream& is, calendar::dayChar& dChar);

maybe somebody can give me a hint - or maybe point out an error in this
header which is ignored by gcc-3.3.5.

Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at