当前位置: 首页>>代码示例>>C++>>正文


C++ string::clear方法代码示例

本文整理汇总了C++中acl::string::clear方法的典型用法代码示例。如果您正苦于以下问题:C++ string::clear方法的具体用法?C++ string::clear怎么用?C++ string::clear使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在acl::string的用法示例。


在下文中一共展示了string::clear方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: get

	bool mem_cache::get(const acl::string& key, acl::string& buf, unsigned short* flags)
	{
		bool has_tried = false;
		buf.clear();

		m_line.format("get %s\r\n", key.c_str());

	AGAIN:
		if (open() == false)
			return (false);
		if (m_conn->write(m_line) < 0)
		{
			close();
			if (m_retry && !has_tried)
			{
				has_tried = true;
				goto AGAIN;
			}
			m_ebuf.format("write get(%s) error", key.c_str());
			return (false);
		}

		// 读取服务器响应行
		if (m_conn->gets(m_line) == false)
		{
			close();
			if (m_retry && !has_tried)
			{
				has_tried = true;
				goto AGAIN;
			}
			m_ebuf.format("reply for get(%s) error", key.c_str());
			return (false);
		}
		else if (m_line == "END")
		{
			m_ebuf.format("not found");
			return (false);
		}
		else if (error_happen(m_line.c_str()))
		{
			close();
			return (false);
		}

		// VALUE {key} {flags} {bytes}\r\n
		ACL_ARGV* tokens = acl_argv_split(m_line.c_str(), " \t");
		if (tokens->argc < 4 || strcasecmp(tokens->argv[0], "VALUE") != 0)
		{
			close();
			m_ebuf.format("server error for get(%s)", key.c_str());
			acl_argv_free(tokens);
			return (false);
		}
		if (flags)
			*flags = (unsigned short) atoi(tokens->argv[2]);

		int len = atoi(tokens->argv[3]);
		if (len < 0)
		{
			close();
			m_ebuf.format("value's len < 0");
			acl_argv_free(tokens);
			return (false);
		}
		else if (len == 0)
		{
			acl_argv_free(tokens);
			return (true);
		}
		acl_argv_free(tokens);

		// 得需要保证足够的空间能容纳读取的数据,该种方式
		// 可能会造成数据量非常大时的缓冲区溢出!

		char  tmp[4096];
		int   n;
		while (true)
		{
			n = sizeof(tmp);
			if (n > len)
				n = len;
			if ((n = m_conn->read(tmp, n, false)) < 0)
			{
				close();
				m_ebuf.format("read data for get cmd error");
				return (false);
			}
			buf.append(tmp, n);
			len -= n;
			if (len <= 0)
				break;
		}

		// 读取数据尾部的 "\r\n"
		if (m_conn->gets(m_line) == false)
		{
			close();
			m_ebuf.format("read data's delimiter error");
			return (false);
//.........这里部分代码省略.........
开发者ID:aaronshang,项目名称:acl,代码行数:101,代码来源:mem_cache.cpp


注:本文中的acl::string::clear方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。