/* vim: set ts=4: */

#include <string>
#include <vector>
//FIXME: depends on pcre++ and thus pcre... i'd like to modify it so it doesn't
// depend on anything but STL, but that's not a major priority
#include <pcre++.h>

class URI_InvalidURL { };
class URI_InvalidPath { };

class URI
{
private:
	// thingies
	std::string _prot;
	std::string _user;
	std::string _pass;
	std::string _port;
	std::string _host;
	//std::string _doma;
	std::string _path;
	std::string _quer;
	std::string _anch;
	std::vector<std::string> _vpath;
	pcrepp::Pcre _regex;
	bool _path_end_slash;
	bool _path_abs;
	// private methods
	void _lcase(std::string &);
	void _one_time_setup();
	void _set_path_flags();
	void _split_path();
	void _split_query();
	void _join_path();
public:
	URI();
	URI(const std::string &);
	~URI();
	void inspect();
	void reset();
	//URI operator= (const URI&);
	void parse(const std::string &);
	URI merge(const std::string &);
	bool isAbsolute();
	bool isPathAbsolute();
	bool isPathDirectory();
	std::string getProtocol();
	std::string getUser();
	std::string getPass();
	std::string getPort();
	std::string getHost();
	std::string getPath();
	std::vector<std::string> getPathVector();
	void setPath(const std::string &);
	void setPath(const std::vector<std::string>);
	std::string getFile();
	std::string getQuery();
	std::string getAnchor();
	std::string toString();
};



