Exemple #1
0
 inline id_t succ<id_t>(id_t id)
 {
     if (id.x == std::numeric_limits<int64_t>::max())
     {
         if (id.y == std::numeric_limits<int64_t>::max()) throw std::out_of_range("das::id_t overflowed.");
         return id_t(zero<int64_t>(), succ(id.y));
     }
     return id_t(succ(id.x), id.y);
 }
	void operator()(R &r, boost::uint8_t value)
	{
		switch(this->state)
		{
		case state_t::none:
			switch(value)
			{
			case dle:
				this->state = state_t::dle;
				break;
			default:
				r(data_t(value));
				break;
			}
			break;
		case state_t::dle:
			this->state = state_t::none;
			switch(value)
			{
			case dle:
				r(data_t(dle));
				break;
			case etx:
				r(end_t());
				break;
			default:
				r(id_t(value));
				break;
			}
			break;
		}
	}
Exemple #3
0
file_t::file_t(char const *name, string_t const &header) :
	ref_cnt(0), fd(-1), used(false), id() {

	if(config::check)
		return;

	fd = ::open(name, O_WRONLY | O_APPEND | O_CREAT, 0644);
	if(fd < 0)
		throw exception_sys_t(log::error, errno, "open (%s): %m", name);

	fd_guard_t guard(fd);

	id = id_t(fd, used);
	if(!id)
		throw exception_sys_t(log::error, errno, "fstat (%s): %m", name);

	if(::flock(fd, LOCK_SH | LOCK_NB) < 0)
		throw exception_sys_t(log::error, errno, "flock (%s): %m", name);

	if(header) {
		if(::write(fd, header.ptr(), header.size()) < 0)
			throw exception_sys_t(log::error, errno, "write (%s): %m", name);
	}

	guard.relax();
}
 /**
  * Performs inference by calibrating the junction tree.
  */
 void calibrate() {
   mpp_traversal(jt_, id_t(), [&](const edge_type& e) {
       F product = jt_[e.source()];
       for (edge_type in : jt_.in_edges(e.source())) {
         if (in.source() != e.target()) {
           product *= jt_[in](in);
         }
       }
       jt_[e](e) = product.marginal(jt_.separator(e));
     });
   calibrated_ = true;
 }
   // default_edge_prop - declare default properties for any future new edges
  void default_edge_prop(id_t const& key, id_t const& value) {
     edges_t& edges_ =
       subgraph_depth == 0 ? edges : subgraph.edges();
     props_t& edge_props_ =
       subgraph_depth == 0 ?
       default_edge_props :
       subgraph_edge_props[subgraph.name()];
 
     // add this to the list of default edge properties.
     edge_props_[key] = value;
     // for each edge, set its property to be empty string
     // set the dynamic property map value
     for(edges_t::iterator i = edges_.begin(); i != edges_.end(); ++i)
       if(edge_map[*i].find(key) == edge_map[*i].end())
         set_edge_property(*i,key,id_t());
   }
Exemple #6
0
void handler_t::check() {
	file_t *tmp = NULL;

	bool skip_file_check = false;

	{
		spinlock_guard_t guard(spinlock);
		if(old) {
			if(old->ref_cnt)
				skip_file_check = true;
			else {
				tmp = old;
				old = NULL;
			}
		}
	}

	if(tmp) { delete tmp; tmp = NULL; }
	if(skip_file_check) return;

	struct stat st;
	if(::stat(filename_z.ptr(), &st) == 0) {
		if(id_t(st) == current->id) // Don't need lock
			return;
	}
	else {
		if(errno != ENOENT)
			log_error("stat: (%s) %m", filename_z.ptr());
	}

	tmp = new file_t(filename_z.ptr(), header);

	{
		spinlock_guard_t guard(spinlock);
		if(!old) {
			old = current;
			current = tmp;
			tmp = NULL;
		}
		if(!old->ref_cnt) {
			tmp = old;
			old = NULL;
		}
	}

	if(tmp) { delete tmp; tmp = NULL; }
}
    // default_node_prop - declare default properties for any future new nodes
    void default_node_prop(id_t const& key, id_t const& value) {
      nodes_t& nodes_ =
        subgraph_depth == 0 ? nodes : subgraph.nodes();
      props_t& node_props_ =
        subgraph_depth == 0 ?
        default_node_props :
        subgraph_node_props[subgraph.name()];

      // add this to the selected list of default node properties.
      node_props_[key] = value;
      // for each node, set its property to default-constructed value 
      //   if it hasn't been set already.
      // set the dynamic property map value
      for(nodes_t::iterator i = nodes_.begin(); i != nodes_.end(); ++i)
        if(node_map[*i].find(key) == node_map[*i].end()) {
          set_node_property(*i,key,id_t());
        }
    }
Exemple #8
0
 static
 id_t
 generate() {
     return id_t(unique_id_t().string());
 }
Exemple #9
0
 static constexpr id_t invalid() { return id_t(); }