|
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