X-Git-Url: http://git.indexdata.com/?p=yazpp-moved-to-github.git;a=blobdiff_plain;f=src%2Fyaz-z-query.cpp;h=92d84d7bc229b8eb0eddc2b72bdc357e0b28bf1e;hp=f8bb4a43f5bf5fd04445a7dd68a23ee4c0ebf5c9;hb=711105a336b155f2b7f098cf84f2e30952cb8588;hpb=58ad752713282ff9d9baa1b958f09eaa26c4c822 diff --git a/src/yaz-z-query.cpp b/src/yaz-z-query.cpp index f8bb4a4..92d84d7 100644 --- a/src/yaz-z-query.cpp +++ b/src/yaz-z-query.cpp @@ -1,13 +1,15 @@ -/* - * Copyright (c) 1998-2005, Index Data. +/* This file is part of the yazpp toolkit. + * Copyright (C) 1998-2012 Index Data and Mike Taylor * See the file LICENSE for details. - * - * $Id: yaz-z-query.cpp,v 1.18 2005-09-27 17:57:51 adam Exp $ */ -#include -#include +#if HAVE_CONFIG_H +#include +#endif +#include +#include #include +#include using namespace yazpp_1; @@ -18,21 +20,33 @@ Yaz_Z_Query::Yaz_Z_Query() odr_print = odr_createmem(ODR_PRINT); } -Yaz_Z_Query& Yaz_Z_Query::operator=(const Yaz_Z_Query &p) + +Yaz_Z_Query::Yaz_Z_Query(const Yaz_Z_Query &q) { - if (this != &p) + odr_encode = odr_createmem(ODR_ENCODE); + odr_decode = odr_createmem(ODR_DECODE); + odr_print = odr_createmem(ODR_PRINT); + + m_len = q.m_len; + m_buf = (char*) odr_malloc(odr_encode, m_len); + memcpy(m_buf, q.m_buf, m_len); +} + +Yaz_Z_Query& Yaz_Z_Query::operator=(const Yaz_Z_Query &q) +{ + if (this != &q) { odr_reset(odr_encode); - if (!p.m_buf) + if (!q.m_buf) { m_buf = 0; m_len = 0; } else { - m_len = p.m_len; + m_len = q.m_len; m_buf = (char*) odr_malloc(odr_encode, m_len); - memcpy(m_buf, p.m_buf, m_len); + memcpy(m_buf, q.m_buf, m_len); } } return *this; @@ -50,7 +64,7 @@ int Yaz_Z_Query::set_rpn(const char *rpn) odr_reset(odr_encode); Z_Query *query = (Z_Query*) odr_malloc(odr_encode, sizeof(*query)); query->which = Z_Query_type_1; - query->u.type_1 = p_query_rpn(odr_encode, PROTO_Z3950, rpn); + query->u.type_1 = p_query_rpn(odr_encode, rpn); if (!query->u.type_1) return -1; if (!z_Query(odr_encode, &query, 0, 0)) @@ -88,7 +102,7 @@ Z_Query *Yaz_Z_Query::get_Z_Query() return query; } -void Yaz_Z_Query::print(char *str, int len) +void Yaz_Z_Query::print(char *str, size_t len) { Z_Query *query; *str = 0; @@ -97,22 +111,20 @@ void Yaz_Z_Query::print(char *str, int len) odr_setbuf(odr_decode, m_buf, m_len, 0); if (!z_Query(odr_decode, &query, 0, 0)) return; - WRBUF wbuf = zquery2pquery(query); - if (wbuf) + WRBUF wbuf = wrbuf_alloc(); + yaz_query_to_wrbuf(wbuf, query); + if (wrbuf_len(wbuf) > len-1) { - if (wrbuf_len(wbuf) > len-1) - { - memcpy(str, wrbuf_buf(wbuf), len-1); - str[len-1] = '\0'; - } - else - strcpy(str, wrbuf_buf(wbuf)); - wrbuf_free(wbuf,1); + memcpy(str, wrbuf_buf(wbuf), len-1); + str[len-1] = '\0'; } + else + strcpy(str, wrbuf_cstr(wbuf)); + wrbuf_destroy(wbuf); odr_reset(odr_decode); } -int Yaz_Z_Query::match(Yaz_Z_Query *other) +int Yaz_Z_Query::match(const Yaz_Z_Query *other) { if (m_len != other->m_len) return 0; @@ -123,16 +135,10 @@ int Yaz_Z_Query::match(Yaz_Z_Query *other) return 1; } -WRBUF Yaz_Z_Query::zquery2pquery(Z_Query *q) -{ - WRBUF w = wrbuf_alloc(); - wrbuf_put_zquery(w, q); - return w; -} - /* * Local variables: * c-basic-offset: 4 + * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab