Example #1
0
 bool *flattenBVecList(int t, int vecDim, BoolVecList* pboolVecList)
 {
     int szvec = 0;
     bool *array = NULL;
     // walk through the vector list and check few things then send the packed version
     bool *p = NULL;
     for(int i=0; i<(int)pboolVecList->size(); i++)
     {
         if(szvec == 0) {
             szvec = (int)((*pboolVecList)[i]->size());
             p = array = new bool[szvec * pboolVecList->size()]; // we assume all vectors are the same size
         }
         else if(szvec != (*pboolVecList)[i]->size()) {
             yyerror("Vector list has inconsistent vectors\n");
             continue;
         }
         BoolList* pfl = (*pboolVecList)[i];
         for(int j=0; j<(int)pfl->size(); j++)
             *p++ = (*pfl)[j];
         delete pfl;
     }
     if(vecDim < 0)
         vecDim = (int)pboolVecList->size();
     // we do the test here in any case : the previous loop needed to do some "delete" anyways
     if((szvec != vecDim) || (t != pboolVecList->size()))
     {
         yyerror("Vector dimension in value assignment don't match the type\n");
         delete array;
         return NULL;
     }
     return array;
 }
Example #2
0
BoolList ParsedEntity::getBoolList()
{
	auto pList = getList();
	auto list = *pList;
	BoolList retList = MakeBoolList();
	for (ParsedEntityPtr pe : list)
	{
		if (pe->getType() == ParsedEntity::Bool)
		{
			retList->push_back(pe->getBool());
		}
	}
	return retList;
}
Example #3
0
TEST(ConceptSink, OneHundredSinks) {
   using namespace g3;
   BoolList flags;
   IntVector counts;

   size_t NumberOfItems = 100;
   for (size_t index = 0; index < NumberOfItems; ++index) {
      flags.push_back(make_shared < atomic<bool >> (false));
      counts.push_back(make_shared < atomic<int >> (0));
   }

   {
      RestoreFileLogger logger{"./"};
      g3::LogWorker* worker = logger._scope->get(); //g3LogWorker::createLogWorker();
      size_t index = 0;
      for (auto& flag : flags) {
         auto& count = counts[index++];
         // ignore the handle
         worker->addSink(std2::make_unique<ScopedSetTrue>(flag, count), &ScopedSetTrue::ReceiveMsg);
      }
      LOG(DEBUG) << "start message";
      LogMessagePtr message1{std2::make_unique<LogMessage>("test", 0, "test", DEBUG)};
      LogMessagePtr message2{std2::make_unique<LogMessage>("test", 0, "test", DEBUG)};
      auto& write1 = message1.get()->write();
      write1.append("Hello to 100 receivers :)");
      worker->save(message1);
      
      auto& write2 = message2.get()->write();
      write2.append("Hello to 100 receivers :)");
      worker->save(message2);
      LOG(INFO) << "end message";
      logger.reset();
   }
   // at the curly brace above the ScopedLogger will go out of scope and all the 
   // 100 logging receivers will get their message to exit after all messages are
   // are processed
   size_t index = 0;
   for (auto& flag : flags) {
      auto& count = counts[index++];
      ASSERT_TRUE(flag->load()) << ", count : " << (index - 1);
      ASSERT_TRUE(4 == count->load()) << ", count : " << (index - 1);
   }

   cout << "test one hundred sinks is finished finished\n";
}