view dstep/coreservices/carboncore/AVLTree.d @ 11:07194b026fa4

Added bindings to a couple of frameworks, new license + some other things
author Jacob Carlborg <doob@me.com>
date Sat, 01 Aug 2009 15:03:28 +0200
parents
children
line wrap: on
line source

/**
 * Copyright: Copyright (c) 2009 Jacob Carlborg.
 * Authors: Jacob Carlborg
 * Version: Initial created: Jul 21, 2009 
 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0)
 */
module dstep.coreservices.carboncore.AVLTree;

//import dstep.AvailabilityMacros;
import dstep.coreservices.carboncore.MacTypes;
import dstep.coreservices.carboncore.MixedMode;
import dstep.internal.Types;

alias ushort AVLVisitStage;
alias ushort AVLOrder;
alias ushort AVLNodeType;
alias AVLTreeStruct*[][] AVLTreePtr;
alias AVLCompareItemsProcPtr AVLCompareItemsUPP;
alias AVLItemSizeProcPtr AVLItemSizeUPP;
alias AVLDisposeItemProcPtr AVLDisposeItemUPP;
alias AVLWalkProcPtr AVLWalkUPP;

extern (C)
{
	alias short function (AVLTreePtr, void*, ushort, ushort, uint, int, void*) AVLWalkProcPtr;
	alias uint function (AVLTreePtr, void*) AVLItemSizeProcPtr;
	alias int function (AVLTreePtr, void*, void*, ushort) AVLCompareItemsProcPtr;
	alias void function (AVLTreePtr, void*) AVLDisposeItemProcPtr;
}

enum
{
	kAVLPreOrder = 0,
	kAVLInOrder = 1,
	kAVLPostOrder = 2
}

enum
{
	kLeftToRight = 0,
	kRightToLeft = 1
}

enum
{
	kAVLIsTree = 0,
	kAVLIsLeftBranch = 1,
	kAVLIsRightBranch = 2,
	kAVLIsLeaf = 3,
	kAVLNullNode = 4
}

enum
{
	errItemAlreadyInTree = -960,
	errNotValidTree = -961,
	errItemNotFoundInTree = -962,
	errCanNotInsertWhileWalkProcInProgress = -963,
	errTreeIsLocked = -964
}

struct AVLTreeStruct
{
	uint signature;
	c_ulong[8] privateStuff;
}

extern (C)
{
	AVLCompareItemsUPP NewAVLCompareItemsUPP (AVLCompareItemsProcPtr userRoutine);
	AVLItemSizeUPP NewAVLItemSizeUPP (AVLItemSizeProcPtr userRoutine);
	AVLDisposeItemUPP NewAVLDisposeItemUPP (AVLDisposeItemProcPtr userRoutine);
	AVLWalkUPP NewAVLWalkUPP (AVLWalkProcPtr userRoutine);
	void DisposeAVLCompareItemsUPP (AVLCompareItemsUPP userUPP);
	void DisposeAVLItemSizeUPP (AVLItemSizeUPP userUPP);
	void DisposeAVLDisposeItemUPP (AVLDisposeItemUPP userUPP);
	void DisposeAVLWalkUPP (AVLWalkUPP userUPP);
	int InvokeAVLCompareItemsUPP (AVLTreePtr tree, void* i1, void* i2, ushort nd_typ, AVLCompareItemsUPP userUPP);
	uint InvokeAVLItemSizeUPP (AVLTreePtr tree, void* itemPtr, AVLItemSizeUPP userUPP);
	void InvokeAVLDisposeItemUPP (AVLTreePtr tree, void* dataP, AVLDisposeItemUPP userUPP);
	short InvokeAVLWalkUPP (AVLTreePtr tree, void* dataPtr, ushort visitStage, ushort node, uint level, int balance, void* refCon, AVLWalkUPP userUPP);
}