#pragma once
#include "../acl_cpp_define.hpp"
#include "diff_object.hpp"

namespace acl
{

class diff_string : public diff_object
{
public:
	/**
	 * 构造函数
	 * @param manager {diff_manager&}
	 * @param key {const char*} 以字符串方式表示的键，非空字符串
	 * @param val {const char*} 以字符串方式表示的值，非空字符串
	 */
	diff_string(diff_manager& manager, const char* key, const char* val);

	/**
	 * 设置本对象所在的区间值
	 * @param range {long long}
	 */
	void set_range(long long range);

	/**
	 * 获得本对象所在的区间值
	 * @return {long long}
	 */
	long long get_range(void) const
	{
		return range_;
	}

public:
	// override: 基类纯虚函数的实现
	const char* get_key(void) const;

	// override: 基类纯虚函数的实现
	const char* get_val(void) const;

	// override: 基类纯函数的实现
	bool operator== (const diff_object& obj) const;

	// @override
	bool check_range(long long range_from, long long range_to) const;

private:
	const char* key_;
	const char* val_;
	long long range_;

	// 析构函数声明为私有的，从而要求动态创建本类对象
	~diff_string(void);
};

} // namespace acl
