/**
 * 最初の著者:: トゥイー
 * リポジトリ情報:: $Id: PhraseProperty.hpp 64 2011-05-21 01:55:09Z yutaka_at_home $
 * 著作権:: Copyright (C) Ownway.info, 2011. All rights reserved.
 * ライセンス:: CPL(Common Public Licence)
 */

#ifndef _SPEECH_CONTROLLER_FRAMEWORK_SAPI_PHRASE_PROPETY_HPP_
#define _SPEECH_CONTROLLER_FRAMEWORK_SAPI_PHRASE_PROPETY_HPP_

#include <sphelper.h>

#include <string>

#include <boost/noncopyable.hpp>

namespace spcf {

	class PhraseProperty_i;

	/**
	 * プロパティです。
	 */
	class PhraseProperty : public boost::noncopyable {
	private:
		PhraseProperty_i* impl;

	public:
		/**
		 * プロパティを構築します。
		 */
		PhraseProperty();

		/**
		 * プロパティを構築します。
		 */
		PhraseProperty(const std::string& name);

		/**
		 * プロパティを構築します。
		 */
		PhraseProperty(const std::string& name, long val);

		/**
		 * プロパティを構築します。
		 */
		PhraseProperty(const std::string& name, const std::string& valstr);

		/**
		 * プロパティを構築します。
		 */
		PhraseProperty(const std::string& name, long val, const std::string& valstr);

		/**
		 * プロパティを破棄します。
		 */
		~PhraseProperty();

	public:
		/**
		 * プロパティが有効かどうかを判断します。
		 */
		operator bool() const;

		/**
		 * プロパティが無効かどうかを判断します。
		 */
		bool operator!() const;

	public:
		/**
		 * 名前を取得します。
		 */
		const std::string& getName() const;

		/**
		 * VALによって値が指定されているかどうかを判断します。
		 */
		bool hasVal() const;

		/**
		 * VALによって指定した値を取得します。
		 */
		long getVal() const;

		/**
		 * VALSTRによって文字列が指定されているかどうかを判断します。
		 */
		bool hasValStr() const;

		/**
		 * VALSTRに指定した文字列を取得します。
		 */
		const std::string& getValStr() const;
	};

}  // namespace spcf

#endif
