+/* $Id: session.hpp,v 1.7 2005-10-15 14:09:09 adam Exp $
+ Copyright (c) 2005, Index Data.
+
+%LICENSE%
+ */
#ifndef SESSION_HPP
#define SESSION_HPP
#include <boost/thread/mutex.hpp>
namespace yp2 {
-
- class Session
+
+ class Session
{
+ //typedef unsigned long type;
public:
- //Session() {};
-
- /// returns next id, global state of id protected by boost::mutex
- long unsigned int id() {
- boost::mutex::scoped_lock scoped_lock(m_mutex);
- ++m_id;
- return m_id;
- };
+
+ /// create new session with new unique id
+ Session() {
+ boost::mutex::scoped_lock scoped_lock(m_mutex);
+ ++m_global_id;
+ m_id = m_global_id;
+ m_close = false;
+ };
+
+ /// copy session including old id
+ Session(const Session &s) : m_id(s.m_id), m_close(s.m_close) {};
+
+ Session& operator=(const Session &s) {
+ if (this != &s)
+ {
+ m_id = s.m_id;
+ m_close = s.m_close;
+ }
+ return *this;
+ }
+
+ unsigned long id() const {
+ return m_id;
+ };
+
+ bool is_closed() const {
+ return m_close;
+ };
+
+ /// mark session closed, can not be unset
+ void close() {
+ m_close = true;
+ };
+
private:
- // disabled because class is singleton
- // Session(const Session &);
-
- // disabled because class is singleton
- // Session& operator=(const Session &);
-
- /// static mutex to lock static m_id
- static boost::mutex m_mutex;
-
- /// static m_id to make sure that there is only one id counter
- static unsigned long int m_id;
-
+
+ unsigned long int m_id;
+ bool m_close;
+
+ /// static mutex to lock static m_id
+ static boost::mutex m_mutex;
+
+ /// static m_id to make sure that there is only one id counter
+ static unsigned long int m_global_id;
+
};
-
+
}
-// initializing static members
-boost::mutex yp2::Session::m_mutex;
-unsigned long int yp2::Session::m_id = 0;
-
-
#endif
/*
* Local variables:
* c-basic-offset: 4
* indent-tabs-mode: nil
+ * c-file-style: "stroustrup"
* End:
* vim: shiftwidth=4 tabstop=8 expandtab
*/