Beispiel #1
0
 virtual void init_node(db::node *node)
 {
   db::simple_tuple *stpl(db::simple_tuple::create_new(new vm::tuple(vm::All->PROGRAM->get_init_predicate()), 0));
    new_work_self(node, stpl);
    node->init();
    node->set_owner(this);
 }
Beispiel #2
0
message*
message::unpack(byte *buf, const size_t buf_size, int *pos, MPI_Comm comm)
{
   node::node_id id;
   
   MPI_Unpack(buf, buf_size, pos, &id, 1, MPI_UNSIGNED, comm);
   
   simple_tuple *stpl(simple_tuple::unpack(buf, buf_size, pos, comm));
   
   return new message(id, stpl);
}
Beispiel #3
0
   inline void get_tuples_until_timestamp(db::simple_tuple_list& ls, const size_t until)
   {
      while(!tuple_pqueue.empty()) {
         heap_priority pr = tuple_pqueue.min_value();
         
         if((size_t)pr.int_priority > until) {
            break;
         }
         
         db::simple_tuple *stpl(tuple_pqueue.pop());
         ls.push_back(stpl);
      }

      while(!rtuple_pqueue.empty()) {
         heap_priority pr = rtuple_pqueue.min_value();
         if((size_t)pr.int_priority > until)
            break;
         
         db::simple_tuple *stpl(rtuple_pqueue.pop());
         ls.push_back(stpl);
      }
   }
Beispiel #4
0
vm::tuple*
agg_configuration::generate_sum_list_float(const field_num field) const
{
   assert(!vals.empty());
   
   const_iterator end(vals.end());
   const_iterator it(vals.begin());
   vm::tuple *first_tpl((*it)->get_tuple());
   float_list *first(first_tpl->get_float_list(field));
   const size_t len(float_list::length(first));
   const size_t num_lists(vals.size());
   float_list *lists[num_lists];
   vm::tuple *ret(first_tpl->copy_except(field));
   
   for(size_t i(0); it != end; ++it) {
      simple_tuple *stpl(*it);
      size_t count(size_t (stpl->get_count()));
      for(size_t j(0); j < count; ++j) {
         lists[i++] = stpl->get_tuple()->get_float_list(field);
         assert(float_list::length(lists[i-1]) == len);
      }
      assert(i <= num_lists);
   }
   
   stack_float_list vals;
   
   for(size_t i(0); i < len; ++i) {
      float_val sum(0.0);
      
      for(size_t j(0); j < num_lists; ++j) {
         float_list *ls(lists[j]);
         assert(ls != NULL);
         sum += ls->get_head();
         lists[j] = ls->get_tail();
      }
      
      vals.push(sum);
   }
   
   for(size_t j(0); j < num_lists; ++j)
      assert(float_list::is_null(lists[j]));
   
   float_list *ptr(from_stack_to_list<stack_float_list, float_list>(vals));
   
   ret->set_float_list(field, ptr);
   
   return ret;
}
Beispiel #5
0
 inline void init_node(db::node *node)
 {
    db::simple_tuple *stpl(db::simple_tuple::create_new(new vm::tuple(vm::state::PROGRAM->get_init_predicate())));
    new_work_self(node, stpl);
    node->init();
 }