#ifndef _MSCTOKEN_H_
#define _MSCTOKEN_H_
#include <PCSC/musclecard.h>
#include <map>
#include "MscWrappers.h"
#include "MscObject.h"
#include "MscKey.h"
#include "TokenContext.h"
class MscToken: public Tokend::TokenContext
{
public:
MscToken();
MscToken(MSCTokenConnection *connection) : mConnection(MscTokenConnection::optional(connection)) {};
virtual ~MscToken() {};
typedef std::map<std::string, MscObject *> ObjectMap;
typedef ObjectMap::iterator ObjIterator;
typedef ObjectMap::const_iterator ConstObjIterator;
typedef std::map<MSCUChar8, MscKey *> KeyMap;
typedef KeyMap::iterator KeyIterator;
typedef KeyMap::const_iterator ConstKeyIterator;
void loadobjects();
void dumpobjects();
MscObject &getObject(const std::string &objID);
MscKey &getKey(MSCUChar8 keyNum);
friend std::ostream& operator << (std::ostream& strm, const MscToken& oa);
protected:
MscTokenConnection *mConnection;
ObjectMap mObjects;
KeyMap mKeys;
public:
ConstObjIterator begin() const { return ConstObjIterator(mObjects.begin()); }
ConstObjIterator end() const { return ConstObjIterator(mObjects.end()); }
ObjIterator begin() { return ObjIterator(mObjects.begin()); }
ObjIterator end() { return ObjIterator(mObjects.end()); }
ConstKeyIterator kbegin() const { return ConstKeyIterator(mKeys.begin()); }
ConstKeyIterator kend() const { return ConstKeyIterator(mKeys.end()); }
};
std::ostream& operator << (std::ostream& strm, const MscToken& oa);
#endif