2 * Copyright (c) 1998-2005, Index Data.
3 * See the file LICENSE for details.
5 * $Id: yaz-z-query.cpp,v 1.19 2006-03-29 13:14:18 adam Exp $
8 #include <yaz/logrpn.h>
9 #include <yazpp/z-query.h>
10 #include <yaz/pquery.h>
12 using namespace yazpp_1;
14 Yaz_Z_Query::Yaz_Z_Query()
16 odr_encode = odr_createmem(ODR_ENCODE);
17 odr_decode = odr_createmem(ODR_DECODE);
18 odr_print = odr_createmem(ODR_PRINT);
21 Yaz_Z_Query& Yaz_Z_Query::operator=(const Yaz_Z_Query &p)
25 odr_reset(odr_encode);
34 m_buf = (char*) odr_malloc(odr_encode, m_len);
35 memcpy(m_buf, p.m_buf, m_len);
41 Yaz_Z_Query& Yaz_Z_Query::operator=(const char *rpn)
47 int Yaz_Z_Query::set_rpn(const char *rpn)
50 odr_reset(odr_encode);
51 Z_Query *query = (Z_Query*) odr_malloc(odr_encode, sizeof(*query));
52 query->which = Z_Query_type_1;
53 query->u.type_1 = p_query_rpn(odr_encode, PROTO_Z3950, rpn);
56 if (!z_Query(odr_encode, &query, 0, 0))
58 // z_Query(odr_print, &query, 0, 0);
59 m_buf = odr_getbuf(odr_encode, &m_len, 0);
63 void Yaz_Z_Query::set_Z_Query(Z_Query *z_query)
66 odr_reset(odr_encode);
67 if (!z_Query(odr_encode, &z_query, 0, 0))
69 m_buf = odr_getbuf(odr_encode, &m_len, 0);
72 Yaz_Z_Query::~Yaz_Z_Query()
74 odr_destroy(odr_encode);
75 odr_destroy(odr_decode);
76 odr_destroy(odr_print);
79 Z_Query *Yaz_Z_Query::get_Z_Query()
84 odr_reset(odr_decode);
85 odr_setbuf(odr_decode, m_buf, m_len, 0);
86 if (!z_Query(odr_decode, &query, 0, 0))
91 void Yaz_Z_Query::print(char *str, int len)
97 odr_setbuf(odr_decode, m_buf, m_len, 0);
98 if (!z_Query(odr_decode, &query, 0, 0))
100 WRBUF wbuf = zquery2pquery(query);
103 if (wrbuf_len(wbuf) > len-1)
105 memcpy(str, wrbuf_buf(wbuf), len-1);
109 strcpy(str, wrbuf_buf(wbuf));
112 odr_reset(odr_decode);
115 int Yaz_Z_Query::match(Yaz_Z_Query *other)
117 if (m_len != other->m_len)
119 if (!m_buf || !other->m_buf)
121 if (memcmp(m_buf, other->m_buf, m_len))
126 WRBUF Yaz_Z_Query::zquery2pquery(Z_Query *q)
128 WRBUF w = wrbuf_alloc();
129 wrbuf_put_zquery(w, q);
136 * indent-tabs-mode: nil
138 * vim: shiftwidth=4 tabstop=8 expandtab