コード例 #1
0
void StrategyAttackCL::enableBridgeCaptors() {
  LOG_WARNING("enableBridgeCaptors %s\n", b2s(useBridgeBumpers_));
  if (useBridgeBumpers_) {
    Events->enable(EVENTS_NO_BRIDGE_BUMP_LEFT);
    if (bridgeDetectionByCenter_ && (bridge_ == BRIDGE_POS_MIDDLE_CENTER || bridge_ == BRIDGE_POS_CENTER)) {
      // on n'utilise pas le capteur droit si on passe en sioux
    } else {
      Events->enable(EVENTS_NO_BRIDGE_BUMP_RIGHT);
    }
  }
}
コード例 #2
0
ファイル: E.cpp プロジェクト: iwiwi/programming-contests
ll naive(ll l, ll r) {
  ll ans = 0;
  for (ll x = l; x <= r; ++x) {
    string s = b2s(x);
    int n = s.length(), k = init_kmp(s);
    if (k < n && n % k == 0) {
      cerr << " " << s << endl;
      ans += 1;
    }
  }
  return ans;
}
コード例 #3
0
ファイル: wmiopn.cpp プロジェクト: TidyHuang/vizgems
int SWMIopnexec (state_t *sp) {
  char q[1024], opnstr[1024], *name, *origname, *s;
  opn_t *opnp, *opnbasep, *opntimep, *opnfreqp;
  obj_t *objp;
  HRESULT hr;
  BSTR propb, ctb, wqlb, qb;
  SAFEARRAY *props;
  VARIANT var;
  LONG pu, pl, pi;
  ULONG ul;
  double v;
  kvt_t *kvtp;
  int kvti;

  ctb = s2b ("countertype");
  wqlb = s2b ("WQL");
  for (
    objp = (obj_t *) dtfirst (objdict); objp;
    objp = (obj_t *) dtnext (objdict, objp)
  ) {
    sfsprintf (q, 1024, "select * from %s", objp->obj);
    if (verbose)
      sfprintf (sfstderr, "query: %s\n", q);
    if (!(qb = s2b (q))) {
      sfprintf (sfstderr, "cannot convert obj name %s to bstr\n", objp->obj);
      return -1;
    }

    if ((hr = sp->pSvc->ExecQuery (
      wqlb, qb, WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
      0, &sp->pEnum
    )) != S_OK) {
      sfprintf (
        sfstderr, "cannot execute query %s, error %s\n", q, E2ccp (hr)
      );
      return -1;
    }

    if (SWMIproxysecurity (sp, sp->pEnum) < 0) {
      sfprintf (sfstderr, "cannot enable security for query %s\n", q);
      return -1;
    }

    while (
      sp->pEnum->Next (30 * 1000, 1, &sp->pClsObj, &ul
    ) == S_OK && ul == 1) {
      if ((hr = sp->pClsObj->GetNames (
        0, WBEM_FLAG_ALWAYS | WBEM_FLAG_NONSYSTEM_ONLY, 0, &props
      )) != S_OK) {
        sfprintf (
          sfstderr, "cannot get props for obj %s, error %s\n",
          objp->obj, E2ccp (hr)
        );
        return -1;
      }
      if(
        (hr = SafeArrayGetLBound (props, 1, &pl)) != S_OK ||
        (hr = SafeArrayGetUBound (props, 1, &pu)) != S_OK
      ) {
        sfprintf (
          sfstderr, "cannot get props bounds for %s, error %s\n",
          objp->obj, E2ccp (hr)
        );
        return -1;
      }
      if (pu - pl + 1 > kvtn) {
        kvtn = pu - pl + 1;
        if (!(kvts = (kvt_t *) vmresize (
          Vmheap, kvts, kvtn * sizeof (kvt_t), VM_RSCOPY
        ))) {
          sfprintf (sfstderr, "cannot grow kvt array\n");
          return -1;
        }
      }
      name = NULL;
      for (pi = pl, kvtl = 0; pi <= pu; pi++, kvtl++) {
        kvtp = &kvts[kvtl];
        if ((hr = SafeArrayGetElement (props, &pi, &propb)) != S_OK) {
          sfprintf (
            sfstderr, "cannot get prop name for %d/%s, error %s\n",
            pi, objp->obj, E2ccp (hr)
          );
          continue;
        }
        kvtp->kp = (char *) b2s (propb);
        if ((hr = sp->pClsObj->Get (propb, 0, &var, 0, 0)) != S_OK) {
          sfprintf (
            sfstderr, "cannot get prop value for %d/%s, error %s\n",
            pi, objp->obj, E2ccp (hr)
          );
          continue;
        }
        if (
            !(kvtp->vp = (char *) V2ccp (&var)) ||
            !(kvtp->vp = vmstrdup (Vmheap, kvtp->vp))
        ) {
          kvtl--;
          continue;
        }
        switch (var.vt) {
        case VT_UI1: kvtp->v = var.bVal; break;
        case VT_I2: kvtp->v = var.iVal;  break;
        case VT_I4: kvtp->v = var.lVal;  break;
        default: kvtp->v = strtoull (kvtp->vp, &s, 10); break;
        }
        if (strcmp (kvtp->kp, "Name") == 0) {
          if (var.vt == VT_NULL)
            name = "ALL";
          else
            name = kvtp->vp;
          origname = name;
        }

        if ((hr = sp->pClsObj->GetPropertyQualifierSet (
          propb, &sp->pQualSet
        )) != S_OK) {
          sfprintf (
            sfstderr, "cannot get quals for %d/%s, error %s\n",
            pi, objp->obj, E2ccp (hr)
          );
          continue;
        }
        kvtp->type = V_TYPE_STRING;
        if ((hr = sp->pQualSet->Get (
          ctb, 0, &var, 0
        )) == S_OK && var.vt == VT_I4) {
          switch (var.lVal) {
          case PERF_COUNTER_RAWCOUNT:
          case PERF_COUNTER_LARGE_RAWCOUNT:
            kvtp->type = V_TYPE_SIMPLE; break;
          case PERF_RAW_FRACTION:
            kvtp->type = V_TYPE_WITHBASE; break;
          case PERF_RAW_BASE:
          case PERF_PRECISION_TIMESTAMP:
            kvtp->type = V_TYPE_ISBASE; break;
          case PERF_COUNTER_COUNTER:
          case PERF_COUNTER_BULK_COUNT:
            kvtp->type = V_TYPE_WITHTIMENFREQ; break;
          case PERF_100NSEC_TIMER:
            kvtp->type = V_TYPE_WITH100NSEC; break;
          case PERF_100NSEC_TIMER_INV:
            kvtp->type = V_TYPE_WITH100NSECINV; break;
          default:
            kvtp->type = V_TYPE_SIMPLE; break;
          }
        } else {
          if (strcmp (kvtp->kp, "Timestamp_PerfTime") == 0)
            kvtp->type = V_TYPE_ISTIME;
          else if (strcmp (kvtp->kp, "Frequency_PerfTime") == 0)
            kvtp->type = V_TYPE_ISFREQ;
          else if (strcmp (kvtp->kp, "Timestamp_Sys100NS") == 0)
            kvtp->type = V_TYPE_IS100NSEC;
          else if (kvtp->vp[0] == 0 || isdigit (kvtp->vp[0]))
            kvtp->type = V_TYPE_SIMPLE;
        }
      }
      ::SafeArrayDestroy (props);
      sp->pClsObj->Release ();

      for (kvti = 0; kvti < kvtl; kvti++) {
        kvtp = &kvts[kvti];
        sfsprintf (opnstr, 1024, "%s.%s.%s", objp->obj, kvtp->kp, name);
        if (!(opnp = (opn_t *) dtmatch (opndict, opnstr))) {
          sfsprintf (opnstr, 1024, "%s.%s.ALL", objp->obj, kvtp->kp);
          if ((opnp = (opn_t *) dtmatch (opndict, opnstr)))
            name = "ALL";
          else
            sfsprintf (opnstr, 1024, "%s.%s.%s", objp->obj, kvtp->kp, name);
        }

        if (!opnp) {
          if (kvtp->type < V_TYPE_SUPPORT)
            continue;
          if (!(opnp = opninsert (
            OPN_KIND_S, "", "", "", objp->obj, kvtp->kp, name, ""
          ))) {
            sfprintf (sfstderr, "cannot insert opn\n");
            return -1;
          }
          opnp->objp = objp;
        }
        if (opnp->ep && strstr (origname, opnp->ep))
          continue;
        if (opnp->type == 0)
          opnp->type = kvtp->type;
        opnp->vp = kvtp->vp;
        opnp->cv += kvtp->v;
        opnp->havec = TRUE;
      }
      for (kvti = 0; kvti < kvtl; kvti++) {
        kvtp = &kvts[kvti];
        sfsprintf (opnstr, 1024, "%s.%s.SUM", objp->obj, kvtp->kp);
        if (!(opnp = (opn_t *) dtmatch (opndict, opnstr)))
          continue;

        if (opnp->ep && strstr (origname, opnp->ep))
          continue;
        if (opnp->type == 0)
          opnp->type = kvtp->type;
        opnp->vp = kvtp->vp;
        opnp->cv += kvtp->v;
        opnp->havec = TRUE;
      }
    }
  }
  for (
    opnp = (opn_t *) dtfirst (opndict); opnp;
    opnp = (opn_t *) dtnext (opndict, opnp)
  ) {
    if (opnp->kind != OPN_KIND_P || !opnp->havec)
      continue;
    if (opnp->type >= V_TYPE_SUPPORT)
      continue;
    switch (opnp->type) {
    case V_TYPE_STRING:
#if 0
      sfprintf (
        sfstdout, "rt=STAT type=string name=%s str=%s%s%s%s\n",
        opnp->mname, opnp->vp,
        (opnp->lp[0]) ? " label='" : "", (opnp->lp[0]) ? opnp->lp : "",
        (opnp->lp[0]) ? "'" : ""
      );
#endif
      break;
    case V_TYPE_SIMPLE:
      sfprintf (
        sfstdout, "rt=STAT type=%s name=%s unit=%s num=%lld%s%s%s\n",
        opnp->mtype, opnp->mname, opnp->munit, opnp->cv,
        (opnp->lp[0]) ? " label='" : "", (opnp->lp[0]) ? opnp->lp : "",
        (opnp->lp[0]) ? "'" : ""
      );
      break;
    case V_TYPE_WITHBASE:
      sfsprintf (opnstr, 1024, "%s.%s_Base.%s", opnp->op, opnp->pp, opnp->np);
      if (!(opnbasep = (opn_t *) dtmatch (opndict, opnstr))) {
        sfprintf (sfstderr, "cannot find base property for %s\n", opnp->opn);
        continue;
      }
      if (!opnbasep->havec)
        continue;
      if ((v = (opnbasep->cv == 0) ? 0.00 : 100.0 * (
        opnp->cv / (double) opnbasep->cv
      )) < 0.0)
        continue;
      sfprintf (
        sfstdout, "rt=STAT type=%s name=%s unit=%s num=%lf%s%s%s\n",
        opnp->mtype, opnp->mname, opnp->munit, v,
        (opnp->lp[0]) ? " label='" : "", (opnp->lp[0]) ? opnp->lp : "",
        (opnp->lp[0]) ? "'" : ""
      );
      break;
    case V_TYPE_WITHTIMENFREQ:
      if (!opnp->havep)
        continue;
      sfsprintf (opnstr, 1024, "%s.Timestamp_PerfTime.%s", opnp->op, opnp->np);
      if (!(opntimep = (opn_t *) dtmatch (opndict, opnstr))) {
        sfprintf (sfstderr, "cannot find time property for %s\n", opnp->opn);
        continue;
      }
      if (!opntimep->havec || !opntimep->havep)
        continue;
      sfsprintf (opnstr, 1024, "%s.Frequency_PerfTime.%s", opnp->op, opnp->np);
      if (!(opnfreqp = (opn_t *) dtmatch (opndict, opnstr))) {
        sfprintf (sfstderr, "cannot find freq property for %s\n", opnp->opn);
        continue;
      }
      if (!opnfreqp->havec)
        continue;
      if (
        opnp->cv < opnp->pv || opntimep->cv <= opntimep->pv ||
        opnfreqp->cv == 0
      )
        continue;
      if ((v = (opnp->cv - opnp->pv) / (
        (opntimep->cv - opntimep->pv) / (double) opnfreqp->cv
      )) < 0.0) {
        if (v > -1)
          v = 0.0;
        else
          continue;
      }
      sfprintf (
        sfstdout, "rt=STAT type=%s name=%s unit=%s num=%lf%s%s%s\n",
        opnp->mtype, opnp->mname, opnp->munit, v,
        (opnp->lp[0]) ? " label='" : "", (opnp->lp[0]) ? opnp->lp : "",
        (opnp->lp[0]) ? "'" : ""
      );
      break;
    case V_TYPE_WITH100NSEC:
    case V_TYPE_WITH100NSECINV:
      if (!opnp->havep)
        continue;
      sfsprintf (opnstr, 1024, "%s.Timestamp_Sys100NS.%s", opnp->op, opnp->np);
      if (!(opntimep = (opn_t *) dtmatch (opndict, opnstr))) {
        sfprintf (sfstderr, "cannot find time property for %s\n", opnp->opn);
        continue;
      }
      if (!opntimep->havec || !opntimep->havep)
        continue;
      if (opnp->cv < opnp->pv || opntimep->cv <= opntimep->pv)
        continue;
      if (opnp->type == V_TYPE_WITH100NSEC) {
        if ((v = 100.0 * (
          (opnp->cv - opnp->pv) /
          ((double) opntimep->cv - opntimep->pv)
        )) < 0.0) {
          if (v > -1)
            v = 0.0;
          else
            continue;
        }
        sfprintf (
          sfstdout, "rt=STAT type=%s name=%s unit=%s num=%lf%s%s%s\n",
          opnp->mtype, opnp->mname, opnp->munit, v,
          (opnp->lp[0]) ? " label='" : "", (opnp->lp[0]) ? opnp->lp : "",
          (opnp->lp[0]) ? "'" : ""
        );
      } else {
        if ((v = 100.0 * (
          1.0 - (opnp->cv - opnp->pv) /
          ((double) opntimep->cv - opntimep->pv)
        )) < 0.0) {
          if (v > -1)
            v = 0.0;
          else
            continue;
        }
        sfprintf (
          sfstdout, "rt=STAT type=%s name=%s unit=%s num=%lf%s%s%s\n",
          opnp->mtype, opnp->mname, opnp->munit, v,
          (opnp->lp[0]) ? " label='" : "", (opnp->lp[0]) ? opnp->lp : "",
          (opnp->lp[0]) ? "'" : ""
        );
      }
      break;
    }
  }
  return 0;
}
コード例 #4
0
void StrategyAttackCL::disableBridgeCaptors() {
  LOG_WARNING("enableBridgeCaptors %s\n", b2s(useBridgeBumpers_));
  Events->disable(EVENTS_NO_BRIDGE_BUMP_LEFT);
  Events->disable(EVENTS_NO_BRIDGE_BUMP_RIGHT);
}
コード例 #5
0
// --------------------------------------------------------------------------
// return true if there is no bridge here
// dummyBumperEvt return false if it must continue the movement
// --------------------------------------------------------------------------
bool StrategyAttackCL::checkBridgeBumperEvent(bool& dummyBumperEvt) 
{
    dummyBumperEvt = false;
    bool holeLeft=Events->isInWaitResult(EVENTS_NO_BRIDGE_BUMP_LEFT);
    bool holeRight=Events->isInWaitResult(EVENTS_NO_BRIDGE_BUMP_RIGHT);
    if (holeLeft || holeRight) {
        dummyBumperEvt = true;
	if (RobotPos->x() < 1200 || RobotPos->x()> 1700) return false;
        // le pont n'est pas la! Faut vite s'arreter!
        Move->emergencyStop();
        usleep(500000); // attend 0.5s et regarde a nouveau les bumpers pour voir 
                        // si c'etait une fausse alerte
	bool bridgeDetected=false;
	BridgePosition oldBridgePos=bridge_;
        if (getBridgePosByBumper(bridgeDetected)
            && !bridgeDetected) {
            // il n'y a pas de pont ici, c'etait vrai!
	    LOG_WARNING("No bridge here! %s, current bridge=%s, holeLeft=%s holeRight=%s\n", 
			RobotPos->txt(),  BridgePosTxt(bridge_), b2s(holeLeft), b2s(holeRight));
            noBridgeHere(); 
	    BridgeCaptorStatus captors[BRIDGE_CAPTORS_NBR];
	    if (getBridgeCaptors(captors, false)) { // on n'est pas dans la merde les bumpers ne marchent pas
		EnvDetectorDist leftSharpBridge = ENV_NO;
		EnvDetectorDist rightSharpBridge = ENV_NO;
		if (useEnvDetectorsForBridge_) {
		    if (!EnvDetector->getEnvDetector(ENV_DETECTOR_TOP_LEFT, leftSharpBridge)) {
			LOG_ERROR("Can't get left sharp-bridge detector.\n");
			leftSharpBridge = ENV_NO;
		    } else {
			LOG_INFO("left-sharp-bridge: %d\n", leftSharpBridge);
		    }
		    if (!EnvDetector->getEnvDetector(ENV_DETECTOR_TOP_RIGHT, rightSharpBridge)) {
			LOG_ERROR("Can't get right sharp-bridge detector.\n");
			rightSharpBridge = ENV_NO;
		    } else {
			LOG_INFO("right-sharp-bridge: %d\n", leftSharpBridge);
		    }
		}
	      if (captors[BRIDGE_BUMPER_LEFT] != BRIDGE_DETECTED && leftSharpBridge <= ENV_FAR) {
		// mark bridges, that are unavailable (current bridge
		// is going to get discarded elsewhere)
		if (oldBridgePos == BRIDGE_POS_MIDDLE_BORDURE) {
		  bridgeAvailibility_ &= (~(1<<BRIDGE_ENTRY_BORDURE_BIT));
		  bridgeAvailibility_ &= (~(1<<BRIDGE_ENTRY_MIDDLE_BORDURE_BIT));
		}
		if (oldBridgePos == BRIDGE_POS_MIDDLE_CENTER) {
		  bridgeAvailibility_ &= (~(1<<BRIDGE_ENTRY_BORDURE_BIT));
		  bridgeAvailibility_ &= (~(1<<BRIDGE_ENTRY_MIDDLE_BORDURE_BIT));
		}
	      } else if (captors[BRIDGE_BUMPER_RIGHT] != BRIDGE_DETECTED && rightSharpBridge <= ENV_FAR) {
		if (oldBridgePos == BRIDGE_POS_MIDDLE_BORDURE) {
		  bridgeAvailibility_ &= (~(1<<BRIDGE_ENTRY_CENTER_BIT));
		  bridgeAvailibility_ &= (~(1<<BRIDGE_ENTRY_MIDDLE_CENTER_BIT));
		  bridgeAvailibility_ &= (~(1<<BRIDGE_ENTRY_SIOUX_BIT));
		}
		if (oldBridgePos == BRIDGE_POS_MIDDLE_CENTER) {
		  bridgeAvailibility_ &= (~(1<<BRIDGE_ENTRY_CENTER_BIT));
		  bridgeAvailibility_ &= (~(1<<BRIDGE_ENTRY_MIDDLE_CENTER_BIT));
		  bridgeAvailibility_ &= (~(1<<BRIDGE_ENTRY_SIOUX_BIT));
		}
	      } else {
		  LOG_INFO("bridge seems to be here");
		  dummyBumperEvt=true;
		  return false;
	      }
	    }
	    LOG_INFO("Availibility: 0x%2.2x\n", bridgeAvailibility_);
	    dummyBumperEvt=false;
            return true;
        }
    } 
    LOG_INFO("checkBridgeBumperEvent: dummy=%s\n", b2s(dummyBumperEvt));
	    
    return false;
}