#include <iostream>
#include <cstdlib>
#include <vector>
#include "tbb/task_scheduler_init.h"
#include "tbb/parallel_do.h"

#define N 10

using namespace tbb;
using namespace std;

struct Node {
	Node *next;
	int data;
	int sX;

	Node() : next(NULL) {}

	typedef Node *argument_type;

	void operator()( argument_type item ) const
	{
		if ( item->data == sX ) {
			printf(" + %p %d\n", item, item->data);
		} else {
			printf(" - %p %d\n", item, item->data);
		}
	}
};

int main()
{
	task_scheduler_init init(4);

	vector<Node *> v(N);
	Node t_node;
	int x;

	for (int i=0; i<(int) v.size(); i++) {
		v[i] = new Node;
		v[i]->data = i;
		cout << v[i] << " " << i << endl;
	}
	cout << endl;

	x=5;
	cout << "Searching for the address of: " << x << endl;
	t_node.sX=x;
	parallel_do(v.begin(), v.end(), Node(t_node));

	return 0;
}

