1/* -*- c-basic-offset: 2 -*- */
2/*
3 Copyright(C) 2009-2016 Brazil
4
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License version 2.1 as published by the Free Software Foundation.
8
9 This library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Lesser General Public License for more details.
13
14 You should have received a copy of the GNU Lesser General Public
15 License along with this library; if not, write to the Free Software
16 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17*/
18
19#pragma once
20
21#include "grn.h"
22
23#ifdef __cplusplus
24extern "C" {
25#endif
26
27typedef struct {
28 double score;
29 int n_subrecs;
30 int subrecs[1];
31} grn_rset_recinfo;
32
33typedef struct {
34 grn_id rid;
35 uint32_t sid;
36 uint32_t pos;
37} grn_rset_posinfo;
38
39#define GRN_RSET_UTIL_BIT (0x80000000)
40
41#define GRN_RSET_N_SUBRECS_SIZE (sizeof(int))
42#define GRN_RSET_MAX_SIZE (sizeof(int64_t))
43#define GRN_RSET_MIN_SIZE (sizeof(int64_t))
44#define GRN_RSET_SUM_SIZE (sizeof(int64_t))
45#define GRN_RSET_AVG_SIZE (sizeof(double))
46
47#define GRN_RSET_SCORE_SIZE (sizeof(double))
48
49#define GRN_RSET_N_SUBRECS(ri) ((ri)->n_subrecs & ~GRN_RSET_UTIL_BIT)
50
51#define GRN_RSET_SUBREC_SIZE(subrec_size) \
52 (GRN_RSET_SCORE_SIZE + subrec_size)
53#define GRN_RSET_SUBRECS_CMP(a,b,dir) (((a) - (b))*(dir))
54#define GRN_RSET_SUBRECS_NTH(subrecs,size,n) \
55 ((double *)((byte *)subrecs + n * GRN_RSET_SUBREC_SIZE(size)))
56#define GRN_RSET_SUBRECS_COPY(subrecs,size,n,src) \
57 (grn_memcpy(GRN_RSET_SUBRECS_NTH(subrecs, size, n), src, GRN_RSET_SUBREC_SIZE(size)))
58#define GRN_RSET_SUBRECS_SIZE(subrec_size,n) \
59 (GRN_RSET_SUBREC_SIZE(subrec_size) * n)
60
61uint32_t grn_rset_recinfo_calc_values_size(grn_ctx *ctx,
62 grn_table_group_flags flags);
63void grn_rset_recinfo_update_calc_values(grn_ctx *ctx,
64 grn_rset_recinfo *ri,
65 grn_obj *table,
66 grn_obj *value);
67
68int64_t *grn_rset_recinfo_get_max_(grn_ctx *ctx,
69 grn_rset_recinfo *ri,
70 grn_obj *table);
71int64_t grn_rset_recinfo_get_max(grn_ctx *ctx,
72 grn_rset_recinfo *ri,
73 grn_obj *table);
74void grn_rset_recinfo_set_max(grn_ctx *ctx,
75 grn_rset_recinfo *ri,
76 grn_obj *table,
77 int64_t max);
78
79int64_t *grn_rset_recinfo_get_min_(grn_ctx *ctx,
80 grn_rset_recinfo *ri,
81 grn_obj *table);
82int64_t grn_rset_recinfo_get_min(grn_ctx *ctx,
83 grn_rset_recinfo *ri,
84 grn_obj *table);
85void grn_rset_recinfo_set_min(grn_ctx *ctx,
86 grn_rset_recinfo *ri,
87 grn_obj *table,
88 int64_t min);
89
90int64_t *grn_rset_recinfo_get_sum_(grn_ctx *ctx,
91 grn_rset_recinfo *ri,
92 grn_obj *table);
93int64_t grn_rset_recinfo_get_sum(grn_ctx *ctx,
94 grn_rset_recinfo *ri,
95 grn_obj *table);
96void grn_rset_recinfo_set_sum(grn_ctx *ctx,
97 grn_rset_recinfo *ri,
98 grn_obj *table,
99 int64_t sum);
100
101double *grn_rset_recinfo_get_avg_(grn_ctx *ctx,
102 grn_rset_recinfo *ri,
103 grn_obj *table);
104double grn_rset_recinfo_get_avg(grn_ctx *ctx,
105 grn_rset_recinfo *ri,
106 grn_obj *table);
107void grn_rset_recinfo_set_avg(grn_ctx *ctx,
108 grn_rset_recinfo *ri,
109 grn_obj *table,
110 double avg);
111
112#ifdef __cplusplus
113}
114#endif
115