static void test_mount()
{
	printf ("test mount backend\n");

	KDB *kdb = kdb_new();
	elektraMountBackend (kdb, b_new("user", "user"), 0);
	succeed_if (kdb->trie, "there should be a trie");

	Key *mp = keyNew ("user", KEY_VALUE, "user", KEY_END);
	Key *sk = keyNew ("user", KEY_VALUE, "user", KEY_END);

	succeed_if (kdb->split->size == 1, "size of split not correct");
	compare_key(mp, kdb->split->parents[0]);

	compare_key(elektraMountGetBackend (kdb, sk)->mountpoint, mp);
	compare_key(elektraMountGetMountpoint (kdb, sk), mp);

	keySetName (sk, "user/below");
	compare_key(elektraMountGetBackend (kdb, sk)->mountpoint, mp);
	compare_key(elektraMountGetMountpoint (kdb, sk), mp);

	keySetName (sk, "system");
	kdb->defaultBackend = b_new("", "default");
	succeed_if (elektraMountGetBackend (kdb, sk) == kdb->defaultBackend, "did not return default backend");

	keySetName (mp, "");
	keySetString (mp, "default");
	compare_key(elektraMountGetBackend (kdb, sk)->mountpoint, mp);
	compare_key(elektraMountGetMountpoint (kdb, sk), mp);

	keyDel (sk);
	keyDel (mp);

	kdb_del (kdb);
}
Exemple #2
0
static inline blob_t * buf_to_blob_enqueue(char *buf, size_t size) {
    blob_t *b;
    if (size == 0) {
        if (0)
            WARN("Received 0 byte packet, not forwarding.");
        return NULL;
    }

    RELAY_ATOMIC_INCREMENT( RECEIVED_STATS.received_count, 1 );
    b = b_new(size);
    memcpy(BLOB_BUF_addr(b), buf, size);
    enqueue_blob_for_transmission(b);
    return b;
}
void connect_joints(Joint* c, SimpleNodeEditor* sneditor, ICameraSceneNode* camera, blist &tree_list)
{ 
    auto connect_two_joints = [&] ()
    {  
        vec3 dir = c->posA;
        dir.normalize();
        dir = dir * (c->posB.absolute_value() + c->posA.absolute_value());
        c->B->node->setPosition(c->A->node->getPosition() + dir.irr() );
        c->B->shadow->setPosition(c->B->node->getPosition() * vector3df(1,1,0) + vector3df(0,0,10));

        if (c->B->node == sneditor->selected_node)
        {
            // set cursor
            position2d<s32> screen_coord =
                irrlicht->colmgr->getScreenCoordinatesFrom3DPosition(c->B->node->getPosition(), camera);
            sneditor->cursor->setPosition((s4)((screen_coord.X) ), (s4)((screen_coord.Y)));
            sneditor->cursor_prev_pos = vec2(sneditor->cursor->getPosition().X, sneditor->cursor->getPosition().Y);
        }
    };
    
    if (c->A->tree == 0 && c->B->tree == 0)
    {
        CTree* new_tree = (CTree*)b_new(tree_list);
        b_set(new_tree->child_list,memory,sizeof(void*));
        b_copy_ptr(new_tree->child_list,c->A);
        b_copy_ptr(new_tree->child_list,c->B);
        new_tree->translation = vec3(0,0,0);

        c->A->tree = new_tree;
        c->B->tree = new_tree; 

        connect_two_joints();// (c,sneditor,camera); 
    }
    else if (c->A->tree != 0 && c->B->tree == 0)
    {

        CTree* existing_tree = c->A->tree;
        b_copy_ptr(existing_tree->child_list,c->B);
        c->B->tree = existing_tree;

        connect_two_joints();// (c,sneditor,camera);  
    }
    else if (c->A->tree == 0 && c->B->tree != 0)
    {
        CTree* existing_tree = c->B->tree;
    
        // connect them while i still have the child tree
        vec3 prev_pos = c->B->node->getPosition();
        connect_two_joints();// (c,sneditor,camera); 
        vec3 curr_pos = c->B->node->getPosition();
        vec3 translation = curr_pos - prev_pos;

        // update tree
        for (s4 k = 0; k < existing_tree->child_list.length; k++)
        {
            Component* cmpnt = (Component*)b_get_value(existing_tree->child_list,k);
            if (c->B == cmpnt) { continue; }
            
            cmpnt->node->setPosition(cmpnt->node->getPosition() + translation.irr());
            cmpnt->shadow->setPosition(cmpnt->node->getPosition() * vector3df(1,1,0) + vector3df(0,0,10));
        }

        b_copy_ptr(existing_tree->child_list,c->A);
        c->A->tree = existing_tree; 
    }
    else /* c->A and c->B have trees */
    {
        // TODO: translates (i think) the wrong way when
        // approaching from *inside* the large green rectangle

        if (c->A->tree != c->B->tree) // if tree is not connecting to itself
        {
            CTree* master_tree = c->A->tree;
            CTree* child_tree = c->B->tree;
            // connect them while i still have the child tree
            vec3 prev_pos = c->B->node->getPosition();
            connect_two_joints();// (c,sneditor,camera); 
            vec3 curr_pos = c->B->node->getPosition();
            vec3 translation = curr_pos - prev_pos;

            // update tree
            for (s4 k = 0; k < child_tree->child_list.length; k++)
            {
                Component* cmpnt = (Component*)b_get_value(child_tree->child_list,k);
                if (c->B == cmpnt) { continue; }
                
                cmpnt->node->setPosition(cmpnt->node->getPosition() + translation.irr());
                cmpnt->shadow->setPosition(cmpnt->node->getPosition() * vector3df(1,1,0) + vector3df(0,0,10));
            }

            // add c->B->tree components to c->A->tree
            for (s4 k = 0; k < child_tree->child_list.length; k++)
            {
                Component* cmpnt = (Component*)b_get_value(child_tree->child_list,k);
                b_copy_ptr(master_tree->child_list,cmpnt);
                cmpnt->tree = master_tree;
            }
            child_tree->child_list.length = 0;
        }
    }

    return;
}