Ejemplo n.º 1
0
void TExampleForMissing::resetExample()
{ 
  checkProperty(dataDescription);

  DCs.clear();
  DKs.clear();

  float averageWeight=1;

  TVarList::const_iterator vi(domain->attributes->begin()), vie(domain->attributes->end());
  TExample::iterator ei(begin()), bei(ei);
  vector<float>::const_iterator ai(dataDescription->averages.begin()), aei(dataDescription->averages.end());
  for(; vi!=vie; ei++, vi++) {
    if ((*ei).isSpecial()) {
      if ((*vi)->varType==TValue::FLOATVAR)
        *ei=TValue(*ai);
      else if (dataDescription->missingWeight && (*ei).isDK()) {
        DKs.push_back(ei-bei);
        averageWeight/=float((*vi)->noOfValues());
      }
      else
        DCs.push_back(ei-bei);

      (*vi)->firstValue(*ei);
    }
    if (ai!=aei)
      ai++;
  }

  if (dataDescription->missingWeight) {
    float weight = dataDescription->originalWeight ? getMeta(dataDescription->originalWeight).floatV : 1;
    if (dataDescription->domainDistributions) {
      TDomainDistributions::const_iterator di(dataDescription->domainDistributions->begin());
      ITERATE(vector<int>, ci, DKs) {
        // DKs contain only discrete variables, so it is safe to cast
        const TDiscDistribution &dist = CAST_TO_DISCDISTRIBUTION(*(di+*ci));
        if (dist.abs)
          weight *= dist.front() / dist.abs;
      }
    }
Ejemplo n.º 2
0
void nl80211::setup_family(boost::system::error_code& ec)
{
	genetlink::message msg;

	msg.flags(netlink::message::request | netlink::message::ack);
	msg.command(genetlink::message::cmd_get_family);
	msg.version(1);
	msg.push_attr(genetlink::message::attr_family_name, "nl80211", 8);

	_gnl.send(msg.cbuffer());

	size_t rbytes = _gnl.receive(boost::asio::buffer(_buffer));
	for (netlink::message_iterator mit(_buffer, rbytes); mit; ++mit) {
		if (mit.type() == netlink::message::error) {
			ec = boost::system::error_code(mit.error(), boost::system::system_category());
			return;
		}

		if (mit.type() == netlink::message::min_type) {
			genetlink::message rmsg(mit.get());

			for (netlink::attribute_iterator ai(rmsg); ai; ++ai) {
				switch (ai.type()) {
				case genetlink::message::attr_family_id:
					_family = *ai.get<uint16>();
					break;

				case genetlink::message::attr_family_name:
					BOOST_ASSERT(!strcmp(ai.get<const char>(), "nl80211"));
					break;

				case genetlink::message::attr_version:
					_version = *ai.get<uint32>();
					break;

				case genetlink::message::attr_hdrsize:
					_hdrsize = *ai.get<uint32>();
					break;

				case genetlink::message::attr_mcast_groups:
					for (netlink::attribute_iterator ali(rmsg, ai); ali; ++ali) {
						const char* name = nullptr;
						uint32      id = 0;

						for (netlink::attribute_iterator aei(rmsg, ali); aei; ++aei) {
							switch (aei.type()) {
							case genetlink::message::attr_mcast_name:
								name = aei.get<const char>();
								break;

							case genetlink::message::attr_mcast_id:
								id = *aei.get<uint32>();
								break;
							}
						}

						if (name && !strcmp(name, "mlme")) {
							_mlne_mcast_id = id;
							break;
						}
					}
					break;
				}
			}
			break;
		}
	}
}