losertree
This commit is contained in:
parent
9735dcf9f8
commit
a282997149
|
@ -13,14 +13,16 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef _TD_UTIL_LOSERTREE_H
|
#ifndef _TD_UTIL_LOSERTREE_H_
|
||||||
#define _TD_UTIL_LOSERTREE_H
|
#define _TD_UTIL_LOSERTREE_H_
|
||||||
|
|
||||||
|
#include "os.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef int (*__merge_compare_fn_t)(const void *, const void *, void *param);
|
typedef int32_t (*__merge_compare_fn_t)(const void *, const void *, void *param);
|
||||||
|
|
||||||
typedef struct STreeNode {
|
typedef struct STreeNode {
|
||||||
int32_t index;
|
int32_t index;
|
||||||
|
@ -38,7 +40,8 @@ typedef struct SMultiwayMergeTreeInfo {
|
||||||
#define tMergeTreeGetChosenIndex(t_) ((t_)->pNode[0].index)
|
#define tMergeTreeGetChosenIndex(t_) ((t_)->pNode[0].index)
|
||||||
#define tMergeTreeGetAdjustIndex(t_) (tMergeTreeGetChosenIndex(t_) + (t_)->numOfSources)
|
#define tMergeTreeGetAdjustIndex(t_) (tMergeTreeGetChosenIndex(t_) + (t_)->numOfSources)
|
||||||
|
|
||||||
int32_t tMergeTreeCreate(SMultiwayMergeTreeInfo **pTree, uint32_t numOfEntries, void *param, __merge_compare_fn_t compareFn);
|
int32_t tMergeTreeCreate(SMultiwayMergeTreeInfo **pTree, uint32_t numOfEntries, void *param,
|
||||||
|
__merge_compare_fn_t compareFn);
|
||||||
|
|
||||||
void tMergeTreeDestroy(SMultiwayMergeTreeInfo *pTree);
|
void tMergeTreeDestroy(SMultiwayMergeTreeInfo *pTree);
|
||||||
|
|
||||||
|
@ -52,4 +55,4 @@ void tMergeTreePrint(const SMultiwayMergeTreeInfo *pTree);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /*_TD_UTIL_LOSERTREE_H*/
|
#endif /*_TD_UTIL_LOSERTREE_H_*/
|
||||||
|
|
|
@ -13,12 +13,10 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "os.h"
|
#define _DEFAULT_SOURCE
|
||||||
#include "tlog.h"
|
|
||||||
#include "tlosertree.h"
|
#include "tlosertree.h"
|
||||||
#include "taoserror.h"
|
#include "taoserror.h"
|
||||||
|
#include "tlog.h"
|
||||||
|
|
||||||
|
|
||||||
// Set the initial value of the multiway merge tree.
|
// Set the initial value of the multiway merge tree.
|
||||||
static void tMergeTreeInit(SMultiwayMergeTreeInfo* pTree) {
|
static void tMergeTreeInit(SMultiwayMergeTreeInfo* pTree) {
|
||||||
|
@ -33,10 +31,12 @@ static void tMergeTreeInit(SMultiwayMergeTreeInfo* pTree) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t tMergeTreeCreate(SMultiwayMergeTreeInfo** pTree, uint32_t numOfSources, void* param, __merge_compare_fn_t compareFn) {
|
int32_t tMergeTreeCreate(SMultiwayMergeTreeInfo** pTree, uint32_t numOfSources, void* param,
|
||||||
|
__merge_compare_fn_t compareFn) {
|
||||||
int32_t totalEntries = numOfSources << 1u;
|
int32_t totalEntries = numOfSources << 1u;
|
||||||
|
|
||||||
SMultiwayMergeTreeInfo* pTreeInfo = (SMultiwayMergeTreeInfo*)calloc(1, sizeof(SMultiwayMergeTreeInfo) + sizeof(STreeNode) * totalEntries);
|
SMultiwayMergeTreeInfo* pTreeInfo =
|
||||||
|
(SMultiwayMergeTreeInfo*)calloc(1, sizeof(SMultiwayMergeTreeInfo) + sizeof(STreeNode) * totalEntries);
|
||||||
if (pTreeInfo == NULL) {
|
if (pTreeInfo == NULL) {
|
||||||
uError("allocate memory for loser-tree failed. reason:%s", strerror(errno));
|
uError("allocate memory for loser-tree failed. reason:%s", strerror(errno));
|
||||||
return TAOS_SYSTEM_ERROR(errno);
|
return TAOS_SYSTEM_ERROR(errno);
|
||||||
|
|
Loading…
Reference in New Issue