X-Git-Url: http://git.indexdata.com/?p=yazpp-moved-to-github.git;a=blobdiff_plain;f=src%2Fyaz-z-query.cpp;h=50dafd650b80bc47df15b56baf1f97cede8da4b7;hp=d0276408bd369fe7db9317c629dea5e017311ff5;hb=80f76096e4a83eeeb66ea55ef0d526b1f360a10c;hpb=0cc824e02bc2c69986bec8c9dd9ff53f07a0cd3d diff --git a/src/yaz-z-query.cpp b/src/yaz-z-query.cpp index d027640..50dafd6 100644 --- a/src/yaz-z-query.cpp +++ b/src/yaz-z-query.cpp @@ -1,13 +1,12 @@ -/* - * Copyright (c) 1998-2005, Index Data. +/* This file is part of the yazpp toolkit. + * Copyright (C) 1998-2009 Index Data and Mike Taylor * See the file LICENSE for details. - * - * $Id: yaz-z-query.cpp,v 1.19 2006-03-29 13:14:18 adam Exp $ */ -#include +#include #include #include +#include using namespace yazpp_1; @@ -18,21 +17,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 +61,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 +99,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 +108,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 +132,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