Example #1
0
  bool AddLibrary(void *Handle, bool IsProcess = false, bool CanClose = true) {
#ifdef LLVM_ON_WIN32
    assert((Handle == this ? IsProcess : !IsProcess) && "Bad Handle.");
#endif

    if (LLVM_LIKELY(!IsProcess)) {
      if (Find(Handle) != Handles.end()) {
        if (CanClose)
          DLClose(Handle);
        return false;
      }
      Handles.push_back(Handle);
    } else {
#ifndef LLVM_ON_WIN32
      if (Process) {
        if (CanClose)
          DLClose(Process);
        if (Process == Handle)
          return false;
      }
#endif
      Process = Handle;
    }
    return true;
  }
Example #2
0
 HandleList::iterator Find(void *Handle) {
   return std::find(Handles.begin(), Handles.end(), Handle);
 }
Example #3
0
 bool Contains(void *Handle) {
   return Handle == Process || Find(Handle) != Handles.end();
 }
Example #4
0
static void execute_actions(
        const HandleList<Action>& actions,
        const Handle<SpaceObject> original_subject, const Handle<SpaceObject> original_object,
        Point* offset, bool allowDelay) {
    bool checkConditions = false;

    for (auto action: actions) {
#ifdef DATA_COVERAGE
        covered_actions.insert(action.number());
#endif  // DATA_COVERAGE

        if (action->verb == kNoAction) {
            break;
        }
        auto subject = original_subject;
        if (action->initialSubjectOverride != kNoShip) {
            subject = GetObjectFromInitialNumber(action->initialSubjectOverride);
        }
        auto object = original_object;
        if (action->initialDirectOverride != kNoShip) {
            object = GetObjectFromInitialNumber(action->initialDirectOverride);
        }

        if ((action->delay > ticks(0)) && allowDelay) {
            queue_action(
                    {action.number(), (*actions.end()).number()},
                    action->delay, subject, object, offset);
            return;
        }
        allowDelay = true;

        auto focus = object;
        if (action->reflexive || !focus.get()) {
            focus = subject;
        }

        if (object.get() && subject.get()) {
            if ((action->owner < -1)
                    || ((action->owner == -1) && (object->owner == subject->owner))
                    || ((action->owner == 1) && (object->owner != subject->owner))
                    || (action->owner > 1)) {
                continue;
            }
        }

        if ((action->inclusiveFilter || action->exclusiveFilter)
                && (!object.get() || !action_filter_applies_to(*action, object))) {
            continue;
        }

        switch (action->verb) {
            case kCreateObject:
            case kCreateObjectSetDest:    create_object(action, focus, subject, offset); break;

            case kPlaySound:              play_sound(action, focus); break;
            case kMakeSparks:             make_sparks(action, focus); break;
            case kDie:                    die(action, focus, subject); break;
            case kNilTarget:              nil_target(action, focus); break;
            case kLandAt:                 land_at(action, focus, subject); break;
            case kEnterWarp:              enter_warp(action, focus, subject); break;
            case kChangeScore:            change_score(action, focus); break;
            case kDeclareWinner:          declare_winner(action, focus); break;
            case kDisplayMessage:         display_message(action, focus); break;
            case kSetDestination:         set_destination(action, focus, subject); break;
            case kActivateSpecial:        activate_special(action, focus, subject); break;
            case kActivatePulse:          activate_pulse(action, focus, subject); break;
            case kActivateBeam:           activate_beam(action, focus, subject); break;
            case kColorFlash:             color_flash(action, focus); break;
            case kEnableKeys:             enable_keys(action, focus); break;
            case kDisableKeys:            disable_keys(action, focus); break;
            case kSetZoom:                set_zoom(action, focus); break;
            case kComputerSelect:         computer_select(action, focus); break;
            case kAssumeInitialObject:    assume_initial_object(action, focus); break;

            case kAlterDamage:            alter_damage(action, focus); break;
            case kAlterVelocity:          alter_velocity(action, focus, subject, object); break;
            case kAlterThrust:            alter_thrust(action, focus); break;
            case kAlterMaxVelocity:       alter_max_velocity(action, focus); break;
            case kAlterLocation:          alter_location(action, focus, subject, object); break;
            case kAlterWeapon1:           alter_weapon1(action, focus); break;
            case kAlterWeapon2:           alter_weapon2(action, focus); break;
            case kAlterSpecial:           alter_special(action, focus); break;
            case kAlterEnergy:            alter_energy(action, focus); break;
            case kAlterOwner:             alter_owner(action, focus, subject, object); break;
            case kAlterHidden:            alter_hidden(action); break;
            case kAlterCloak:             alter_cloak(action, focus); break;
            case kAlterOffline:           alter_offline(action, focus); break;
            case kAlterSpin:              alter_spin(action, focus); break;
            case kAlterBaseType:          alter_base_type(action, focus, object); break;
            case kAlterConditionTrueYet:  alter_condition_true_yet(action); break;
            case kAlterOccupation:        alter_occupation(action, focus, subject); break;
            case kAlterAbsoluteCash:      alter_absolute_cash(action, focus); break;
            case kAlterAge:               alter_age(action, focus); break;
            case kAlterAbsoluteLocation:  alter_absolute_location(action, focus); break;

            case kAlterMaxThrust:
            case kAlterMaxTurnRate:
            case kAlterScale:
            case kAlterAttributes:
            case kAlterLevelKeyTag:
            case kAlterOrderKeyTag:
            case kAlterEngageKeyTag:      /* not implemented */ break;
        }

        switch (action->verb) {
            case kChangeScore:
            case kDisplayMessage:
                checkConditions = true;
                break;
        }
    }

    if (checkConditions) {
        CheckLevelConditions();
    }
}