コード例 #1
0
	void PixelProcessor::setFogColor(Color<float> fogColor)
	{
		// TODO: Compact into generic function
		word fogR = (unsigned short)(65535 * fogColor.r);
		word fogG = (unsigned short)(65535 * fogColor.g);
		word fogB = (unsigned short)(65535 * fogColor.b);

		fog.color4[0][0] = fogR;
		fog.color4[0][1] = fogR;
		fog.color4[0][2] = fogR;
		fog.color4[0][3] = fogR;

		fog.color4[1][0] = fogG;
		fog.color4[1][1] = fogG;
		fog.color4[1][2] = fogG;
		fog.color4[1][3] = fogG;

		fog.color4[2][0] = fogB;
		fog.color4[2][1] = fogB;
		fog.color4[2][2] = fogB;
		fog.color4[2][3] = fogB;

		fog.colorF[0] = replicate(fogColor.r);
		fog.colorF[1] = replicate(fogColor.g);
		fog.colorF[2] = replicate(fogColor.b);
	}
コード例 #2
0
ファイル: world.cpp プロジェクト: ChunHungLiu/FreeFT
	void World::removeEntity(EntityRef ref) {
		Entity *entity = refEntity(ref);
		if(entity) {
			m_entity_map.remove(ref.index());
			replicate(ref.index());
		}
	}
コード例 #3
0
void TouchDebug::mouseDown(const ci::app::MouseEvent& e) {

	mReplicating = false;

	if(e.isAltDown()) {
		if(!mDropTouched){
			mEngine.mouseTouchBegin(e, mTouchId + 2);
			mDropTouched = true;
		} else {
			mEngine.mouseTouchEnded(e, mTouchId + 2);
			mDropTouched = false;
		}
	} else if(e.isShiftDown()) {
		mReplicating = true;
		replicate(e, ds::ui::TouchInfo::Added);

	} else if(e.isControlDown()){
		if(mTwoTouching){
			mTwoTouching = false;
		} else {
			mTwoTouching = true;
			mTwoTouchDown = e.getPos();

		}
	} else if(mTwoTouching){
		mEngine.mouseTouchBegin(e, mTouchId);

		int deltaX = e.getPos().x - mTwoTouchDown.x;
		int deltaY = e.getPos().y - mTwoTouchDown.y;
		ci::app::MouseEvent mouseTwo = ci::app::MouseEvent(e.getWindow(), 0, mTwoTouchDown.x - deltaX, mTwoTouchDown.y - deltaY, e.getNativeModifiers(), e.getWheelIncrement(), e.getNativeModifiers());
		mEngine.mouseTouchBegin(mouseTwo, mTouchId + 1);
	} else {
		mEngine.mouseTouchBegin(e, mTouchId);
	}
}
コード例 #4
0
	void PixelProcessor::setFogRanges(float start, float end)
	{
		context->fogStart = start;
		context->fogEnd = end;

		if(start == end)
		{
			end += 0.001f;   // Hack: ensure there is a small range
		}

		float fogScale = -1.0f / (end - start);
		float fogOffset = end * -fogScale;

		fog.scale = replicate(fogScale);
		fog.offset = replicate(fogOffset);
	}
コード例 #5
0
ファイル: StringPool.cpp プロジェクト: kanbang/Colt
const XMLCh *StringPool::getPooledString(const XMLCh *src)
{
  if(src == 0) return 0;
  if(*src == 0) return XMLUni::fgZeroLenString;

  // strings longer than lengthThreshold bytes are not pooled, as it is not probable they can be recycled
  const XMLCh* pszTmp = src + 1;
  while(*pszTmp) ++pszTmp;
  unsigned int length = (unsigned int)(pszTmp - src);

  if(length > lengthThreshold) {
    ++_toobig;
    return replicate(src, length);
  }

  unsigned int hashVal = hash(src, length);
  unsigned int modHashVal = hashVal % _modulus;

  const Bucket *bucket = _bucketList[modHashVal];
  while(bucket) {
    if(bucket->length == length &&
       XPath2Utils::equals(bucket->value, src)) {
      break;
    }
    bucket = bucket->next;
  }

  if(bucket) {
    ++_hits;
    return bucket->value;
  }
  else {
    ++_misses;
    if(_count >= (_modulus * 3 / 4)) {
      resize();
      modHashVal = hashVal % _modulus;
    }

    const XMLCh *result = replicate(src, length);
    _bucketList[modHashVal] = new (_mm->allocate(sizeof(Bucket)))
      Bucket(result, length, hashVal, _bucketList[modHashVal]);
    ++_count;

    return result;
  }
}
コード例 #6
0
ファイル: world.cpp プロジェクト: ChunHungLiu/FreeFT
	EntityRef World::addEntity(PEntity &&ptr, int index) {
		DASSERT(ptr);
		Entity *entity = ptr.get();
		index = m_entity_map.add(std::move(ptr), index);
		entity->hook(this, index);
		replicate(index);

		return entity->ref();
	}
コード例 #7
0
void TouchDebug::mouseUp(const ci::app::MouseEvent& e) {
	if(mReplicating){
		replicate(e, ds::ui::TouchInfo::Removed);
	} else {
		if(mTwoTouching){
			mEngine.mouseTouchEnded(e, mTouchId + 1);
		}
		mEngine.mouseTouchEnded(e, mTouchId);
	}
}
コード例 #8
0
ファイル: user.cpp プロジェクト: jbagg/vactrackerd
void User::addAnnualAllotment(qint32 year)
{
	Deposit *deposit;

	deposit = new Deposit;
	deposit->setYear(year);
	deposit->setAmount(annualAllotment);
	deposits[deposits.size()] = deposit;
	save();
	emit replicate();
}
コード例 #9
0
ファイル: StringPool.cpp プロジェクト: kanbang/Colt
const XMLCh *StringPool::getPooledString(const XMLCh *src, unsigned int length)
{
  if(src == 0) return 0;
  if(length == 0) return XMLUni::fgZeroLenString;

  if(length > lengthThreshold) {
    ++_toobig;
    return replicate(src, length);
  }

  unsigned int hashVal = hash(src, length);
  unsigned int modHashVal = hashVal % _modulus;

  const Bucket *bucket = _bucketList[modHashVal];
  while(bucket) {
    if(bucket->length == length &&
       equalsN(bucket->value, src, length)) {
      break;
    }
    bucket = bucket->next;
  }

  if(bucket) {
    ++_hits;
    return bucket->value;
  }
  else {
    ++_misses;
    if(_count >= (_modulus * 3 / 4)) {
      resize();
      modHashVal = hashVal % _modulus;
    }

    const XMLCh *result = replicate(src, length);
    _bucketList[modHashVal] = new (_mm->allocate(sizeof(Bucket)))
      Bucket(result, length, hashVal, _bucketList[modHashVal]);
    ++_count;

    return result;
  }
}
コード例 #10
0
ファイル: tabs.C プロジェクト: fooeybartoni/CSI702
// Replace first '\t' by filling up spaces until POS is reached
void tabto(string& s, int pos)
{
    for (int i = 0; unsigned(i) < s.length() && i < pos; i++)
    {
	if (s[i] == '\t')
	{
	    int offset = pos - i;
	    s.at(i, 1) = replicate(' ', offset);
	    return;
	}
    }
}
コード例 #11
0
ファイル: user.cpp プロジェクト: jbagg/vactrackerd
bool User::unlock(Client *client)
{
	bool success = 0;

	if (lockedBy == client) {
		lockedBy = NULL;
		version++;
		save();
		emit replicate();
		success = 1;
	}

	return success;
}
コード例 #12
0
ファイル: dfuplus.cpp プロジェクト: EwokVillage/HPCC-Platform
int CDfuPlusHelper::doit()
{
    const char* action = globals->queryProp("action");
    if(action == NULL || *action == '\0')
        throw MakeStringException(-1, "action is missing");
    else if(stricmp(action, "spray") == 0)
        return spray();
    else if(stricmp(action, "replicate") == 0)
        return replicate();
    else if(stricmp(action, "despray") == 0)
        return despray();
    else if(stricmp(action, "copy") == 0)
        return copy();
    else if(stricmp(action, "copysuper") == 0)
        return copysuper();
    else if(stricmp(action, "remove") == 0)
        return remove();
    else if(stricmp(action, "rename") == 0)
        return rename();
    else if(stricmp(action, "list") == 0)
        return list();
    else if(stricmp(action, "recover") == 0)
        return recover();
    else if(stricmp(action, "addsuper") == 0)
        return superfile("add");
    else if(stricmp(action, "removesuper") == 0)
        return superfile("remove");
    else if(stricmp(action, "listsuper") == 0)
        return superfile("list");
    else if(stricmp(action, "savexml") == 0)
        return savexml();
    else if(stricmp(action, "add") == 0)
        return add();
    else if(stricmp(action, "status") == 0)
        return status();
    else if(stricmp(action, "abort") == 0)
        return abort();
    else if(stricmp(action, "resubmit") == 0)
        return resubmit();
    else if(stricmp(action, "monitor") == 0)
        return monitor();
#ifdef DAFILESRV_LOCAL
    else if(stricmp(action, "dafilesrv") == 0)
        return rundafs();
#endif
    else
        throw MakeStringException(-1, "Unknown dfuplus action");
    return 0;
}
コード例 #13
0
ファイル: user.cpp プロジェクト: jbagg/vactrackerd
User::User(Server *srv, QString fName)
{
	server = srv;
	fileName = fName;
	lockedBy = NULL;
	boss = NULL;
	oldBoss = NULL;
	region = NULL;
	version = 0;
	annualAllotment = 0;
	updateManagersFlag = 0;

	connect(this, SIGNAL(replicate()), this, SLOT(updateManagerChain()), Qt::QueuedConnection);
	connect(this, SIGNAL(notify(Withdrawal *)), &server->emailNotifier, SLOT(notify(Withdrawal *)), Qt::QueuedConnection);
}
コード例 #14
0
void TouchDebug::mouseDrag(const ci::app::MouseEvent& e) {
	if(mReplicating){
		replicate(e, ds::ui::TouchInfo::Moved);
	} else if(mTwoTouching){

		mEngine.mouseTouchMoved(e, mTouchId);

		int deltaX = e.getPos().x - mTwoTouchDown.x;
		int deltaY = e.getPos().y - mTwoTouchDown.y;
		ci::app::MouseEvent mouseTwo = ci::app::MouseEvent(e.getWindow(), 0, mTwoTouchDown.x - deltaX, mTwoTouchDown.y - deltaY, e.getNativeModifiers(), e.getWheelIncrement(), e.getNativeModifiers());
		mEngine.mouseTouchMoved(mouseTwo, mTouchId + 1);

	} else {
		mEngine.mouseTouchMoved(e, mTouchId);
	}
}
コード例 #15
0
void test_array_replicate()
{
  for(int i = 0; i < g_repeat; i++) {
    CALL_SUBTEST_1( replicate(Matrix<float, 1, 1>()) );
    CALL_SUBTEST_2( replicate(Vector2f()) );
    CALL_SUBTEST_3( replicate(Vector3d()) );
    CALL_SUBTEST_4( replicate(Vector4f()) );
    CALL_SUBTEST_5( replicate(VectorXf(16)) );
    CALL_SUBTEST_6( replicate(VectorXcd(10)) );
  }
}
コード例 #16
0
ファイル: MPReplicate.cpp プロジェクト: fionser/MDLHELib
void replicate(MPEncVector &vec,
               const MPEncArray &ea,
               const long c)
{
    std::vector<std::thread> worker;
    std::atomic<long> counter(0);
    const long parts = vec.partsNum();
    auto job = [&counter, &parts, &vec, &ea, &c]() {
        long i;
        while ((i = counter.fetch_add(1)) < parts) {
            replicate(*ea.get(i), vec.get(i), c);
        }
    };

    for (long wr = 0; wr < WORKER_NR; wr++) worker.push_back(std::thread(job));
    for (auto &&wr : worker) wr.join();
}
コード例 #17
0
ファイル: user.cpp プロジェクト: jbagg/vactrackerd
void User::checkForExpiredRequests(quint32 today)
{
	qint32 i;
	bool update = 0;

	for(i=0; i<withdrawals.size(); i++) {
		if (withdrawals[i]->getState() == WDRL_REQUEST && withdrawals[i]->getStart() <= today) {
			withdrawals[i]->setState(WDRL_REJECTED);
			emit notify(withdrawals[i]);
			update = 1;
		}
	}

	if (update) {
		save();
		emit replicate();
	}
}
コード例 #18
0
ファイル: missproto.c プロジェクト: B-Rich/EBBlib
uintptr_t 
doOp(id_t id) 
{
  uintptr_t rc;
  key_t k = id;
  value_t v;

  v = getValue(k);

 retry:
  if (v->v0.v) {
    // hit
    rc = v->v0.op(v->v1.arg);
  } else {
    // miss
    if (replicate(id, v)) goto retry;
  }
  return rc;
}
コード例 #19
0
void rice::p2p::replication::ReplicationImpl::deliver(::rice::p2p::commonapi::Id* id, ::rice::p2p::commonapi::Message* message)
{
    if(npc(logger)->level <= ::rice::environment::logging::Logger::FINE)
        npc(logger)->log(::java::lang::StringBuilder().append(u"COUNT: Replication "_j)->append(instance)
            ->append(u" received message "_j)
            ->append(static_cast< ::java::lang::Object* >(message))->toString());

    if(dynamic_cast< ::rice::p2p::replication::messaging::RequestMessage* >(message) != nullptr) {
        auto const rm = java_cast< ::rice::p2p::replication::messaging::RequestMessage* >(message);
        auto continuation = new ::rice::Continuation_MultiContinuation(new ReplicationImpl_deliver_3(this, rm, u"Processing of RequestMessage"_j, environment), npc(npc(rm)->getRanges())->length);
        for (auto i = int32_t(0); i < npc(npc(rm)->getRanges())->length; i++) {
            auto const j = i;
            npc(endpoint)->process(new ReplicationImpl_deliver_4(this, j, rm), npc(continuation)->getSubContinuation(i));
        }
    } else if(dynamic_cast< ::rice::p2p::replication::messaging::ResponseMessage* >(message) != nullptr) {
        auto rm = java_cast< ::rice::p2p::replication::messaging::ResponseMessage* >(message);
        for (auto i = int32_t(0); i < npc(npc(rm)->getIdSets())->length; i++) {
            auto temp = npc(factory)->buildIdSet();
            auto tempA = (*npc(rm)->getIdSets())[i];
            for (auto j = int32_t(0); j < npc(tempA)->length; j++) {
                npc(temp)->addId((*tempA)[j]);
            }
            auto fetch = npc(policy)->difference(npc(client)->scan((*npc(rm)->getRanges())[i]), temp, factory);
            if(npc(logger)->level <= ::rice::environment::logging::Logger::FINE)
                npc(logger)->log(::java::lang::StringBuilder().append(u"COUNT: Was told to fetch "_j)->append(npc(fetch)->numElements())
                    ->append(u" in instance "_j)
                    ->append(instance)->toString());

            if(npc(fetch)->numElements() > 0)
                npc(client)->fetch(fetch, npc(rm)->getSource());

        }
    } else if(dynamic_cast< ::rice::p2p::replication::messaging::ReminderMessage* >(message) != nullptr) {
        replicate();
        updateClient();
    } else {
        if(npc(logger)->level <= ::rice::environment::logging::Logger::WARNING)
            npc(logger)->log(::java::lang::StringBuilder().append(u"Received unknown message "_j)->append(static_cast< ::java::lang::Object* >(message))
                ->append(u" - dropping on floor."_j)->toString());

    }
}
コード例 #20
0
	void Door::think() {
		const float2 dir = actualDir();
		
		if(m_update_anim) {
			replicate();
			playSequence(m_proto.seq_ids[m_state]);
			m_update_anim = false;
		}
		if(classId() == DoorClassId::sliding && m_state == DoorState::opened_in && currentTime() > m_close_time) {
			FBox bbox = computeBBox(DoorState::closed);
			if((bool)findAny(bbox + pos(), {Flags::entity | Flags::colliding, ref()})) {
				m_close_time = currentTime() + 1.5;
			}
			else {
				m_bbox = bbox;
				m_state = DoorState::closing_in;
				m_update_anim = true;
			}
		}
	}
コード例 #21
0
ファイル: container.cpp プロジェクト: nadult/FreeFT
	void Container::think() {
		if(m_proto.is_always_opened)
			return;

		if(m_target_state != m_state) {
			if(m_state == ContainerState::closed && m_target_state == ContainerState::opened) {
				m_state = ContainerState::opening;
				m_update_anim = true;
			}
			if(m_state == ContainerState::opened && m_target_state == ContainerState::closed) {
				m_state = ContainerState::closing;
				m_update_anim = true;
			}
		}
		if(m_update_anim) {
			replicate();
			playSequence(m_proto.seq_ids[m_state]);
			m_update_anim = false;
		}
	}
コード例 #22
0
//*************************************************************************************************
//! Alternate way of specifying number of threads to support. This is the same as the number of 
//! clones that will be available after replicating the original chain.
//*************************************************************************************************
void ossimImageChainMtAdaptor::setNumberOfThreads(ossim_uint32 num_threads)
{
   if (m_numThreads == num_threads)
      return;

   // Determine number of cores/threads to set up:
   if (num_threads > 0)
   {
      m_numThreads = num_threads;
   }
   else
   {
      // Look in ossim preferences if arg is provided above.
      ossimString value = ossimPreferences::instance()->findPreference("ossim_threads");
      if ( !value.empty() )
         m_numThreads = value.toUInt32();
   }

   // If there is a valid original chain, we can perform the replication:
   if (!m_chainContainers.empty())
      replicate();
}
コード例 #23
0
	void Handle (DHT& dht, const Host&, const Packet& pckt)
	{
		Key k = pckt.GetArg<Key>(DHT_UNPUBLISH_KEY);
		pf_log[W_DHT] << "Got Unpublish message for key " << k;

		Data *data = pckt.GetArg<Data*>(DHT_UNPUBLISH_DATA);
		pf_log[W_DHT] << "Data: " << data->GetStr();

		try {
			dht.GetStorage()->removeInfo(k, data);
		}
		catch(Storage::WrongDataType e) {
			pf_log[W_DHT] << "Asked to remove wrong data type, abord.";
			return;
		}

		/* Repeat unpublish on redondancy hosts */
		Packet replicate(DHTRepeatUType, dht.GetMe());
		replicate.SetArg(DHT_REPEAT_U_KEY, k);
		replicate.SetArg(DHT_REPEAT_U_DATA, data);
		dht.GetChimera()->SendToNeighbours(dht.REDONDANCY, replicate);
	}
コード例 #24
0
//*************************************************************************************************
//! Alternate way of specifying the original chain being adapted for multi-threading.
//*************************************************************************************************
void ossimImageChainMtAdaptor::setOriginalChain(ossimImageChain* original)
{
   if (original == NULL)
      return;

   ossimImageSource* first_source = original->getFirstSource();
   if (first_source == NULL)
      return;

   // Assign the adaptee and put it in the first position of the clones list:
   m_adaptedChain = original;
   m_clones.clear();
   m_clones.push_back(first_source);

   m_chainContainers.clear();
   m_chainContainers.push_back(new ossimConnectableContainer);
   m_adaptedChain->fillContainer(*m_chainContainers[0].get());

   // If we know the number of threads, we can begin replicating:
   if (m_numThreads > 1)
      replicate();
}
コード例 #25
0
ファイル: generate.hpp プロジェクト: Dobiasd/FunctionalPlus
 std::vector<std::vector<T>> helper_carthesian_product_n_idxs
         (std::size_t power, const std::vector<T>& xs)
 {
     static_assert(std::is_same<T, std::size_t>::value,
         "T must be std::size_t");
     typedef std::vector<T> Vec;
     typedef std::vector<Vec> VecVec;
     if (power == 0)
         return VecVec();
     auto go = [](const Vec& elems, const VecVec& acc)
     {
         VecVec result;
         for (const T& x : elems)
         {
             for (const Vec& tail : acc)
             {
                 result.push_back(append(Vec(1, x), tail));
             }
         }
         return result;
     };
     return fold_right(go, VecVec(1), replicate(power, xs));
 }
コード例 #26
0
ファイル: plotter.C プロジェクト: fooeybartoni/CSI702
static void trace(const char *prefix, void *call_data)
{
    DataLength* dl = (DataLength *) call_data;
    string s(dl->data, dl->length);

    bool s_ends_with_nl = false;
    if (s.length() > 0 && s[s.length() - 1] == '\n')
    {
	s_ends_with_nl = true;
	s = s.before(int(s.length() - 1));
    }

    s = quote(s);
    string nl = "\\n\"\n";
    nl += replicate(' ', strlen(prefix));
    nl += "\"";
    s.gsub("\\n", nl);

    if (s_ends_with_nl)
	s.at((int)(s.length() - 1), 0) = "\\n";

    dddlog << prefix << s << '\n';
    dddlog.flush();
}
コード例 #27
0
ファイル: COptMethodEP.cpp プロジェクト: PriKalra/COPASI
bool COptMethodEP::optimise()
{
  if (!initialize())
    {
      if (mpCallBack)
        mpCallBack->finishItem(mhGenerations);

      return false;
    }

  bool Continue = true;

  // Initialize the population
  Continue = creation();

  // get the index of the fittest
  mBestIndex = fittest();

  if (mBestIndex != C_INVALID_INDEX)
    {
      // and store that value
      mBestValue = mValue[mBestIndex];
      Continue = mpOptProblem->setSolution(mBestValue, *mIndividual[mBestIndex]);

      // We found a new best value lets report it.
      mpParentTask->output(COutputInterface::DURING);
    }

  if (!Continue)
    {
      if (mpCallBack)
        mpCallBack->finishItem(mhGenerations);

      cleanup();
      return true;
    }

  // iterate over Generations
  for (mGeneration = 2; mGeneration <= mGenerations && Continue; mGeneration++)
    {
      // replicate the individuals
      Continue = replicate();

      // select the most fit
      Continue = select();

      // get the index of the fittest
      mBestIndex = fittest();

      if (mBestIndex != C_INVALID_INDEX &&
          mValue[mBestIndex] < mBestValue)
        {
          mBestValue = mValue[mBestIndex];

          Continue = mpOptProblem->setSolution(mBestValue, *mIndividual[mBestIndex]);

          // We found a new best value lets report it.
          //if (mpReport) mpReport->printBody();
          mpParentTask->output(COutputInterface::DURING);
        }

      if (mpCallBack)
        Continue = mpCallBack->progressItem(mhGenerations);
    }

  if (mpCallBack)
    mpCallBack->finishItem(mhGenerations);

  cleanup();

  return true;
}
コード例 #28
0
ファイル: bgjobs.c プロジェクト: davies/moosefs
void* job_worker(void *arg) {
	worker *w = (worker*)arg;
	jobpool *jp = w->jp;
	job *jptr;
	uint8_t *jptrarg;
	uint8_t status,jstate;
	uint32_t jobid;
	uint32_t op;

//	syslog(LOG_NOTICE,"worker %p started (jobqueue: %p ; jptr:%p ; jptrarg:%p ; status:%p )",(void*)pthread_self(),jp->jobqueue,(void*)&jptr,(void*)&jptrarg,(void*)&status);
	for (;;) {
		queue_get(jp->jobqueue,&jobid,&op,&jptrarg,NULL);
//		syslog(LOG_NOTICE,"job worker got job: %"PRIu32",%"PRIu32,jobid,op);
		jptr = (job*)jptrarg;
		zassert(pthread_mutex_lock(&(jp->jobslock)));
		if (jobid==0 && op==0 && jptrarg==NULL) { // queue has been closed
			job_close_worker(w);
			zassert(pthread_mutex_unlock(&(jp->jobslock)));
			return NULL;
		}
		jp->workers_avail--;
		if (jp->workers_avail==0 && jp->workers_total<jp->workers_max) {
			job_spawn_worker(jp);
		}
		if (jptr!=NULL) {
			jstate=jptr->jstate;
			if (jptr->jstate==JSTATE_ENABLED) {
				jptr->jstate=JSTATE_INPROGRESS;
			}
		} else {
			jstate=JSTATE_DISABLED;
		}
		zassert(pthread_mutex_unlock(&(jp->jobslock)));
		switch (op) {
			case OP_INVAL:
				status = ERROR_EINVAL;
				break;
/*
			case OP_MAINSERV:
				if (jstate==JSTATE_DISABLED) {
					status = ERROR_NOTDONE;
				} else {
					mainserv_serve(*((int*)(jptr->args)));
					status = STATUS_OK;
				}
				break;
*/
			case OP_CHUNKOP:
				if (jstate==JSTATE_DISABLED) {
					status = ERROR_NOTDONE;
				} else {
					status = hdd_chunkop(opargs->chunkid,opargs->version,opargs->newversion,opargs->copychunkid,opargs->copyversion,opargs->length);
				}
				break;
/*
			case OP_OPEN:
				if (jstate==JSTATE_DISABLED) {
					status = ERROR_NOTDONE;
				} else {
					status = hdd_open(ocargs->chunkid,ocargs->version);
				}
				break;
			case OP_CLOSE:
				if (jstate==JSTATE_DISABLED) {
					status = ERROR_NOTDONE;
				} else {
					status = hdd_close(ocargs->chunkid);
				}
				break;
			case OP_READ:
				if (jstate==JSTATE_DISABLED) {
					status = ERROR_NOTDONE;
				} else {
					status = hdd_read(rdargs->chunkid,rdargs->version,rdargs->blocknum,rdargs->buffer,rdargs->offset,rdargs->size,rdargs->crcbuff);
				}
				break;
			case OP_WRITE:
				if (jstate==JSTATE_DISABLED) {
					status = ERROR_NOTDONE;
				} else {
					status = hdd_write(wrargs->chunkid,wrargs->version,wrargs->blocknum,wrargs->buffer,wrargs->offset,wrargs->size,wrargs->crcbuff);
				}
				break;
*/
			case OP_SERV_READ:
				if (jstate==JSTATE_DISABLED) {
					status = ERROR_NOTDONE;
				} else {
					status = mainserv_read(rwargs->sock,rwargs->packet,rwargs->length);
				}
				break;
			case OP_SERV_WRITE:
				if (jstate==JSTATE_DISABLED) {
					status = ERROR_NOTDONE;
				} else {
					status = mainserv_write(rwargs->sock,rwargs->packet,rwargs->length);
				}
				break;
			case OP_REPLICATE:
				if (jstate==JSTATE_DISABLED) {
					status = ERROR_NOTDONE;
				} else {
					status = replicate(rpargs->chunkid,rpargs->version,rpargs->xormasks,rpargs->srccnt,((uint8_t*)(jptr->args))+sizeof(chunk_rp_args));
				}
				break;
			case OP_GETBLOCKS:
				if (jstate==JSTATE_DISABLED) {
					status = ERROR_NOTDONE;
				} else {
					status = hdd_get_blocks(ijargs->chunkid,ijargs->version,ijargs->pointer);
				}
				break;
			case OP_GETCHECKSUM:
				if (jstate==JSTATE_DISABLED) {
					status = ERROR_NOTDONE;
				} else {
					status = hdd_get_checksum(ijargs->chunkid,ijargs->version,ijargs->pointer);
				}
				break;
			case OP_GETCHECKSUMTAB:
				if (jstate==JSTATE_DISABLED) {
					status = ERROR_NOTDONE;
				} else {
					status = hdd_get_checksum_tab(ijargs->chunkid,ijargs->version,ijargs->pointer);
				}
				break;
			default: // OP_EXIT
//				syslog(LOG_NOTICE,"worker %p exiting (jobqueue: %p)",(void*)pthread_self(),jp->jobqueue);
				zassert(pthread_mutex_lock(&(jp->jobslock)));
				job_close_worker(w);
				zassert(pthread_mutex_unlock(&(jp->jobslock)));
				return NULL;
		}
		job_send_status(jp,jobid,status);
		zassert(pthread_mutex_lock(&(jp->jobslock)));
		jp->workers_avail++;
		if (jp->workers_avail > jp->workers_max_idle) {
			job_close_worker(w);
			zassert(pthread_mutex_unlock(&(jp->jobslock)));
			return NULL;
		}
		zassert(pthread_mutex_unlock(&(jp->jobslock)));
	}
}
コード例 #29
0
ファイル: x86_sor.c プロジェクト: valner/svt
INT main(INT argc, CHAR *argv[]) {
/********** MAIN PROGRAM *********************************
 * Solve Laplace equation using Jacobi iteration method  *
        *
 *********************************************************/
      INT m = M_DEFAULT, mp, k, p, below, above;
      long iter=MAXSTEPS;
      REAL TOL=EPS_DEFAULT, del, gdel,start,finish,mytime;
      CHAR line[80];
      REAL **v, **vt, **vnew;

      
      k = 0; 
      p= 1;
      if(k == 0) {
          fprintf(OUTPUT," Number of args in command line, argc :\n");
          
          fprintf(OUTPUT," argc = %d :\n", argc);
          if (argc >= 2) 
              fprintf(OUTPUT," arg[1]= %s :\n", argv[1]);
          if (argc >= 3) 
              fprintf(OUTPUT," arg[2]= %s :\n", argv[2]);
          
          if (argc >1){
              m=atoi(argv[1]);
              m=MAX_M;
          }  
          
          if (argc >2 ) {
              TOL= atof(argv[2]);
              TOL=EPS;
          }
          
          fprintf(OUTPUT,"Size of interior points, m :\n");
          fprintf(OUTPUT,"m = %d\n",m);
          fprintf(OUTPUT,"Numerical accuracy, eps :\n");
          fprintf(OUTPUT,"eps = %f\n",TOL);

          fprintf(OUTPUT,"Number of processes, p :\n");
          fprintf(OUTPUT,"p = %d\n",p);
          
          start=-time(0);
      }
      
      mp = m/p;
      
      v  = allocate_2D(m, mp);  /* allocate mem for 2D array */
      vt = allocate_2D(mp, m);
      vnew = allocate_2D(mp, m);

      gdel = 1.0;
      iter = 0;

      bc(m, mp, v, k, p); /* initialize and define B.C. for v */
      transpose(m, mp, v, vt);  /* solve for vt */
                                /* driven by need of update_bc_2 */

      replicate(mp, m, vt, vnew);            /* vnew = vt */
      
      REAL ro = 1.0 - pow (PI / (2 * (m + 1)), 2);
      REAL w = 0;
      while (gdel > TOL) {  /* iterate until error below threshold */
        iter++;             /* increment iteration counter */

        if(iter > MAXSTEPS) {
          fprintf(OUTPUT,"Iteration terminated (exceeds %6d", MAXSTEPS);
          fprintf(OUTPUT," )\n");
          return (0);       /* nonconvergent solution */
        }
/* compute new solution according to the Jacobi scheme */
        /*update_jacobi(mp, m, vt, vnew, &del);  [> compute new vt <]*/
        update_sor(mp, m, vt, vnew, &del, w);
        update_w(&w, ro);
            if (del > gdel)
                gdel = del;
          if( k == 0) {
            fprintf(OUTPUT,"iter,del,gdel: %6d, %lf %lf\n",iter,del,gdel);
        }
        update_bc_2( mp, m, vt, k, below, above); /* update b.c. */
      }
      if (k == 0) {
	  finish=time(0);
        mytime=start+finish;
        fprintf(OUTPUT,"Stopped at iteration %d\n",iter);
        fprintf(OUTPUT,"The maximum error = %f\n",gdel);
        fprintf(OUTPUT,"Time = %f\n",mytime);

      }
      if (FILE_OUT) {
	  /* write v to file for use in MATLAB plots */
	  transpose(mp, m, vt, v);
	  write_file( m, mp, v, k, p );
	  
      }

      free(v); free(vt); free(vnew); /* release allocated arrays  */
      
      return (0);
}
コード例 #30
0
ファイル: controller.c プロジェクト: AshKash/kit-sink
/*
 * Returns the name of the server that will process the
 * request for the client.
 * The function will modify the file_list and server_list
 */
int select_backend(const char *fname)
{
  int s_idx = -1;
  int f_idx = -1;
  int max_pair = 0;     // stores max of free+request for this file
  int max_free = 0;     // The server's index that is most free
  int i, j;


  /* Traverse all servers and change server_list[].free 
   * Also find the highest free + request pair */
  pthread_mutex_lock(&s_lock);      // lock
  max_free = 0;
  for (i = 0; i < total_servers; i++) {    
    // Increment *freeness* of all other servers (max is MAX_FREE)
    server_list[i].free = 
      (server_list[i].free < MAX_FREE)?server_list[i].free++:MAX_FREE;

    // Find server that is most free
    if (server_list[i].free > server_list[max_free].free)
      max_free = i;
  }
  pthread_mutex_unlock(&s_lock);    // unlock

  /* Locate file in the file table */
  pthread_mutex_lock(&f_lock);      // lock
  for (i = 0; i < MAX_FILES; i++) {
    if (strcmp(file_list[i].name, fname) == 0) {
      f_idx = i;
      // Update the request field
      file_list[f_idx].request++;
      break;
    }
  }

  // Traverse all servers having this file
  for (j = 0; j < file_list[f_idx].tot_idx; j++) {
    int tmp = 0;
    
    // Calc max of free+request
    if ((tmp = server_list[j].free +
	 file_list[f_idx].request) > max_pair) {
      max_pair = tmp;
      s_idx = j;         // server to connect to
    }
  }

  // See if this file needs to be replicated
  if (file_list[f_idx].request >= REPL_THRESH) {

    printf("***REPLICATE*****\n");
    printf("File: %s, server from: %s, server to: %s\n",
	   file_list[f_idx].name, server_list[s_idx].name,
	   server_list[max_free].name);
    if (replicate(f_idx, s_idx, max_free) < 0) {
      // Ignore and continue
    } else {
      s_idx = max_free;
    }
  }

  // Decrement the *freeness* of chosen server */
  server_list[s_idx].free = (server_list[s_idx].free < 2)?0:
                              (server_list[s_idx].free - 2);

  pthread_mutex_unlock(&f_lock);    // unlock    

  printf("***SELECT_BACKEND***\n");
  printf("\tRequested file: %s\n", fname);
  printf("\tChosen server: %s, server_free: %d\n\tfile_req: %d\n",
	 server_list[s_idx].name, server_list[s_idx].free,
	 file_list[f_idx].request);

  return(s_idx);

}