Beispiel #1
0
int main()
{
	//ConcreteAggregate *pName = NULL;
	ConcreteAggregate *pName = new ConcreteAggregate();
	if(NULL != pName)
	{
		pName->Push("Hello");
		pName->Push("word");
		pName->Push("kevin");
	}

	Iterator *iter = NULL;
	iter = pName->CreateIterator();
	if(NULL != iter)
	{
		string strItem = iter->First();
		while(!iter->IsEnd())
		{
			cout << iter->GetCur() << " is ok " << endl;
			iter->Next();
		}
	}

	delete pName;

	return 0;
}
Beispiel #2
0
Currency CompositeEquipment::NetPrice () {
    Iterator<Equipment*>* i = CreateIterator();
    Currency total = 0;

    for (i->First(); !i->IsDone(); i->Next()) {
        total += i->CurrentItem()->NetPrice();
    }
    delete i;
    return total;
}
    virtual const string GetName()
    {
        string _nameList = _name;

        Iterator<Component*>* it = CreateIterator();

        for(it->First(); !it->IsDone(); it->Next())
        {
            _nameList += it->CurrentItem()->GetName();
        }

        return _nameList;
    }
Beispiel #4
0
int main()
{
    ConcreteAggregate<int> a;
    a.PushBack(1);
    a.PushBack(2);
    a.PushBack(3);
    a.PushBack(4);

    Iterator<int> *iter = a.CreateIterator();
    iter->First();
    while(iter->IsDone() == false)
    {
        std::cout << iter->CurrentItem() << std::endl;
        iter->Next();
    }
    return 0;
}
Beispiel #5
0
void Geometry::Update_All(Grid* p,Grid* u,Grid* v,real_t pL,real_t pR) const {
	Iterator it = Iterator(this);
	it.First();
	while (it.Valid()){
		//cout<<it.Value()<<"b:"<< _b->Cell(it)<<endl;
		if(_b->Cell(it)==0){
			//Mach nichts da keine Randpunkt
		}
		else if(_b->Cell(it)==1){//no Slip Bedingung
			if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){
				//nichts tun da alle Ränder auch Rand sind.
			}
			else if(_b->Cell(it.Right())==0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){
				//Rechts ist Wasser
				p->Cell(it)=p->Cell(it.Right());
				u->Cell(it)=0;
				v->Cell(it)=-1*(v->Cell(it.Right()));
			}
			else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())==0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){
				//Oben ist Wasser
				p->Cell(it)=p->Cell(it.Top());
				u->Cell(it)=-1*(u->Cell(it.Top()));
				v->Cell(it)=0;
			}
			else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())==0 && _b->Cell(it.Down())!=0){
				//Links ist Wasser
				p->Cell(it)=p->Cell(it.Left());
				u->Cell(it)=0;
				u->Cell(it.Left())=0;
				v->Cell(it)=-1*(v->Cell(it.Left()));
			}
			else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())==0){
				//Unten ist Wasser
				p->Cell(it)=p->Cell(it.Down());
				u->Cell(it)=-1*(u->Cell(it.Down()));
				v->Cell(it)=0;
				v->Cell(it.Down())=0;
			}
			else if(_b->Cell(it.Right())==0 && _b->Cell(it.Top())==0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){
				//Rechts und Oben ist Wasser
				p->Cell(it)=( p->Cell(it.Right())+p->Cell(it.Top()) )/2.0; // Mittelwert des Druckes
				u->Cell(it)=0;
				v->Cell(it)=0;
			}
			else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())==0 && _b->Cell(it.Left())==0 && _b->Cell(it.Down())!=0){
				//Oben und Links ist Wasser
				p->Cell(it)=( p->Cell(it.Left())+p->Cell(it.Top()) )/2.0; // Mittelwert des Druckes
				u->Cell(it)=0;
				u->Cell(it.Left())=0;;
				v->Cell(it)=0;
			}
			else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())==0 && _b->Cell(it.Down())==0){
				//Links und Unten ist Wasser
				p->Cell(it)=( p->Cell(it.Left())+p->Cell(it.Down()) )/2.0; // Mittelwert des Druckes
				u->Cell(it)=0;
				u->Cell(it.Left())=0;;
				v->Cell(it)=0;
				v->Cell(it.Down())=0;

			}
			else if(_b->Cell(it.Right())==0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())==0){
				//Unten und Rechts ist Wasser
				p->Cell(it)=( p->Cell(it.Down())+p->Cell(it.Right()) )/2.0; // Mittelwert des Druckes
				u->Cell(it)=0;
				v->Cell(it)=0;
				v->Cell(it.Down())=0;
			}
			else if(_b->Cell(it.Right())==0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())==0 && _b->Cell(it.Down())!=0){
				//Links und Rechts ist Wasser
				//Rechts ist Wasser
				p->Cell(it)= 0.5*(p->Cell(it.Right()) + p->Cell(it.Left()));
				//p->Cell(it)=p->Cell(it.Right());
				u->Cell(it)= 0;
				v->Cell(it)= -0.5*(v->Cell(it.Right()) + v->Cell(it.Left()));
				//v->Cell(it)= -(v->Cell(it.Right()));
				//v->Cell(it.Down())= -(v->Cell(it.Down().Right()));
			}
			else{
				cout<<"Error in CSV File"<< it.Value()<<"Bedingung:"<< _b->Cell(it)<<endl;
			}

		}
		else if(_b->Cell(it)==2){//Slip Bedingung
			cout<<"2 not implemented!"<<endl;
			if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){
				//nichts tun da alle Ränder auch Rand sind.
			}
			else if(_b->Cell(it.Right())==0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){
				//Rechts ist Wasser
			}
			else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())==0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){
				//Oben ist Wasser
			}
			else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())==0 && _b->Cell(it.Down())!=0){
				//Links ist Wasser
			}
			else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())==0){
				//Unten ist Wasser
			}
			else if(_b->Cell(it.Right())==0 && _b->Cell(it.Top())==0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){
				//Rechts und Oben ist Wasser
			}
			else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())==0 && _b->Cell(it.Left())==0 && _b->Cell(it.Down())!=0){
				//Oben und Links ist Wasser
			}
			else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())==0 && _b->Cell(it.Down())==0){
				//Links und Unten ist Wasser
			}
			else if(_b->Cell(it.Right())==0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())==0){
				//Unten und Rechts ist Wasser
			}
			else{
				cout<<"Error in CSV File"<< it.Value()<<"Bedingung:"<< _b->Cell(it)<<endl;
			}


		}
		else if(_b->Cell(it)==3){//linker Rand OUTFLOW Bedingung
			if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){
				//nichts tun da alle Ränder auch Rand sind.
			}
			else if(_b->Cell(it.Right())==0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){
				//Rechts ist Wasser
				p->Cell(it)= 2.0*pL - p->Cell(it.Right());
				//u->Cell(it.Right()) = u->Cell(it.Right().Right());
				u->Cell(it)= u->Cell(it.Right());
				v->Cell(it)= v->Cell(it.Right());
				//u->Cell(it) = 1.0;
				//v->Cell(it) = 0.0;//2.0*0.0 - v->Cell(it.Right());
				//p->Cell(it) = p->Cell(it.Right());
			}
			else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())==0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){
				//Oben ist Wasser
			}
			else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())==0 && _b->Cell(it.Down())!=0){
				//Links ist Wasser
			}
			else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())==0){
				//Unten ist Wasser
			}
			else if(_b->Cell(it.Right())==0 && _b->Cell(it.Top())==0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){
				//Rechts und Oben ist Wasser
			}
			else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())==0 && _b->Cell(it.Left())==0 && _b->Cell(it.Down())!=0){
				//Oben und Links ist Wasser
			}
			else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())==0 && _b->Cell(it.Down())==0){
				//Links und Unten ist Wasser
			}
			else if(_b->Cell(it.Right())==0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())==0){
				//Unten und Rechts ist Wasser
			}
			else{
				cout<<"Error in CSV File"<< it.Value()<<"Bedingung:"<< _b->Cell(it)<<endl;
			}


		}
		else if(_b->Cell(it)==4){//rechter Rand OUTFLOW Bedingung
			if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){
				//nichts tun da alle Ränder auch Rand sind.
			}
			else if(_b->Cell(it.Right())==0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){
				//Rechts ist Wasser
			}
			else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())==0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){
				//Oben ist Wasser
			}
			else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())==0 && _b->Cell(it.Down())!=0){
				//Links ist Wasser
				//real_t tmp = 1.0; //p->Cell(it.Left());//2.0*1.0 - p->Cell(it.Left());
				//cout << p->Cell(it.Left()) << endl;
				p->Cell(it)= 2.0*pR - p->Cell(it.Left());

				//u->Cell(it.Left())=u->Cell(it.Left().Left());
				u->Cell(it)=u->Cell(it.Left());
				v->Cell(it)=v->Cell(it.Left());
			}
			else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())==0){
				//Unten ist Wasser
			}
			else if(_b->Cell(it.Right())==0 && _b->Cell(it.Top())==0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){
				//Rechts und Oben ist Wasser
			}
			else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())==0 && _b->Cell(it.Left())==0 && _b->Cell(it.Down())!=0){
				//Oben und Links ist Wasser
			}
			else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())==0 && _b->Cell(it.Down())==0){
				//Links und Unten ist Wasser
			}
			else if(_b->Cell(it.Right())==0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())==0){
				//Unten und Rechts ist Wasser
			}
			else{
				cout<<"Error in CSV File"<< it.Value()<<"Bedingung:"<< _b->Cell(it)<<endl;
			}


		}
		else if(_b->Cell(it)==5){//oben INFLOW Bedingung (driven Cavity)
			if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){
				//nichts tun da alle Ränder auch Rand sind.
			}
			else if(_b->Cell(it.Right())==0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){
				//Rechts ist Wasser
				p->Cell(it)= p->Cell(it.Right());
				u->Cell(it)=1.0;//u->Cell(it.Right());
				v->Cell(it)= 0;//v->
			}
			else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())==0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){
				//Oben ist Wasser
			}
			else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())==0 && _b->Cell(it.Down())!=0){
				//Links ist Wasser
			}
			else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())==0){
				//Unten ist Wasser
				p->Cell(it)=p->Cell(it.Down());
				u->Cell(it)=2.0-(u->Cell(it.Down()));
				v->Cell(it)=0;
				v->Cell(it.Down())=0;

			}
			else if(_b->Cell(it.Right())==0 && _b->Cell(it.Top())==0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())!=0){
				//Rechts und Oben ist Wasser
			}
			else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())==0 && _b->Cell(it.Left())==0 && _b->Cell(it.Down())!=0){
				//Oben und Links ist Wasser
			}
			else if(_b->Cell(it.Right())!=0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())==0 && _b->Cell(it.Down())==0){
				//Links und Unten ist Wasser
			}
			else if(_b->Cell(it.Right())==0 && _b->Cell(it.Top())!=0 && _b->Cell(it.Left())!=0 && _b->Cell(it.Down())==0){
				//Unten und Rechts ist Wasser
			}
			else{
				cout<<"Error in CSV File"<< it.Value()<<"Bedingung:"<< _b->Cell(it)<<endl;
			}


		}
		it.Next();
	}
}