Пример #1
0
  private void doSchedule(Work work) {
    int driverNum = allocMap.length;
    int base = work.getWorkers() / driverNum;
    int extra = work.getWorkers() % driverNum;

    for (int i = 0; i < driverNum; i++) allocMap[i] = base;
    int lower = allocIdx;
    int upper = lower + extra;
    for (int i = lower; i < upper; i++) allocMap[i % driverNum]++;
    allocIdx = upper % driverNum;

    int idx = 0;
    int offset = 0;
    int workers = 0;
    for (DriverContext driver : drivers.values()) {
      if ((workers = allocMap[idx++]) == 0) continue;
      schedules.addSchedule(createSchedule(work, driver, offset, workers));
      offset += workers;
    }
  }