mirror of
https://github.com/MariaDB/server.git
synced 2025-01-23 15:24:16 +01:00
808951d65d
git-svn-id: file:///svn/tokudb@236 c7de825b-a66e-492c-adef-691d508d4ae1
81 lines
2.8 KiB
C
81 lines
2.8 KiB
C
#include "pma.h"
|
|
|
|
struct pma_cursor {
|
|
PMA pma;
|
|
int position; /* -1 if the position is undefined. */
|
|
struct list next;
|
|
void *skey, *sval; /* used in dbts. */
|
|
};
|
|
|
|
struct pma {
|
|
enum typ_tag tag;
|
|
int N; /* How long is the array? Always a power of two >= 4. */
|
|
int n_pairs_present; /* How many array elements are non-null. */
|
|
struct kv_pair **pairs;
|
|
int uplgN; /* The smallest power of two >= lg(N) */
|
|
double udt_step; /* upper density threshold step */
|
|
/* Each doubling decreases the density by density step.
|
|
* For example if array_len=256 and uplgN=8 then there are 5 doublings.
|
|
* Regions of size 8 are full. Regions of size 16 are 90% full.
|
|
* Regions of size 32 are 80% full. Regions of size 64 are 70% full.
|
|
* Regions of size 128 are 60% full. Regions of size 256 are 50% full.
|
|
* The density step is 0.10. */
|
|
double ldt_step; /* lower density threshold step */
|
|
struct list cursors;
|
|
int (*compare_fun)(DB*,const DBT*,const DBT*);
|
|
void *skey, *sval; /* used in dbts */
|
|
};
|
|
|
|
int pmainternal_count_region (struct kv_pair *pairs[], int lo, int hi);
|
|
void pmainternal_calculate_parameters (PMA pma);
|
|
int pmainternal_smooth_region (struct kv_pair *pairs[], int n, int idx, int base, PMA pma);
|
|
int pmainternal_printpairs (struct kv_pair *pairs[], int N);
|
|
int pmainternal_make_space_at (PMA pma, int idx);
|
|
int pmainternal_find (PMA pma, DBT *, DB*); // The DB is so the comparison fuction can be called.
|
|
void print_pma (PMA pma); /* useful for debugging, so keep the name short. I.e., not pmainternal_print_pma() */
|
|
|
|
/*
|
|
* resize the pma array to asksize. zero all array entries starting from startx.
|
|
*/
|
|
int __pma_resize_array(PMA pma, int asksize, int startx);
|
|
|
|
/*
|
|
* extract pairs from the pma in the window delimited by lo and hi.
|
|
*/
|
|
struct kv_pair_tag *__pma_extract_pairs(PMA pma, int count, int lo, int hi);
|
|
|
|
/*
|
|
* update the cursors in a cursor set given a set of tagged pairs.
|
|
*/
|
|
void __pma_update_cursors(PMA pma, struct list *cursorset, struct kv_pair_tag *tpairs, int n);
|
|
|
|
/*
|
|
* update this pma's cursors given a set of tagged pairs.
|
|
*/
|
|
void __pma_update_my_cursors(PMA pma, struct kv_pair_tag *tpairs, int n);
|
|
|
|
/*
|
|
* a deletion occured at index "here" in the pma. rebalance the windows around "here". if
|
|
* necessary, shrink the pma.
|
|
*/
|
|
void __pma_delete_at(PMA pma, int here);
|
|
|
|
/*
|
|
* finish a deletion from the pma. called when there are no cursor references
|
|
* to the kv pair.
|
|
*/
|
|
void __pma_delete_finish(PMA pma, int here);
|
|
|
|
/*
|
|
* count the number of cursors that reference a pma pair
|
|
*/
|
|
int __pma_count_cursor_refs(PMA pma, int here);
|
|
|
|
/* density thresholds */
|
|
#define PMA_LDT_HIGH 0.25
|
|
#define PMA_LDT_LOW 0.40
|
|
#define PMA_UDT_HIGH 1.00
|
|
#define PMA_UDT_LOW 0.50
|
|
|
|
/* minimum array size */
|
|
#define PMA_MIN_ARRAY_SIZE 4
|