void DataStmtEngine::CreateArrayElementExprInitializer(ArrayElementExpr *E, Expr *Parent) { auto Target = dyn_cast<VarExpr>(E->getTarget()); if(!Target) return VisitExpr(E); if(CheckVar(Target)) return; auto VD = Target->getVarDecl(); auto ATy = VD->getType()->asArrayType(); auto ElementType = ATy->getElementType(); uint64_t ArraySize; if(!ATy->EvaluateSize(ArraySize, Context)) return VisitExpr(E); SmallVector<Expr*, 32> Items(ArraySize); if(VD->hasInit()) { assert(isa<ArrayConstructorExpr>(VD->getInit())); auto InsertPoint = cast<ArrayConstructorExpr>(VD->getInit())->getItems(); for(uint64_t I = 0; I < ArraySize; ++I) Items[I] = InsertPoint[I]; } else { for(uint64_t I = 0; I < ArraySize; ++I) Items[I] = nullptr; } uint64_t Offset; if(!E->EvaluateOffset(Context, Offset, &ImpliedDoEvaluator)) return VisitExpr(E); ExprResult Val; if(Parent) { if(auto SE = dyn_cast<SubstringExpr>(Parent)) { Val = CreateSubstringExprInitializer(SE, ElementType); } else if(auto ME = dyn_cast<MemberExpr>(Parent)) { if(Offset < Items.size()) { const TypeConstructorExpr *Init = Items[Offset]? cast<TypeConstructorExpr>(Items[Offset]) : nullptr; Val = CreateMemberExprInitializer(ME, Init); } } else llvm_unreachable("invalid expression"); } else Val = getAndCheckAnyValue(ElementType, E); if(Val.isUsable() && Offset < Items.size()) { Items[Offset] = Val.get(); VD->setInit(ArrayConstructorExpr::Create(Context, Val.get()->getLocation(), Items, VD->getType())); } }
Ensemble Distribution::getEnsemble(int iSize) const { std::vector<float> origValues = mEnsemble.getValues(); int numEns = iSize; if(!Global::isValid(iSize)) numEns = origValues.size(); // Create an ensemble by sampling values from the distribution std::vector<std::pair<float, int> > pairs(numEns); // forecast, ensemble index std::vector<float> invs(numEns, Global::MV); for(int i = 0; i < numEns; i++) { float cdf = (float) (i+1)/(numEns+1); float value = getInv(cdf); invs[i] = value; pairs[i] = std::pair<float, int>(origValues[i], i); } // Ensemble members should have the same rank as in the raw ensemble std::sort(pairs.begin(), pairs.end(), Global::sort_pair_first<float, int>()); std::vector<float> values(numEns, Global::MV); for(int i = 0; i < numEns; i++) { int index = pairs[i].second; float value = invs[i]; values[index] = value; } // Set up the ensemble Ensemble ens(values, getVariable()); ens.setInfo(getDate(), getInit(), getOffset(), getLocation(), getVariable()); return ens; }
ComplexValueTy ComplexExprEmitter::VisitVarExpr(const VarExpr *E) { auto VD = E->getVarDecl(); if(CGF.IsInlinedArgument(VD)) return CGF.GetInlinedArgumentValue(VD).asComplex(); if(VD->isParameter()) return EmitExpr(VD->getInit()); auto Ptr = CGF.GetVarPtr(VD); return CGF.EmitComplexLoad(Ptr); }
RValueTy AggregateExprEmitter::VisitVarExpr(const VarExpr *E) { auto VD = E->getVarDecl(); if(CGF.IsInlinedArgument(VD)) return CGF.GetInlinedArgumentValue(VD); else if(VD->isParameter()) return EmitExpr(VD->getInit()); else if(VD->isFunctionResult()) return RValueTy::getAggregate(CGF.GetRetVarPtr()); return RValueTy::getAggregate(CGF.GetVarPtr(VD)); }
int runPython(const char* path, int argc, char* argv[]) { Py_Initialize(); PyRun_SimpleString(getInit().c_str()); FILE* fp = fopen(path, "r"); PyRun_SimpleFile(fp, path); fclose(fp); Py_Finalize(); return 0; }
CharacterValueTy CharacterExprEmitter::VisitVarExpr(const VarExpr *E) { auto VD = E->getVarDecl(); if(CGF.IsInlinedArgument(VD)) return CGF.GetInlinedArgumentValue(VD).asCharacter(); if(VD->isArgument()) return CGF.GetCharacterArg(VD); else if(VD->isParameter()) return EmitExpr(VD->getInit()); else if(VD->isFunctionResult()) return CGF.ExtractCharacterValue(CGF.GetRetVarPtr()); return CGF.GetCharacterValueFromPtr(CGF.GetVarPtr(VD), VD->getType()); }
int main() { srand(time(NULL)); std::cout.sync_with_stdio(0); unsigned char myID; hlt::GameMap presentMap; getInit(myID, presentMap); sendInit("C++Bot"); std::set<hlt::Move> moves; while(true) { moves.clear(); getFrame(presentMap); for(unsigned short a = 0; a < presentMap.height; a++) { for(unsigned short b = 0; b < presentMap.width; b++) { if (presentMap.getSite({ b, a }).owner == myID) { bool movedPiece = false; for(int d : CARDINALS) { if(presentMap.getSite({ b, a }, d).owner != myID && presentMap.getSite({ b, a }, d).strength < presentMap.getSite({ b, a }).strength) { moves.insert({ { b, a }, d }); movedPiece = true; break; } } if(!movedPiece && presentMap.getSite({ b, a }).strength < presentMap.getSite({ b, a }).production * 5) { moves.insert({ { b, a }, STILL }); movedPiece = true; } if(!movedPiece) { moves.insert({ { b, a }, (bool)(rand() % 2) ? NORTH : WEST }); movedPiece = true; } } } } sendFrame(moves); } return 0; }
void DataStmtEngine::VisitMemberExpr(MemberExpr *E) { if(auto AE = dyn_cast<ArrayElementExpr>(E->getTarget())) { CreateArrayElementExprInitializer(AE, E); return; } auto Target = dyn_cast<VarExpr>(E->getTarget()); if(!Target) return VisitExpr(E); if(CheckVar(Target)) return; auto VD = Target->getVarDecl(); const TypeConstructorExpr *Init = VD->hasInit()? cast<TypeConstructorExpr>(VD->getInit()) : nullptr; auto Val = CreateMemberExprInitializer(E, Init); if(Val.isUsable()) VD->setInit(Val.get()); }