예제 #1
0
      void Remove(const std::string& string)
      {
         const size_t hash = SdbmHash(string);
         PimplCollection& pimpls(PimplCollectionFromHash(hash));

         pimpls.erase(Find(pimpls, string));
         if(pimpls.empty())
            RemovePimplCollection(hash);
      }
예제 #2
0
      Private::String& FromString(const std::string& string)
      {
         PimplCollection& pimpls(PimplCollectionFromHash(SdbmHash(string)));

         PimplCollection::iterator f = Find(pimpls, string);
         if(f != pimpls.end())
            return *f;

         pimpls.push_back(new Private::String(string));
         return pimpls.back();
      }
예제 #3
0
int main(int argc, char const *[])
{
	std::string str="123456";
	std::cout<<str<<std::endl;
	typedef std::map<std::string, CacheServer> ServerMap;
	ServerMap servers;
	Consistent::HashRing<std::string,std::string,SdbmHash> ring(4,SdbmHash());

	//Create some cache servers
	servers["cach1.example.com"]=CacheServer();
	servers["cach2.example.com"]=CacheServer();
	servers["cach3.example.com"]=CacheServer();

	//Add their host names to the hash ring
	for (ServerMap::const_iterator it = servers.begin();it != servers.end(); ++it) {
		std::cout << "Adding " << it->first << " with hash " << ring.AddNode(it->first) <<std::endl;
	}

	//Store some data
	const char* fruits[] = {"apple","pear","banana","orange","cherry","apricot"};
	const char* colours[] = {"red","green","yellow","orange","black","pink"};
	const unsigned int numfruits = sizeof(fruits)/sizeof(char*);
	//std::cout<< "sizeof(fruits):" <<sizeof(fruits) << " sizeof (char*):" <<sizeof(char*) <<std::endl; 
	for (unsigned int f = 0; f<numfruits;f++) {
		std::string host = ring.GetNode(fruits[f]);
		std::cout << "Storing " <<fruits[f] << " on server " <<host <<std::endl;
		servers[host].Put(fruits[f],colours[f]);
	}

	//Read it back
	for (unsigned int f = 0; f< numfruits; f++) {
		std::string host = ring.GetNode(fruits[f]);
		std::string colour =servers[host].Get(fruits[f]);
		std::cout << "Found " << fruits[f] << " on server "<< host << " (" <<colour << ")" <<std::endl;
	}
	return 0;
}