예제 #1
0
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()));
  }
}
예제 #2
0
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;
}
예제 #3
0
파일: CGExprComplex.cpp 프로젝트: hyp/flang
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);
}
예제 #4
0
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));
}
예제 #5
0
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;
}
예제 #6
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());
}
예제 #7
0
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;
}
예제 #8
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());
}