code
#include "memcache.h"
endcode


################################################################################
function mc_new()
define lv_mc integer
code
lv_mc=(long)mc_new();
endcode
return lv_mc
end function


################################################################################
function mc_server_add(lv_mc,lv_host,lv_port)
define lv_mc integer
define lv_host char(20)
define lv_port char(20)
define lv_rcode integer
code
A4GL_trim(lv_host);
A4GL_trim(lv_port);
lv_rcode=mc_server_add((struct memcache *)lv_mc,lv_host,lv_port);
endcode
display "lv_rcode=",lv_rcode
return lv_rcode
end function




################################################################################
function mc_server_add4(lv_mc,lv_host)
define lv_mc integer
define lv_host char(40)
define lv_rcode integer
code
A4GL_trim(lv_host);
lv_rcode=mc_server_add4((struct memcache *)lv_mc,lv_host);
endcode
return lv_rcode
end function


################################################################################
function mc_add(lv_mc, lv_key, lv_val, lv_bytes) 
define lv_mc integer
define lv_key char(255)
define lv_val integer
define lv_bytes integer
code
A4GL_trim(lv_key);
printf("KEY=%s lv_val=%p bytes=%ld\n",lv_key,(void *)lv_val,(long)lv_bytes);
mc_add((struct memcache *)lv_mc,lv_key,strlen(lv_key),(void *)lv_val,lv_bytes,0,0);
endcode
end function

################################################################################
function mc_add_str(lv_mc, lv_key, lv_val) 
define lv_mc integer
define lv_key char(255)
define lv_val char(255)
code
A4GL_trim(lv_key);
A4GL_trim(lv_val);
  mc_add((struct memcache *)lv_mc,  lv_key, strlen(lv_key), lv_val,strlen(lv_val),0,0);
  //mc_add(lv_mc,lv_key  , strlen(lv_key) , "test",strlen("test"),0,0);
endcode
end function



################################################################################
function mc_replace(lv_mc, lv_key,  lv_val, lv_bytes)
define lv_key char(255)
define lv_mc integer
define lv_ok integer
define lv_val,lv_bytes integer
code
A4GL_trim(lv_key);
if (mc_replace((struct memcache *)lv_mc,lv_key,strlen(lv_key),(void *)lv_val,lv_bytes,0,0)) {
	lv_ok=1;
} else {
	lv_ok=0;
}
endcode
return lv_ok
end function


################################################################################
function mc_replace_str(lv_mc, lv_key,  lv_val)
define lv_key char(255)
define lv_mc integer
define lv_ok integer
define lv_val char(255)
code
A4GL_trim(lv_key);
A4GL_trim(lv_val);

if (mc_replace((struct memcache *)lv_mc,lv_key,strlen(lv_key),(void *)lv_val,strlen(lv_val)+1,0,0)) {
	lv_ok=1;
} else {
	lv_ok=0;
}

endcode
return lv_ok
end function



################################################################################
function mc_req_new() 
define lv_req integer
code
lv_req=(long)mc_req_new();
endcode
return lv_req
end function



################################################################################
function mc_req_add(lv_req, lv_key)
define lv_req integer
define lv_key char(255)
define lv_res integer
code
	A4GL_trim(lv_key);
 	lv_res=(long)mc_req_add((struct memcache_req *)lv_req, lv_key, strlen(lv_key));
endcode
return lv_res
end function


################################################################################
function mc_get(lv_mc, lv_req)
define lv_mc integer
define lv_req integer
code
	mc_get((struct memcache *)lv_mc,(struct memcache_req *)lv_req);
endcode
end function



function mc_aget_str(lv_mc,lv_key)
define lv_mc integer
define lv_key char(255)
define lv_ptr integer
define lv_val char(255)
code
A4GL_trim(lv_key);
lv_ptr=(long)mc_aget((struct memcache *)lv_mc,lv_key,strlen(lv_key));
if (lv_ptr) strcpy(lv_val,(char *)lv_ptr);
endcode
return lv_val
end function



function mc_aget_rec(lv_mc,lv_key,lv_optr,lv_size)
define lv_mc integer
define lv_key char(255)
define lv_ptr integer
define lv_optr,lv_size integer

code
A4GL_trim(lv_key);
lv_ptr=(long)mc_aget((struct memcache *)lv_mc,lv_key,strlen(lv_key));
if (lv_ptr) {
	memcpy((void *)lv_optr,(void *)lv_ptr,lv_size);
}
free((void *)lv_ptr);
endcode
end function


################################################################################
function mc_set(lv_mc, lv_key, lv_val, lv_bytes)
define lv_key char(255)
define lv_val,lv_bytes integer
define lv_mc integer
code
A4GL_trim(lv_key);
mc_set((struct memcache *)lv_mc,lv_key,strlen(lv_key),(void *)lv_val,lv_bytes,0,0);
endcode
end function

################################################################################
function mc_set_str(lv_mc, lv_key, lv_val)
define lv_key char(255)
define lv_val char(255)
define lv_mc integer
code
A4GL_trim(lv_key);
A4GL_trim(lv_val);
mc_set((struct memcache *)lv_mc,lv_key,strlen(lv_key),lv_val,strlen(lv_val)+1,0,0);
endcode
end function


################################################################################
function mc_res_free_on_delete(lv_res, lv_yesno) 
define lv_yesno integer
define lv_res integer
code
mc_res_free_on_delete((struct memcache_res *)lv_res,lv_yesno);
endcode

end function

################################################################################
function mc_res_free(lv_req, lv_res)
define lv_req integer
define lv_res integer
code
mc_res_free((struct memcache_req *)lv_req,(struct memcache_res *)lv_res);
endcode

end function



################################################################################
function mc_stats(lv_mc)
define lv_mc integer
define lv_rec record
  pid integer,
  version char (30),
  curr_items integer,
  total_items integer,
  bytes integer,
  curr_connections integer,
  total_connections integer,
  connection_structures integer,
  cmd_get integer,
  cmd_refresh integer,
  cmd_set integer,
  get_hits integer,
  get_misses integer,
  refresh_hits integer,
  refresh_misses integer,
  bytes_read integer,
  bytes_written integer,
  limit_maxbytes integer

end record
code
{
struct memcache_server_stats *s;
s=mc_stats((struct memcache *)lv_mc);
if (s) {
	int d;
	d=s->pid;
	lv_rec.pid=s->pid;
  	strcpy(lv_rec.version ,s->version);
  	lv_rec.curr_items =s->curr_items ;
  	lv_rec.total_items =s->total_items ;
  	lv_rec.bytes =s->bytes ;
  	lv_rec.curr_connections =s->curr_connections ;
  	lv_rec.total_connections =s->total_connections ;
  	lv_rec.connection_structures =s->connection_structures ;
  	lv_rec.cmd_get =s->cmd_get ;
  	lv_rec.cmd_refresh =s->cmd_refresh ;
  	lv_rec.cmd_set =s->cmd_set ;
  	lv_rec.get_hits =s->get_hits ;
  	lv_rec.get_misses =s->get_misses ;
  	lv_rec.refresh_hits =s->refresh_hits ;
  	lv_rec.refresh_misses =s->refresh_misses ;
  	lv_rec.bytes_read =s->bytes_read ;
  	lv_rec.bytes_written =s->bytes_written ;
  	lv_rec.limit_maxbytes =s->limit_maxbytes ;
	mc_server_stats_free(s);
}
}
endcode
return lv_rec.*

end function

################################################################################
function mc_delete(lv_mc, lv_key)
define lv_mc integer
define lv_key char(255)
code
A4GL_trim(lv_key);
mc_delete((struct memcache *)lv_mc,lv_key,strlen(lv_key),0);
endcode
end function

################################################################################
function mc_incr(lv_mc, lv_key,  lv_ival)
define lv_key char(255)
define lv_mc integer
define lv_ival integer
code
A4GL_trim(lv_key);
mc_incr((struct memcache *)lv_mc,lv_key,strlen(lv_key),lv_ival);
endcode
end function


################################################################################
function mc_decr(lv_mc, lv_key, lv_ival)
define lv_key char(255)
define lv_mc integer
define lv_ival integer
code
A4GL_trim(lv_key);
mc_decr((struct memcache *)lv_mc,lv_key,strlen(lv_key),lv_ival);
endcode
end function

################################################################################
function mc_free(lv_mc)
define lv_mc integer
code
mc_free((struct memcache *)lv_mc);
endcode
end function

function test1(lv_mc) 
define lv_mc integer
code
  mc_add((struct memcache *)lv_mc, "foo", strlen("foo"), "test", strlen("test"), 0, 0);
endcode
end function