X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fcsl%2Fcontext.h;h=8517fdfd38225818b111bc77d3f8ed2a1471ea64;hb=f6879bcc9ff979bf313c7dd155ab2e1fee8605d8;hp=ce7b0316a124c3ebe4d2fdf84e080e4ac7794f1a;hpb=f92f0f9bcb54167331067b6891ee33e5f27d691c;p=awesomized%2Flibmemcached diff --git a/libmemcached/csl/context.h b/libmemcached/csl/context.h index ce7b0316..8517fdfd 100644 --- a/libmemcached/csl/context.h +++ b/libmemcached/csl/context.h @@ -37,27 +37,34 @@ #pragma once -#include +#include "libmemcached/csl/common.h" +#include "libmemcached/csl/parser.h" class Context { public: - Context(const char *option_string, size_t option_string_length, memcached_st *memc_arg, + Context(const char *option_string, size_t option_string_length, memcached_st *memc_, memcached_return_t &rc_arg) : + previous_token(END), scanner(NULL), + buf(option_string), begin(NULL), pos(0), - memc(NULL), + length(option_string_length), + memc(memc_), rc(rc_arg), _is_server(false), - _end(false) + _end(false), + _has_hash(false) { _hostname[0]= 0; - buf= option_string; - length= option_string_length; - memc= memc_arg; init_scanner(); rc= MEMCACHED_SUCCESS; + + memc->state.is_parsing= true; + memcached_string_create(memc, + &_string_buffer, + 1024); } bool end() @@ -73,6 +80,8 @@ public: _end= true; } + bool set_hash(memcached_hash_t hash); + void set_server() { _is_server= true; @@ -83,55 +92,31 @@ public: _is_server= false; } - bool is_server() + bool is_server() const { return _is_server; } - const char *set_hostname(const char *str, size_t size) - { - size_t copy_length= (size_t)NI_MAXHOST > size ? size : (size_t)NI_MAXHOST; - memcpy(_hostname, str, copy_length); - _hostname[copy_length]= 0; + void hostname(const char*, size_t, server_t&); - return _hostname; - } + bool string_buffer(const char*, size_t, memcached_string_t&); - const char *hostname() + const char *hostname() const { return _hostname; } - void abort(const char *error) - { - if (rc == MEMCACHED_SUCCESS) - rc= MEMCACHED_PARSE_ERROR; - - memcached_string_st *error_string= memcached_string_create(memc, NULL, 1024); - memcached_string_append(error_string, memcached_literal_param("Error occured while parsing: ")); - memcached_string_append(error_string, memcached_string_make_from_cstr(begin)); - memcached_string_append(error_string, memcached_literal_param(" (")); - - if (rc == MEMCACHED_PARSE_ERROR and error) - { - memcached_string_append(error_string, memcached_string_make_from_cstr(error)); - } - else - { - memcached_string_append(error_string, memcached_string_make_from_cstr(memcached_strerror(NULL, rc))); - } - memcached_string_append(error_string, memcached_literal_param(")")); - - memcached_set_error(*memc, rc, MEMCACHED_AT, memcached_string_value(error_string), memcached_string_length(error_string)); - - memcached_string_free(error_string); - } + void abort(const char *, yytokentype, const char *); + void error(const char *, yytokentype, const char* ); ~Context() { + memcached_string_free(&_string_buffer); destroy_scanner(); + memc->state.is_parsing= false; } + yytokentype previous_token; void *scanner; const char *buf; const char *begin; @@ -148,4 +133,6 @@ private: bool _is_server; bool _end; char _hostname[NI_MAXHOST]; + bool _has_hash; + memcached_string_st _string_buffer; };