cd34496f775971d1971e8ad6e752a2974e3bb9b6
[yaz-moved-to-github.git] / include / yaz / facet.h
1 /* This file is part of the YAZ toolkit.
2  * Copyright (C) 1995-2010 Index Data.
3  * All rights reserved.
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are met:
6  *
7  *     * Redistributions of source code must retain the above copyright
8  *       notice, this list of conditions and the following disclaimer.
9  *     * Redistributions in binary form must reproduce the above copyright
10  *       notice, this list of conditions and the following disclaimer in the
11  *       documentation and/or other materials provided with the distribution.
12  *     * Neither the name of Index Data nor the names of its contributors
13  *       may be used to endorse or promote products derived from this
14  *       software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19  * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
20  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27
28 /**
29  * \file facet.h
30  * \brief Header for the facet utilities
31  */
32
33 #ifndef YAZ_FACET_H
34 #define YAZ_FACET_H
35
36 #include <yaz/yconfig.h>
37 #include <yaz/odr.h>
38 #include <yaz/z-core.h>
39 #include <yaz/z-facet-1.h>
40 #include <yaz/log.h>
41
42 YAZ_BEGIN_CDECL
43
44
45 /*
46  * Helper function for extracting facet values from the ASN structures.
47  *
48  */
49
50 /* A helper structure to extract all the attribute stuff
51    from one Z_AttributesList. The pointers will all be to
52    the Z-structures, or to constants, so there is no need to
53    worry about freeing them */
54 struct attrvalues {
55     int  errcode;   /* set in case of errors */
56     char *errstring; /* opt */
57     const char *useattr; /* @attr 1, from a string attr */
58                    /* or number converted to a string */
59                    /* defaults to 'any' */
60     char useattrbuff[30]; /* for converting numbers to strings */
61     char *relation; /* @attr 2, defaults to '=' */
62     int limit; /* for facet attributes */
63 };
64
65 YAZ_EXPORT
66 void facet_struct_init(struct attrvalues *attr_values);
67
68 /* Use attribute, @attr1, can be numeric or string */
69 YAZ_EXPORT
70 void useattr ( Z_AttributeElement *ae, struct attrvalues *av );
71
72 YAZ_EXPORT
73 void relationattr ( Z_AttributeElement *ae, struct attrvalues *av );
74
75 YAZ_EXPORT
76 void limitattr ( Z_AttributeElement *ae, struct attrvalues *av );
77
78 YAZ_EXPORT
79 void limitattr ( Z_AttributeElement *ae, struct attrvalues *av );
80
81 YAZ_EXPORT
82 void facetattrs( Z_AttributeList *attributes, struct attrvalues *av );
83
84 YAZ_EXPORT
85 Z_FacetList *extract_facet_request(ODR odr, Z_OtherInformation *search_input);
86
87 YAZ_EXPORT
88 Z_Term *term_create(ODR odr, const char *cstr);
89
90 YAZ_EXPORT
91 Z_FacetTerm* facet_term_create(ODR odr, Z_Term *term, int freq);
92
93 YAZ_EXPORT
94 Z_FacetField* facet_field_create(ODR odr, Z_AttributeList *attributes, int num_terms);
95
96 YAZ_EXPORT
97 void facet_field_term_set(ODR odr, Z_FacetField *field, Z_FacetTerm *facetTerm, int index);
98
99 YAZ_EXPORT
100 Z_FacetList* facet_list_create(ODR odr, int num_facets);
101
102 YAZ_EXPORT
103 void facet_list_field_set(ODR odr, Z_FacetList *list, Z_FacetField *field, int index);
104
105 #endif
106 /*
107  * Local variables:
108  * c-basic-offset: 4
109  * c-file-style: "Stroustrup"
110  * indent-tabs-mode: nil
111  * End:
112  * vim: shiftwidth=4 tabstop=8 expandtab
113  */
114