/*
 *  Name.h
 *  openChams
 *
 *  Created by damien dupuis on 18/12/09.
 *  Copyright 2009 UPMC / LIP6. All rights reserved.
 *
 */

#ifndef __OPENCHAMS_NAME_H__
#define __OPENCHAMS_NAME_H__

#include <string>
#include <map>

#include "OpenChamsException.h"

namespace OpenChams {
class Name {
    public:
    Name(std::string);
	Name(const char*);
    
	bool operator==(const Name&);
	bool operator==(const std::string&);
	bool operator<(const Name) const;
    
	inline const std::string& getString() const;
        
    private:
    unsigned long _id;
	const std::string *_str;
    
	static std::map<std::string, unsigned long> _dict;
	static unsigned long              _globalId;
};
    
inline const std::string& Name::getString() const{
    if (!_str) {
        throw OpenChamsException("[ERROR] Name object has no string");
    }
    return *_str;
}

} // namespace
#endif