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 }
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)); }
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
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); }
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))); }
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))); }
// 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); } }
Angle& Angle::operator += (const Angle &a) { *this = addHelper(a); return *this; }
// BASIC MATH Angle Angle::operator + (const Angle &a) { return addHelper(a); }