X-Git-Url: http://git.indexdata.com/?p=yazpp-moved-to-github.git;a=blobdiff_plain;f=src%2Fyaz-z-query.cpp;h=85d496a9858c2d7393b6f7c46f8e52abe671f4ed;hp=f8bb4a43f5bf5fd04445a7dd68a23ee4c0ebf5c9;hb=b68803f07a763804a784806082f484cb0c8b531a;hpb=58ad752713282ff9d9baa1b958f09eaa26c4c822 diff --git a/src/yaz-z-query.cpp b/src/yaz-z-query.cpp index f8bb4a4..85d496a 100644 --- a/src/yaz-z-query.cpp +++ b/src/yaz-z-query.cpp @@ -1,13 +1,14 @@ /* - * Copyright (c) 1998-2005, Index Data. + * Copyright (c) 1998-2007, Index Data. * See the file LICENSE for details. * - * $Id: yaz-z-query.cpp,v 1.18 2005-09-27 17:57:51 adam Exp $ + * $Id: yaz-z-query.cpp,v 1.21 2007-03-20 07:54:11 adam Exp $ */ -#include -#include +#include +#include #include +#include using namespace yazpp_1; @@ -18,21 +19,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) +{ + 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 != &p) + 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; @@ -88,7 +101,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 +110,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,13 +134,6 @@ 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