Example #1
0
 bool findOther(TreeNode* root, int value, TreeNode* self) {
     if (root == NULL)
         return false;
     if (root->val == value && root != self)
         return true;
     else if (root->val > value && root->left != NULL)
         return findOther(root->left, value, self);
     else if (root->val < value && root->right != NULL)
         return findOther(root->right, value, self);
     return false;
 }
Example #2
0
 bool dfs(TreeNode* root, TreeNode* current, int k) {
     if (current == NULL)
         return false;
     if (findOther(root, k - current->val, current))
         return true;
     if (current->left && dfs(root, current->left, k))
         return true;
     if (current->right && dfs(root, current->right, k))
         return true;
     return false;
 }
Example #3
0
bool Events::unregisterEvent(Events::eventHandler *handler) {
	if (handler->type == event_input) {
		if (!findOther(event_input, handler->inputSpec.pin, handler->id)) {
			disableInputInterrupt(handler->inputSpec.interrupt);
			setInputHandler(handler->inputSpec.interrupt, 0);
		}
	}

	handler->type = event_free;
	return true;
}
Example #4
0
Events::eventHandler *Events::registerAnalogComp(byte mode, Events::eventCallback callback, void *data) {
	Events::eventHandler *result = registerEvent(event_analogcomp, callback, data);
	if (result == 0) {
		return 0;
	}

	result->analogCompSpec.mode = mode;

	if (!findOther(event_analogcomp, 0xff, result->id)) {
		setAnalogCompHandler(analogCompHandler);
		enableAnalogCompInterrupt(CHANGE);
	}

	return result;
}
Example #5
0
Events::eventHandler *Events::registerInput(byte input, byte mode, Events::eventCallback callback, void *data) {
	Events::eventHandler *result = registerEvent(event_input, callback, data);
	if (result == 0) {
		return 0;
	}

	result->inputSpec.interrupt = INTERRUPT_FOR_PIN(input);
	if (result->inputSpec.interrupt == -1) {
		return 0;
	}
	result->inputSpec.pin = input;
	result->inputSpec.mode = mode;

	if (!findOther(event_input, result->inputSpec.pin, result->id)) {
		setInputHandler(result->inputSpec.interrupt, inputHandler);
		enableInputInterrupt(result->inputSpec.interrupt, mode);
	}

	return result;
}