void
    Tree::addHelper(int val, Node& parent)
    {
      // we need to add to the left of the parent
      if (val < parent.value()) {
	// if there is already a left, move down
	const std::shared_ptr<Node>& left = parent.left();
	if (left.get() != NULL) {
	  addHelper(val, *left);
	} else {
	  // create the node and assign left
	  parent.left() = std::shared_ptr<Node>(new Node(val));
	} // if
      } else {
	// adding to the right
	const std::shared_ptr<Node>& right = parent.right();
	if (right.get() != NULL) {
	  // if right already exists, move down
	  addHelper(val, *right);
	} else {
	  // create the node and assign right
	  parent.right() = std::make_shared<Node>(val);
	} // if
      } // if
    }
Beispiel #2
0
reTranslateGizmo::reTranslateGizmo():
	reGizmo()
{
	modifier = 0;
	highlighted = 0;

	addHelper(glm::rotate(reMat4(), 90.0f, reVec3(0, 1, 0)), reVec3(1,0,0), new reConeRenderable(), 5, true, reColor4(.7f,0,0,1));
	addHelper(glm::rotate(reMat4(), -90.0f, reVec3(1, 0, 0)), reVec3(0,1,0), new reConeRenderable(), 5, true, reColor4(0,.7f,0,1));	
	addHelper(reMat4(), reVec3(0,0,1), new reConeRenderable(), 5, true, reColor4(0,0,.7f,1));

	reGizmoHelper* node;
//	reConeRenderable* cone;
//	reLineRenderable* line;
//	reBoxRenderable *box;
	reStripRenderable *strip;

	node = new reGizmoHelper(); // xy
	strip = new reStripRenderable();
	strip->color = reVec4(1,1,0,0.5);
	strip->points.push_back(reVec3(0, 0, 0));
	strip->points.push_back(reVec3(0, 2, 0));
	strip->points.push_back(reVec3(2, 2, 0));
	strip->points.push_back(reVec3(2, 0, 0));
	strip->points.push_back(reVec3(0, 0, 0));
	node->renderables->add(strip);
	children->add(node);
	node->axes.push_back(reVec3(0, 1, 0));
	node->axes.push_back(reVec3(1, 0, 0));
	node->gizmo = this;
	
	node = new reGizmoHelper(); // xz
	strip = new reStripRenderable();
	strip->color = reVec4(1,1,0,0.5);
	strip->points.push_back(reVec3(0, 0, 0));
	strip->points.push_back(reVec3(0, 0, 2));
	strip->points.push_back(reVec3(2, 0, 2));
	strip->points.push_back(reVec3(2, 0, 0));
	strip->points.push_back(reVec3(0, 0, 0));
	node->renderables->add(strip);
	children->add(node);
	node->axes.push_back(reVec3(0, 0, 1));
	node->axes.push_back(reVec3(1, 0, 0));
	node->gizmo = this;

	node = new reGizmoHelper(); // yz
	strip = new reStripRenderable();
	strip->color = reVec4(1,1,0,0.5);
	strip->points.push_back(reVec3(0, 0, 0));
	strip->points.push_back(reVec3(0, 0, 2));
	strip->points.push_back(reVec3(0, 2, 2));
	strip->points.push_back(reVec3(0, 2, 0));
	strip->points.push_back(reVec3(0, 0, 0));
	node->renderables->add(strip);
	children->add(node);
	node->axes.push_back(reVec3(0, 0, 1));
	node->axes.push_back(reVec3(0, 1, 0));
	node->gizmo = this;

	selected((reGizmoHelper*)children->at(defaultSelectedIndex));
}
Beispiel #3
0
reRotateGizmo::reRotateGizmo(): reGizmo()
{
	modifier = 0;
	highlighted = 0;	

	addHelper(glm::rotate(reMat4(), 90.0f, reVec3(0, 1, 0)), reVec3(1,0,0), new reCircleRenderable(), 0, true, reColor4(.7f,0,0,1),  new reRotationGizmoHelper());
	addHelper(glm::rotate(reMat4(), -90.0f, reVec3(1, 0, 0)), reVec3(0,1,0), new reCircleRenderable(), 0, true, reColor4(0,.7f,0,1), new reRotationGizmoHelper());	
	addHelper(reMat4(), reVec3(0,0,1), new reCircleRenderable(), 0, true, reColor4(0,0,.7f,1), new reRotationGizmoHelper());

	selected((reGizmoHelper*)children->at(defaultSelectedIndex));
}
    void
    Tree::add(int val)
    {
      if (d_root.get() == NULL) {
	d_root = std::shared_ptr<Node>(new Node(val));
      } else {
	addHelper(val, *d_root);
      } // if
    } // add
Beispiel #5
0
bool Lexicon::add(const std::string& word) {
    if (word.empty()) {
        return false;
    }
    std::string scrubbed = word;
    if (!scrub(scrubbed)) {
        return false;
    }
    return addHelper(m_root, scrubbed, /* originalWord */ scrubbed);
}
Beispiel #6
0
void addHelper(struct node* n, int x)
  //@ requires n!= 0 &*& lseg(n, 0, ?vs);
  //@ ensures lseg(n, 0, append(vs, cons(x, nil)));
{
  //@ open lseg(n, 0, vs);
  if(n->next == 0) {
    //@ open lseg(0, 0, _);
    //@ close lseg(0, 0, _);
    struct node* nn = create_node(0, x);
    n->next = nn;
    //@ close lseg(nn, 0, cons(x, nil));
  } else {
    addHelper(n->next, x);
  }
  //@ close lseg(n, 0, append(vs, cons(x, nil)));
}
Beispiel #7
0
void add_recursive(struct linkedlist* l, int x)
  //@ requires list(l, ?vs);
  //@ ensures list(l, append(vs, cons(x, nil)));
{
  //@ open list(l, vs);
  if(l->head == 0) {
    struct node* n = create_node(0, x);
    l->head = n;
    //@ open lseg(0, 0, _);
    //@ close lseg(0, 0, _);
    //@ close lseg(n, 0, cons(x, nil));
  } else {
    addHelper(l->head, x);
  }
  //@ close list(l, append(vs, cons(x, nil)));
}
Beispiel #8
0
// pre: word is scrubbed to contain only lowercase a-z letters
bool Lexicon::addHelper(TrieNode*& node, const std::string& word, const std::string& originalWord) {
    if (node == NULL) {
        // create nodes all the way down, one for each letter of the word
        node = new TrieNode();
    }

    if (word.empty()) {
        // base case: we have added all of the letters of this word
        if (node->isWord()) {
            return false;   // duplicate word; already present
        } else {
            // new word; add it
            node->setWord(true);
            m_size++;
            m_allWords.add(originalWord);
            return true;
        }
    } else {
        // recursive case: chop off first letter, traverse the rest
        return addHelper(node->child(word[0]), word.substr(1), originalWord);
    }
}
Beispiel #9
0
Angle& Angle::operator += (const Angle &a)
{
    *this = addHelper(a);
    return *this;
}
Beispiel #10
0
// BASIC MATH
Angle Angle::operator + (const Angle &a)
{
    return addHelper(a);
}