Пример #1
0
Datum
g_int_decompress(PG_FUNCTION_ARGS)
{
    GISTENTRY  *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
    GISTENTRY  *retval;
    ArrayType  *r;
    int		   *dr,
               lenr;
    ArrayType  *in;
    int			lenin;
    int		   *din;
    int			i,
                j;

    in = (ArrayType *) PG_DETOAST_DATUM(entry->key);

    if (ARRISVOID(in))
        PG_RETURN_POINTER(entry);

    lenin = ARRNELEMS(in);

    if (lenin < 2 * MAXNUMRANGE || ISLEAFKEY(in))
    {   /* not compressed value */
        if (in != (ArrayType *) DatumGetPointer(entry->key))
        {
            retval = palloc(sizeof(GISTENTRY));
            gistentryinit(*retval, PointerGetDatum(in),
                          entry->rel, entry->page, entry->offset, VARSIZE(in), FALSE);

            PG_RETURN_POINTER(retval);
        }
        PG_RETURN_POINTER(entry);
    }

    din = ARRPTR(in);
    lenr = internal_size(din, lenin);

    r = new_intArrayType(lenr);
    dr = ARRPTR(r);

    for (i = 0; i < lenin; i += 2)
        for (j = din[i]; j <= din[i + 1]; j++)
            if ((!i) || *(dr - 1) != j)
                *dr++ = j;

    if (in != (ArrayType *) DatumGetPointer(entry->key))
        pfree(in);
    retval = palloc(sizeof(GISTENTRY));
    gistentryinit(*retval, PointerGetDatum(r),
                  entry->rel, entry->page, entry->offset, VARSIZE(r), FALSE);

    PG_RETURN_POINTER(retval);
}
Пример #2
0
    /* internal rect whitout margin */
QRectF M_PageSize::PageInternal( const int index )
{
        const qreal fromTopY = index * G_regt.height();
        const qreal spacepage = index * InterSpace;
        return QRectF(QPointF(body.margin_left,fromTopY + spacepage + body.margin_top),internal_size());
}