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
year_based_generator:
 
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
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
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.
*/

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

/*!@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
{
    public:
   
    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
far*/
    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; }
   
    private:
    calendar() {};
    ~calendar();
    //no copy-construction, no assignement
    calendar(const calendar&);
    calendar& operator=(const calendar&);
   
    static dayChar getDefaultCharacter(const BG::date& tDate);

    //data
    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);
#endif

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


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net