// For each re-used semantic (e.g. TEXCOORD0) record the symbol for which it is output.
// This is so that you can specify the same semantic in multiple structures without
// having multiply defined attribute or varying symbols in the output. The one that is
// output is the one found with the largest dimension.
void HlslLinker::markDuplicatedInSemantics(GlslFunction* func)
{
	int pCount = func->getParameterCount();
	for (int ase = EAttrSemNone; ase < EAttrSemCount; ++ase)
	{
		std::vector<GlslSymbolOrStructMemberBase*> symsUsingSem;
		for (int ii=0; ii<pCount; ii++)
		{
			GlslSymbol *sym = func->getParameter(ii);
			appendDuplicatedInSemantics(sym, static_cast<EAttribSemantic>(ase), symsUsingSem);
		}
		if (symsUsingSem.size() > 1)
		{
			int index_of_largest = -1;
			int largest_array_size = 0;
			GlslSymbolOrStructMemberBase* sym_of_largest = 0;
			for (unsigned int ii=0; ii < symsUsingSem.size(); ii++)
			{
				if (!ii || largest_array_size < getElements(symsUsingSem[ii]->type))
				{
					index_of_largest = ii;
					sym_of_largest = symsUsingSem[ii];
					largest_array_size = getElements(symsUsingSem[ii]->type);
				}
			}
			for (unsigned int ii=0; ii < symsUsingSem.size(); ii++)
			{
				if (ii != index_of_largest)
				{
					symsUsingSem[ii]->suppressOutput(sym_of_largest);
				}
			}
		}
	}
}
bool
CoinPackedVectorBase::operator==(const CoinPackedVectorBase& rhs) const
{  if (getNumElements() == 0 || rhs.getNumElements() == 0) {
     if (getNumElements() == 0 && rhs.getNumElements() == 0)
       return (true) ;
     else
       return (false) ;
   } else {
     return (getNumElements()==rhs.getNumElements() &&
	     std::equal(getIndices(),getIndices()+getNumElements(),
		        rhs.getIndices()) &&
	     std::equal(getElements(),getElements()+getNumElements(),
		        rhs.getElements())) ;
   }
}
Beispiel #3
0
int main (int    argc,
	  char** argv)
// ---------------------------------------------------------------------------
// Driver for other routines.
// ---------------------------------------------------------------------------
{
  Action         mirror = UNDEFINED;
  Point          axis;
  real_t         angle = 0.;
  int_t          nvert, nel;	// -- Numbers read from input.
  int_t          nrep = 1;	// -- Number of times to repeat operation.
  vector<Node*>  vertices;
  vector<Node*>* elements;
  FEML*          F;

  Femlib::initialize (&argc, &argv);

  getArgs (argc, argv, mirror, axis, angle, nrep, F);

  nvert = getVertices (F, vertices, mirror, axis, angle, nrep);
  nel   = getElements (F, vertices, elements, nvert, nrep);

  printUp  (cout, const_cast<const vector<Node*>&>(vertices),
	    const_cast<const vector<Node*>*&>(elements),
	    nvert, nel, nrep, mirror);

  Femlib::finalize();
  
  return EXIT_SUCCESS;
}
Beispiel #4
0
	void Object::_renderInternal()
	{
		Scene* scene = getScene();
		getScene()->getShaderParamSet()->setCurObject( this );

		RenderSystem* renderSystem = getScene()->_getRenderSystem();

		{
			CF_PROFILE( "SetupObjectRenderState" );
			if ( mUsageRenderOption )
				scene->_setupRenderOption( mRenderOption , mUsageRenderOption );

			renderSystem->setFillMode( mRenderMode );
		}

		for( MeshIterator iter = getElements(); iter.haveMore() ; iter.next() )
		{
			Element* ele = iter.get();

			unsigned restOptionBit = 0;
			float opacity = _evalOpacity( ele->getMaterial() );
			scene->_renderMesh( ele->getMesh() , ele->getMaterial() , mRenderMode , opacity , restOptionBit );

			if ( restOptionBit )
				scene->_setupRenderOption( mRenderOption , restOptionBit );
		}

		if ( mUsageRenderOption )
			scene->_setupDefultRenderOption( mUsageRenderOption );
	}
Beispiel #5
0
void
BCP_lp_relax::pack(BCP_buffer& buf) const {
   const int major = getMajorDim();
   const int minor = getMinorDim();
   buf.pack(colOrdered_)
      .pack(extraGap_)
      .pack(extraMajor_)
      .pack(major)
      .pack(minor)
      .pack(size_)
      .pack(maxMajorDim_)
      .pack(maxSize_);

   const int * length = getVectorLengths();
   const int * start = getVectorStarts();
   const int * ind = getIndices();
   const double * elem = getElements();
   if (major > 0) {
     buf.pack(length, major);
     buf.pack(start, major+1);
     for (int i = 0; i < major; ++i)
       buf.pack(ind + start[i], length[i]);
     for (int i = 0; i < major; ++i)
       buf.pack(elem + start[i], length[i]);
   }

   buf.pack(_Objective).pack(_ColLowerBound).pack(_ColUpperBound)
      .pack(_RowLowerBound).pack(_RowUpperBound);
}
Beispiel #6
0
	void Object::addVertexNormal()
	{
		MeshIterator iter = getElements();
		for(  ; iter.haveMore() ; iter.next() )
		{
			iter.get()->getMesh()->addNormal();
		}
	}
Beispiel #7
0
	void Object::updateAnimation( float dt )
	{
		for( MeshIterator iter = getElements();
			 iter.haveMore(); iter.next() )
		{
			iter.get()->getMaterial()->updateAnimation( dt );
		}
	}
int main() {
	int n = getArraySize();
	int a[n];
	getElements(a, n);
	bubbleSort(a, n);
	displayArray(a, n);

	return 0;
}
Beispiel #9
0
	void Object::_cloneShareData()
	{
		MeshIterator iter = getElements();
		for(  ; iter.haveMore() ; iter.next() )
		{
			Element* ele = iter.get();
			ele->getUnit().mesh = ele->getUnit().mesh->clone();
		}
	}
double
CoinPackedVectorBase::infNorm() const
{
   register double norm = 0.0;
   register const double* elements = getElements();
   for (int i = getNumElements() - 1; i >= 0; --i) {
      norm = CoinMax(norm, fabs(elements[i]));
   }
   return norm;
}
double
CoinPackedVectorBase::dotProduct(const double* dense) const
{
   const double * elems = getElements();
   const int * inds = getIndices();
   double dp = 0.0;
   for (int i = getNumElements() - 1; i >= 0; --i)
      dp += elems[i] * dense[inds[i]];
   return dp;
}
double
  CoinPackedVectorBase::operator[](int i) const
{
  if (!testedDuplicateIndex_)
    duplicateIndex("operator[]", "CoinPackedVectorBase");

  // Get a reference to a map of full storage indices to
  // packed storage location.
  const std::set< int > &sv = *indexSet("operator[]", "CoinPackedVectorBase");
#if 1
  if (sv.find(i) == sv.end())
    return 0.0;
  return getElements()[findIndex(i)];
#else
  // LL: suggested change, somthing is wrong with this
  const size_t ind = std::distance(sv.begin(), sv.find(i));
  return (ind == sv.size()) ? 0.0 : getElements()[ind];
#endif
}
double
CoinPackedVectorBase::oneNorm() const
{
  double norm = 0.0;
  const double *elements = getElements();
  for (int i = getNumElements() - 1; i >= 0; --i) {
    norm += fabs(elements[i]);
  }
  return norm;
}
Beispiel #14
0
void QLearning::learn(std::vector<unsigned int> &state_now, std::vector<unsigned int> &state_future, int &action_id, float &reward) {
    // Get current qualities and experience
    getElements(state_now);
    float quality_now = q_vals_[action_id - 1];
    unsigned int exp_now = exp_vals_[action_id - 1];

    // Get future quality
    getElements(state_future);
    std::vector<float>::iterator quality_future = std::max_element(q_vals_.begin(), q_vals_.end());

    // Exponentially decrease learning rate with experience [Unknown]
    float alpha = this->alpha_max_/(float) exp(pow(exp_now, this->alpha_power_)/ this->alpha_denom_);

    // Standard Q-learning update rule [Boutilier, 1999]
    float quality_update = quality_now + alpha*(reward + (gamma_* *quality_future) - quality_now);

    // Update tables
    storeElements(state_now, quality_update, action_id);

}// end learn
int CoinPackedVectorBase::compare(const CoinPackedVectorBase &rhs) const
{
  const int size = getNumElements();
  int itmp = size - rhs.getNumElements();
  if (itmp != 0) {
    return itmp;
  }
  itmp = memcmp(getIndices(), rhs.getIndices(), size * sizeof(int));
  if (itmp != 0) {
    return itmp;
  }
  return memcmp(getElements(), rhs.getElements(), size * sizeof(double));
}
Beispiel #16
0
	void Object::xform( bool beAllInstance )
	{
		Matrix4 const& trans = getLocalTransform();

		MeshIterator iter = getElements();
		for ( ; iter.haveMore() ; iter.next() )
		{
			MeshBase* mesh = iter.get()->getMesh();
			iter.get()->getUnit().mesh = mesh->xform( trans , beAllInstance );
		}

		mLocalTrans.setIdentity();
	}
Beispiel #17
0
	void Object::updateBoundSphere()
	{
		mBoundSphere.center.setValue(0,0,0);
		mBoundSphere.radius = 0;
		MeshIterator iter = getElements();
		for(  ; iter.haveMore() ; iter.next() )
		{
			MeshBase* mesh = iter.get()->getMesh();
			BoundSphere sphere;
			mesh->calcBoundSphere( sphere );
			mBoundSphere.merge( sphere );
		}
	}
Beispiel #18
0
TEST(MeshLib, ElementStatus)
{
    const unsigned width (100);
    const unsigned elements_per_side (20);
    auto const mesh = std::unique_ptr<MeshLib::Mesh>{
        MeshLib::MeshGenerator::generateRegularQuadMesh(width, elements_per_side)};

    auto* const material_id_properties =
        mesh->getProperties().createNewPropertyVector<int>(
            "MaterialIDs", MeshLib::MeshItemType::Cell);
    ASSERT_NE(nullptr, material_id_properties);
    material_id_properties->resize(mesh->getNumberOfElements());

    const std::vector<MeshLib::Element*> elements (mesh->getElements());

    for (unsigned i=0; i<elements_per_side; ++i)
    {
        for (unsigned j=0; j<elements_per_side; ++j)
            (*material_id_properties)[elements[i*elements_per_side + j]->getID()] = i;
    }

    {
        // all elements and nodes active
        MeshLib::ElementStatus status(mesh.get());
        ASSERT_EQ (elements.size(), status.getNumberOfActiveElements());
        ASSERT_EQ (mesh->getNumberOfNodes(), status.getNumberOfActiveNodes());
    }

    {
        // set material 1 to false
        std::vector<int> inactiveMat{1};
        MeshLib::ElementStatus status(mesh.get(), inactiveMat);
        ASSERT_EQ (elements.size()-elements_per_side, status.getNumberOfActiveElements());
    }

    {
        // set material 0 and 1 to false
        std::vector<int> inactiveMat{0, 1};
        MeshLib::ElementStatus status(mesh.get(), inactiveMat);
        ASSERT_EQ (elements.size()-(2*elements_per_side), status.getNumberOfActiveElements());

        // active elements
        auto &active_elements (status.getActiveElements());
        ASSERT_EQ (active_elements.size(), status.getNumberOfActiveElements());

        // active nodes
        auto& active_nodes (status.getActiveNodes());
        ASSERT_EQ (active_nodes.size(), status.getNumberOfActiveNodes());
    }
}
double *
CoinPackedVectorBase::denseVector(int denseSize) const
{
   if (getMaxIndex() >= denseSize)
      throw CoinError("Dense vector size is less than max index",
		     "denseVector", "CoinPackedVectorBase");

   double * dv = new double[denseSize];
   CoinFillN(dv, denseSize, 0.0);
   const int s = getNumElements();
   const int * inds = getIndices();
   const double * elems = getElements();
   for (int i = 0; i < s; ++i)
      dv[inds[i]] = elems[i];
   return dv;
}
Beispiel #20
0
void writeConstantConstructor( std::stringstream& out, EGlslSymbolType t, TPrecision prec, TIntermConstant *c, GlslStruct *structure = 0 )
{
	unsigned n_elems = getElements(t);
	bool construct = n_elems > 1 || structure != 0;

	if (construct) {
		writeType (out, t, structure, EbpUndefined);
		out << "(";
	}
	
	if (structure) {
		// compound type
		unsigned n_members = structure->memberCount();
		for (unsigned i = 0; i != n_members; ++i) {
			const GlslStruct::member &m = structure->getMember(i);
			if (construct && i > 0)
				out << ", ";
			writeConstantConstructor (out, m.type, m.precision, c);
		}
	} else {
		// simple type
		unsigned n_constants = c->getCount();
		for (unsigned i = 0; i != n_elems; ++i) {
			unsigned v = Min(i, n_constants - 1);
			if (construct && i > 0)
				out << ", ";
			
			switch (c->getBasicType()) {
				case EbtBool:
					out << (c->toBool(v) ? "true" : "false");
					break;
				case EbtInt:
					out << c->toInt(v);
					break;
				case EbtFloat:
					GlslSymbol::writeFloat(out, c->toFloat(v));
					break;
				default:
					assert(0);
			}
		}
	}

	if (construct)
		out << ")";
}
Beispiel #21
0
ColumnPtr FunctionArrayIntersect::castRemoveNullable(const ColumnPtr & column, const DataTypePtr & data_type) const
{
    if (auto column_nullable = checkAndGetColumn<ColumnNullable>(column.get()))
    {
        auto nullable_type = checkAndGetDataType<DataTypeNullable>(data_type.get());
        const auto & nested = column_nullable->getNestedColumnPtr();
        if (nullable_type)
        {
            auto casted_column = castRemoveNullable(nested, nullable_type->getNestedType());
            return ColumnNullable::create(casted_column, column_nullable->getNullMapColumnPtr());
        }
        return castRemoveNullable(nested, data_type);
    }
    else if (auto column_array = checkAndGetColumn<ColumnArray>(column.get()))
    {
        auto array_type = checkAndGetDataType<DataTypeArray>(data_type.get());
        if (!array_type)
            throw Exception{"Cannot cast array column to column with type "
                            + data_type->getName() + " in function " + getName(), ErrorCodes::LOGICAL_ERROR};

        auto casted_column = castRemoveNullable(column_array->getDataPtr(), array_type->getNestedType());
        return ColumnArray::create(casted_column, column_array->getOffsetsPtr());
    }
    else if (auto column_tuple = checkAndGetColumn<ColumnTuple>(column.get()))
    {
        auto tuple_type = checkAndGetDataType<DataTypeTuple>(data_type.get());

        if (!tuple_type)
            throw Exception{"Cannot cast tuple column to type "
                            + data_type->getName() + " in function " + getName(), ErrorCodes::LOGICAL_ERROR};

        auto columns_number = column_tuple->getColumns().size();
        Columns columns(columns_number);

        const auto & types = tuple_type->getElements();

        for (auto i : ext::range(0, columns_number))
        {
            columns[i] = castRemoveNullable(column_tuple->getColumnPtr(i), types[i]);
        }
        return ColumnTuple::create(columns);
    }

    return column;
}
void SmokeGenerator::_animate(int timerInterval)
{
	static int remainingIntervals = 0;
	static int i = 0;
	if (remainingIntervals <= 0) {
		vector<Element*>& elements = getElements();
		Smoke* smoke = (Smoke*) elements[i];

		smoke->setVisible(true);
		smoke->setX(_sourceElement->x());
		smoke->setY(_sourceElement->y());
		smoke->setZ(_sourceElement->z());
		smoke->setScaleWidth(1.0);
		smoke->setScaleHeight(1.0);
		smoke->setAlpha(1.0);
		
		i = (i + 1) % _smokeNumber;
		remainingIntervals = 45;
	}
	remainingIntervals--;
	CompositeElement::_animate(timerInterval);
}
Beispiel #23
0
void CubeDimension::checkElements(PServer server, PDatabase database)
{

	ElementsType elements = getElements(PUser(), false);
	for (ElementsType::iterator i = elements.begin(); i != elements.end(); ++i) {
		PCube cube = database->lookupCubeByName((*i)->getName(getElemNamesVector()), true);
		if (!cube || (cube->getType() != NORMALTYPE && cube->getType() != GPUTYPE)) {
			deleteElement(server, database, *i, PUser(), false, 0, false);
		}
	}

	vector<CPCube> cubes = database->getCubes(PUser());

	for (vector<CPCube>::iterator i = cubes.begin(); i != cubes.end(); ++i) {
		if ((*i)->getType() == NORMALTYPE || (*i)->getType() == GPUTYPE) {
			Element* element = lookupElementByName((*i)->getName(), false);
			if (!element) {
				addElement(server, database, NO_IDENTIFIER, (*i)->getName(), Element::STRING, PUser(), false);
			}
		}

	}

}
double
CoinPackedVectorBase::normSquare() const
{
   return std::inner_product(getElements(), getElements() + getNumElements(),
			     getElements(), 0.0);
}
Beispiel #25
0
std::vector<int> CRSSparsity::getElements(bool row_major) const{
  std::vector<int> loc;
  getElements(loc,row_major);
  return loc;
}
Beispiel #26
0
	 const double *getObjectiveElements()  {return getElements(this->getObjStart());}
Beispiel #27
0
	 const double *getRowElements(int irow){
		 if (this->has_matrix_)
			 return getElements(this->getMatStart()+irow-this->rowbeg_);
		 else
			 return NULL;
	 }
double
CoinPackedVectorBase::sum() const
{
   return std::accumulate(getElements(), getElements() + getNumElements(), 0.0);
}
	RESULT YandexNarodRVFSDriver::sync()
	{
		RESULT res = eERROR_GENERAL;
		SettingStorage* settings = WebMounter::getSettingStorage();
        QString pluginStoragePath = settings->getAppStoragePath() + QString(QDir::separator()) + m_pluginName;
		QFileInfo fInfo(pluginStoragePath);
		unsigned int uNotDownloaded = 0;
		PluginSettings plSettings;
        settings->getData(plSettings, m_pluginName);

        m_driverMutex.lock();
        if(m_state != eSyncStopping)
		{
			updateState(0, RemoteDriver::eSync);
		}
        m_driverMutex.unlock();

		QList<VFSElement> elements;

		VFSElement elem = VFSElement(VFSElement::DIRECTORY
			, fInfo.absoluteFilePath()
			, "ROOT"
			, ""
			, ""
			, ""
			, ROOT_ID
			, ROOT_ID
			, ""
            , m_pluginName);

		elements.append(elem);

		res = getElements(elements);
		if(!res)
		{
			QDir qDir;
			QFile qFile;

			uNotDownloaded = elements.count();
			VFSCache* vfsCache = WebMounter::getCache();
			VFSCache::iterator iter = vfsCache->begin();
			for(iter; iter != vfsCache->end(); ++iter)
			{
                if(iter->getPluginName() == m_pluginName)
				{
					bool found = false;
					int count = elements.count();
					// Try to find element in new data
					for(int i=0; i<count; i++)
					{
						if(iter->getId() == elements[i].getId())
						{
							found = true;
							if(iter != elements[i])
							{
								if(iter->getType() == VFSElement::DIRECTORY)
								{
									qDir.rename(iter->getPath(), elements[i].getPath());
								}
								break;
							}

							elements.removeAt(i);
							break;
						}
					}

					// Element has been deleted
					if(!found)
					{
						VFSCache::iterator iter1 = iter--;
						vfsCache->erase(iter1);
					}
				}
			}

            { 	LOCK(m_driverMutex);
            if(m_state != eSyncStopping)
			{
				updateState(30, RemoteDriver::eSync);
			}
			}

			// Add newly created elements
			for(int i=0; i<elements.count(); i++)
			{
				vfsCache->insert(elements[i]);
			}

            { 	LOCK(m_driverMutex);
            if(m_state != eSyncStopping)
			{
				updateState(40, RemoteDriver::eSync);
			}
			}

            QString rootPath = WebMounter::getSettingStorage()->getAppStoragePath() + QString(QDir::separator()) + m_pluginName;
			QFileInfo fInfo(rootPath);

			syncCacheWithFileSystem(fInfo.absoluteFilePath());

            { 	LOCK(m_driverMutex);
            if(m_state != eSyncStopping)
			{
				updateState(50, RemoteDriver::eSync);
			}
			}

            if(plSettings.m_fullSync)
			{
				res = downloadFiles();
			}
		}

		if(res != eNO_ERROR)
		{
			stopPlugin();
			notifyUser(Ui::Notification::eCRITICAL, tr("Error"), tr("Sync failed !\n"));
			//updateState(100, RemoteDriver::eNotConnected);
		}
		else
		{
            m_driverMutex.lock();
            if(m_state != eSyncStopping)
			{
				updateState(100, eConnected);
			}
            m_driverMutex.unlock();
		}

		return res;
	}
	RESULT YandexNarodRVFSDriver::uploadFile(const QString& path, const QString& title,  const QString& /*Id*/, const QString& parentId)
	{
		QString xmlResp;
		QString id = ROOT_ID;
		QFileInfo fInfo(path);

        RESULT err = m_httpConnector->uploadFile(path, title, parentId, xmlResp);
		unsigned int retryUploadCounter = 0;

		while(err != eNO_ERROR && retryUploadCounter < MAX_UPLOAD_RETRY)
		{
            err = m_httpConnector->uploadFile(path, title, parentId, xmlResp);
			retryUploadCounter++;
		}

		VFSElement elem;
		if(!err && xmlResp != "")
		{
			id = RegExp::getByPattern("\"fids\": \"(.*)\"", xmlResp);
			if(id != "")
			{
				// Trying to get new element from server to retrieve the data-token
				QList<VFSElement> elements;
				err = getElements(elements); 
				if(err == eNO_ERROR)
				{
					int i=0;
					for(i=0; i<elements.count(); i++)
					{
						if(elements[i].getId() == id)
							break;
					}

					QString hash = RegExp::getByPattern("\"hash\": \"(.*)\",", xmlResp);

					VFSCache* vfsCache = WebMounter::getCache();
					elem = VFSElement(VFSElement::FILE
						, fInfo.absoluteFilePath()
						, title
						, ""
						, (i<elements.count() ? elements[i].getEditMediaUrl() : "")
						, "http://narod.ru/disk/" + hash + "/" + fInfo.fileName() + ".html"
						, id
						, parentId
						, ""
                        , m_pluginName);

					vfsCache->insert(elem);

					QFile::Permissions permissions = QFile::permissions(elem.getPath());
					permissions &= ~(QFile::WriteGroup|QFile::WriteOwner|QFile::WriteUser|QFile::WriteOther);
					QFile::setPermissions(elem.getPath(), permissions);
				}
			}
		}
		else
		{
			notifyUser(Ui::Notification::eCRITICAL
				, tr("Error")
				, tr("File upload failed (") + elem.getName() + QString(")"));
		}

		WebMounter::getProxy()->fileUploaded(fInfo.absoluteFilePath(), err);
		return err;
	}