コード例 #1
0
ファイル: treeTest.c プロジェクト: kaurTanbir/DSA
void test_deletes_the_root_from_the_tree(){
    Tree tree = createTree(areNodesEqual);
    int number = 12;
    insertTreeNode(&tree, NULL, &number);
    ASSERT(searchInTree(tree, &number));
    ASSERT(1 == deleteFromTree(&tree, &number));
}
コード例 #2
0
ファイル: treeTest.c プロジェクト: aniketsr/DSA
void test_must_not_delete_any_Parent_node(){
	Tree tree = createTree(compareInts);
	Iterator result;
	int data[2] = {10,23};
	ASSERT(insertIntoTree(&tree, NULL, &data));
	ASSERT(insertIntoTree(&tree, &data, &data[1]));
	ASSERT(0 == deleteFromTree(&tree,&data[0]));
	disposeTree(&tree);
}
コード例 #3
0
ファイル: treeTest.c プロジェクト: kaurTanbir/DSA
void test_deletes_child_of_root(){
    Tree tree = createTree(areNodesEqual);
    int nums[3] = {1,2,3};
    insertTreeNode(&tree, NULL, &nums[0]);
    insertTreeNode(&tree, &nums[0], &nums[1]);
    insertTreeNode(&tree, &nums[0], &nums[2]);
    ASSERT(1 == searchInTree(tree, &nums[1]));
    ASSERT(1 == deleteFromTree(&tree, &nums[1]));
    ASSERT(0 == searchInTree(tree, &nums[1]));
}
コード例 #4
0
ファイル: treeTest.c プロジェクト: aniketsr/DSA
void test_must_delete_node_at_second_level(){
	Tree tree = createTree(compareInts);
	Iterator result;
	int data[2] = {10,23};
	ASSERT(insertIntoTree(&tree, NULL, &data));
	ASSERT(insertIntoTree(&tree, &data, &data[1]));
	ASSERT(deleteFromTree(&tree,&data[1]));
	result = getChildren(&tree, &data);
	ASSERT(0 == result.hasNext(&result));
	disposeTree(&tree);
}
コード例 #5
0
ファイル: treeTest.c プロジェクト: kaurTanbir/DSA
void test_does_not_delete_node_with_children(){
    Tree tree = createTree(areNodesEqual);
    int nums[4] ={1,2,3,4};
    insertTreeNode(&tree, NULL, &nums[0]);
    insertTreeNode(&tree, &nums[0], &nums[1]);
    insertTreeNode(&tree, &nums[0], &nums[2]);
    insertTreeNode(&tree, &nums[2], &nums[3]);

    ASSERT(1 == searchInTree(tree, &nums[2]));
    ASSERT(0 == deleteFromTree(&tree, &nums[2]));

}
コード例 #6
0
ファイル: treeTest.c プロジェクト: aniketsr/DSA
void test_must_delete_nodes_from_different_levels(){
	Tree tree = createTree(compareInts);
	Iterator result;
	int data[7] = {10,12,30,4,45,5,50};
	ASSERT(insertIntoTree(&tree, NULL, &data[0]));
	ASSERT(insertIntoTree(&tree, &data[0], &data[1]));
	ASSERT(insertIntoTree(&tree, &data[1], &data[2]));
	ASSERT(insertIntoTree(&tree, &data[2], &data[3]));
	ASSERT(insertIntoTree(&tree, &data[3], &data[4]));
	ASSERT(insertIntoTree(&tree, &data[4], &data[5]));
	ASSERT(deleteFromTree(&tree, &data[5]));
	result = getChildren(&tree, &data[4]);
	ASSERT(0 == result.hasNext(&result));
	disposeTree(&tree);
}
コード例 #7
0
bool FileBrowser::deleteFromTree(generic_string rootPath, HTREEITEM node, std::vector<generic_string> linarPathArray)
{
	if (node == nullptr) // it's a root. Search the right root with rootPath
	{
		// Search
		if ((node = getRootFromFullPath(rootPath)) == nullptr)
			return false;
	}

	if (linarPathArray.size() == 1)
	{
		// Search
		HTREEITEM childNodeFound = findChildNodeFromName(node, linarPathArray[0]);
		if (childNodeFound == nullptr)
			return false;

		// found it, delete it
		_treeView.removeItem(childNodeFound);
		return true;
	}
	else
	{
		HTREEITEM childNodeFound = nullptr;
		for (HTREEITEM hItemNode = _treeView.getChildFrom(node);
			hItemNode != NULL && childNodeFound == nullptr;
			hItemNode = _treeView.getNextSibling(hItemNode))
		{
			TCHAR textBuffer[MAX_PATH];
			TVITEM tvItem;
			tvItem.mask = TVIF_TEXT;
			tvItem.pszText = textBuffer;
			tvItem.cchTextMax = MAX_PATH;
			tvItem.hItem = hItemNode;
			SendMessage(_treeView.getHSelf(), TVM_GETITEM, 0, (LPARAM)&tvItem);

			if (linarPathArray[0] == tvItem.pszText)
			{
				// search recursively the node for an action
				linarPathArray.erase(linarPathArray.begin());
				return deleteFromTree(rootPath, hItemNode, linarPathArray);
			}
		}
		return false;
	}
}
コード例 #8
0
INT_PTR CALLBACK FileBrowser::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
        case WM_INITDIALOG :
        {
			FileBrowser::initPopupMenus();

			_treeView.init(_hInst, _hSelf, ID_FILEBROWSERTREEVIEW);
			setImageList(IDI_PROJECT_WORKSPACE, IDI_PROJECT_WORKSPACEDIRTY, IDI_PROJECT_PROJECT, IDI_PROJECT_FOLDEROPEN, IDI_PROJECT_FOLDERCLOSE, IDI_PROJECT_FILE, IDI_PROJECT_FILEINVALID);

			_treeView.addCanNotDropInList(INDEX_OPEN_ROOT);
			_treeView.addCanNotDropInList(INDEX_CLOSE_ROOT);
			_treeView.addCanNotDropInList(INDEX_OPEN_NODE);
			_treeView.addCanNotDropInList(INDEX_CLOSED_NODE);
			_treeView.addCanNotDropInList(INDEX_LEAF);
			_treeView.addCanNotDropInList(INDEX_LEAF_INVALID);

			_treeView.addCanNotDragOutList(INDEX_OPEN_ROOT);
			_treeView.addCanNotDragOutList(INDEX_CLOSE_ROOT);
			_treeView.addCanNotDragOutList(INDEX_OPEN_NODE);
			_treeView.addCanNotDragOutList(INDEX_CLOSED_NODE);
			_treeView.addCanNotDragOutList(INDEX_LEAF);
			_treeView.addCanNotDragOutList(INDEX_LEAF_INVALID);

			_treeView.makeLabelEditable(false);
			_treeView.display();

            return TRUE;
        }

		case WM_MOUSEMOVE:
			if (_treeView.isDragging())
				_treeView.dragItem(_hSelf, LOWORD(lParam), HIWORD(lParam));
			break;
		case WM_LBUTTONUP:
			if (_treeView.isDragging())
				if (_treeView.dropItem())
				{
				
				}
			break;

		case WM_NOTIFY:
		{
			notified((LPNMHDR)lParam);
		}
		return TRUE;

        case WM_SIZE:
        {
            int width = LOWORD(lParam);
            int height = HIWORD(lParam);

			HWND hwnd = _treeView.getHSelf();
			if (hwnd)
				::MoveWindow(hwnd, 0, 0, width, height, TRUE);
            break;
        }

        case WM_CONTEXTMENU:
			if (!_treeView.isDragging())
				showContextMenu(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
        return TRUE;

		case WM_COMMAND:
		{
			popupMenuCmd(LOWORD(wParam));
			break;
		}

		case WM_DESTROY:
        {
			_treeView.destroy();
			destroyMenus();
            break;
        }

		case FB_ADDFILE:
		{
			const std::vector<generic_string> file2Change = *(std::vector<generic_string> *)lParam;
			generic_string separator = TEXT("\\\\");

			size_t sepPos = file2Change[0].find(separator);
			if (sepPos == generic_string::npos)
				return false;

			generic_string pathSuffix = file2Change[0].substr(sepPos + separator.length(), file2Change[0].length() - 1);

			// remove prefix of file/folder in changeInfo, splite the remained path
			vector<generic_string> linarPathArray = split(pathSuffix, '\\');

			generic_string rootPath = file2Change[0].substr(0, sepPos);
			generic_string path = rootPath;

			generic_string addedFilePath = file2Change[0].substr(0, sepPos + 1);
			addedFilePath += pathSuffix;
			bool isAdded = addInTree(rootPath, addedFilePath, nullptr, linarPathArray);
			if (not isAdded)
			{
				//MessageBox(NULL, addedFilePath.c_str(), TEXT("file/folder is not added"), MB_OK);
			}
			break;
		}

		case FB_RMFILE:
		{
			const std::vector<generic_string> file2Change = *(std::vector<generic_string> *)lParam;
			generic_string separator = TEXT("\\\\");

			size_t sepPos = file2Change[0].find(separator);
			if (sepPos == generic_string::npos)
				return false;

			generic_string pathSuffix = file2Change[0].substr(sepPos + separator.length(), file2Change[0].length() - 1);

			// remove prefix of file/folder in changeInfo, splite the remained path
			vector<generic_string> linarPathArray = split(pathSuffix, '\\');

			generic_string rootPath = file2Change[0].substr(0, sepPos);
			// search recursively and modify the tree structure

			bool isRemoved = deleteFromTree(rootPath, nullptr, linarPathArray);
			if (not isRemoved)
			{
				//MessageBox(NULL, file2Change[0].c_str(), TEXT("file/folder is not removed"), MB_OK);
			}
			break;
		}

		case FB_RNFILE:
		{
			const std::vector<generic_string> file2Change = *(std::vector<generic_string> *)lParam;
			generic_string separator = TEXT("\\\\");

			size_t sepPos = file2Change[0].find(separator);
			if (sepPos == generic_string::npos)
				return false;

			generic_string pathSuffix = file2Change[0].substr(sepPos + separator.length(), file2Change[0].length() - 1);

			// remove prefix of file/folder in changeInfo, splite the remained path
			vector<generic_string> linarPathArray = split(pathSuffix, '\\');

			generic_string rootPath = file2Change[0].substr(0, sepPos);

			size_t sepPos2 = file2Change[1].find(separator);
			if (sepPos2 == generic_string::npos)
				return false;

			generic_string pathSuffix2 = file2Change[1].substr(sepPos2 + separator.length(), file2Change[1].length() - 1);
			vector<generic_string> linarPathArray2 = split(pathSuffix2, '\\');

			bool isRenamed = renameInTree(rootPath, nullptr, linarPathArray, linarPathArray2);
			if (not isRenamed)
			{
				//MessageBox(NULL, file2Change[0].c_str(), TEXT("file/folder is not removed"), MB_OK);
			}
			break;
		}

        default :
            return DockingDlgInterface::run_dlgProc(message, wParam, lParam);
    }
	return DockingDlgInterface::run_dlgProc(message, wParam, lParam);
}
コード例 #9
0
ファイル: treeTest.c プロジェクト: kaurTanbir/DSA
void test_deletion_failed_when_data_is_not_in_tree(){
    Tree tree = createTree(areNodesEqual);
    int number = 12;
    ASSERT(0 == deleteFromTree(&tree, &number));
}