/* * check_util.h * * Created on: Jan 25, 2010 * Author: sears */ #ifndef CHECK_UTIL_H_ #define CHECK_UTIL_H_ #include #include #include bool mycmp(const std::string & k1,const std::string & k2) { //for char* ending with \0 return strcmp(k1.c_str(),k2.c_str()) < 0; //for int32_t //printf("%d\t%d\n",(*((int32_t*)k1)) ,(*((int32_t*)k2))); //return (*((int32_t*)k1)) <= (*((int32_t*)k2)); } //must be given a sorted array void removeduplicates(std::vector *arr) { for(int i=arr->size()-1; i>0; i--) { if(! (mycmp((*arr)[i], (*arr)[i-1]) || mycmp((*arr)[i-1], (*arr)[i]))) arr->erase(arr->begin()+i); } } //must be given a sorted array // XXX probably don't need two copies of this function. void removeduplicates(std::vector &arr) { for(int i=arr.size()-1; i>0; i--) { if(! (mycmp(arr[i], arr[i-1]) || mycmp(arr[i-1], arr[i]))) arr.erase(arr.begin()+i); } } void getnextdata(std::string &data, int avg_len) { int str_len = (rand()%(avg_len*2)) + 3; data = std::string(str_len, rand()%10+48); /* char *rc = (char*)malloc(str_len); for(int i=0; i *arr, int avg_len=50, bool duplicates_allowed=false) { for ( int j=0; jpush_back(str); } } void preprandstr(int count, std::vector &arr, int avg_len=50, bool duplicates_allowed=false) { for ( int j=0; jh_addr, (char *)&serveraddr.sin_addr.s_addr, server->h_length); serveraddr.sin_port = htons(serverport); /* connect: create a connection with the server */ if (connect(sockfd, (sockaddr*) &serveraddr, sizeof(serveraddr)) < 0) { printf("ERROR connecting\n"); return 0; } //send the opcode int n = write(sockfd, (byte*) &opcode, sizeof(uint8_t)); assert(n == sizeof(uint8_t)); //send the tuple n = write(sockfd, (byte*) tuple.keylen, sizeof(uint32_t)); assert( n == sizeof(uint32_t)); n = write(sockfd, (byte*) tuple.datalen, sizeof(uint32_t)); assert( n == sizeof(uint32_t)); logserver::writetosocket(sockfd, (byte*) tuple.key, *tuple.keylen); if(!tuple.isDelete() && *tuple.datalen != 0) logserver::writetosocket(sockfd, (byte*) tuple.data, *tuple.datalen); //read the reply code uint8_t rcode; n = read(sockfd, (byte*) &rcode, sizeof(uint8_t)); if(rcode == logserver::OP_SENDING_TUPLE) { datatuple *rcvdtuple = (datatuple*)malloc(sizeof(datatuple)); //read the keylen rcvdtuple->keylen = (uint32_t*) malloc(sizeof(uint32_t)); n = read(sockfd, (byte*) rcvdtuple->keylen, sizeof(uint32_t)); assert(n == sizeof(uint32_t)); //read the datalen rcvdtuple->datalen = (uint32_t*) malloc(sizeof(uint32_t)); n = read(sockfd, (byte*) rcvdtuple->datalen, sizeof(uint32_t)); assert(n == sizeof(uint32_t)); //read key rcvdtuple->key = (byte*) malloc(*rcvdtuple->keylen); logserver::readfromsocket(sockfd, (byte*) rcvdtuple->key, *rcvdtuple->keylen); if(!rcvdtuple->isDelete()) { //read key rcvdtuple->data = (byte*) malloc(*rcvdtuple->datalen); logserver::readfromsocket(sockfd, (byte*) rcvdtuple->data, *rcvdtuple->datalen); } close(sockfd); return rcvdtuple; } else assert(rcode == logserver::OP_SUCCESS); close(sockfd); return 0; } #endif /* CHECK_UTIL_H_ */