Esempio n. 1
0
QString Relation::toString() const
{
  stringstream ss(stringstream::out);
  ss << "relation(" << getId() << ")" << endl;
  ss << "type: " << getType() << endl;
  ss << "members: ";
  for (size_t i = 0; i < getMembers().size(); i++)
  {
    ss << "  " << getMembers()[i].toString().toUtf8().data() << endl;
  }
  ss << endl;
  ss << "tags: " << getTags().toString().toUtf8().data();
  ss << "status: " << getStatusString().toUtf8().data();
  return QString::fromUtf8(ss.str().data());
}
Esempio n. 2
0
void Relation::visitRw(ElementProvider& map, ElementVisitor& filter)
{
  filter.visit(map.getRelation(getId()));

  const vector<RelationData::Entry> members = getMembers();

  for (size_t i = 0; i < members.size(); i++)
  {
    const RelationData::Entry& m = members[i];
    if (map.containsElement(m.getElementId()))
    {
      if (m.getElementId().getType() == ElementType::Node &&
        map.containsNode(m.getElementId().getId()))
      {
        map.getNode(m.getElementId().getId())->visitRw(map, filter);
      }
      else if (m.getElementId().getType() == ElementType::Way &&
        map.containsWay(m.getElementId().getId()))
      {
        map.getWay(m.getElementId().getId())->visitRw(map, filter);
      }
      else if (m.getElementId().getType() == ElementType::Relation &&
        map.containsRelation(m.getElementId().getId()))
      {
        map.getRelation(m.getElementId().getId())->visitRw(map, filter);
      }
      else
      {
        assert(false);
      }
    }
  }
}
Esempio n. 3
0
Envelope* Relation::getEnvelope(const shared_ptr<const ElementProvider> &ep) const
{
  Envelope* result = new Envelope();
  const vector<RelationData::Entry>& members = getMembers();

  for (size_t i = 0; i < members.size(); i++)
  {
    const RelationData::Entry& m = members[i];
    // if any of the elements don't exist then return an empty envelope.
    if (ep->containsElement(m.getElementId()) == false)
    {
      result->setToNull();
      return result;
    }
    const shared_ptr<const Element> e = ep->getElement(m.getElementId());
    auto_ptr<Envelope> childEnvelope(e->getEnvelope(ep));

    if (childEnvelope->isNull())
    {
      result->setToNull();
      return result;
    }

    result->expandToInclude(childEnvelope.get());
  }

  return result;
}
 const Member next() {
     std::vector<Member> members = getMembers();
     long len = members.size();
     if (len == 0) {
         throw exception::IException("const Member& RoundRobinLB::next()", "No member in member list!!");
     }
     for (int i = 0; i < len; i++) {
         if (members[i].getAddress().getPort() == 5701) {
             return members[i];
         }
     }
     return members[0];
 }
Esempio n. 5
0
bool Relation::contains(ElementId eid) const
{
  const vector<RelationData::Entry>& members = getMembers();

  for (size_t i = 0; i < members.size(); i++)
  {
    if (members[i].getElementId() == eid)
    {
      return true;
    }
  }
  return false;
}
Esempio n. 6
0
float InputNetcdf::getValueCore(const Key::Input& iKey) const {
   float returnValue = Global::MV;

   std::string filename = getFilename(iKey);

   int size = getNumOffsets()*getNumLocations()*getNumMembers();
   float* values = new float[size];
   NcFile ncfile(filename.c_str());
   std::string localVariable;
   bool found = getLocalVariableName(iKey.variable, localVariable);
   assert(found);
   if(!ncfile.is_valid() || localVariable == "") {
      for(int i = 0; i < size; i++) {
         values[i] = Global::MV;
      }
   }
   else {
      std::stringstream ss;
      ss << "InputNetcdf: Loading " << filename << " " << iKey;
      Global::logger->write(ss.str(), Logger::message);
      assert(localVariable != "");

      NcError q(NcError::silent_nonfatal);
      NcVar* ncvar = ncfile.get_var(localVariable.c_str());
      if(ncvar) {
         long count[3] = {getNumOffsets(),getNumLocations(),getNumMembers()};
         bool status = ncvar->get(values, count);
         assert(status);
      }
      else {
         std::stringstream ss;
         ss << "InputNetcdf: File " << filename << " does not contain local variable "
            << localVariable << ". Is the file corrupts?";
         Global::logger->write(ss.str(), Logger::warning);
         for(int i = 0; i < size; i++) {
            values[i] = Global::MV;
         }
      }
   }
   ncfile.close();

   std::vector<float>  offsets = getOffsets();
   std::vector<Member> members = getMembers();

   int oC = getOffsetIndex(iKey.offset);
   int oS = mCacheOtherOffsets ? 0 : oC;
   int oE = mCacheOtherOffsets ? getNumOffsets()-1 : oC;

   int lC = iKey.location;
   int lS = mCacheOtherLocations ? 0 : lC;
   int lE = mCacheOtherLocations ? getNumLocations()-1 : lC;

   int iC = iKey.member;
   int iS = mCacheOtherMembers ? 0 : iC;
   int iE = mCacheOtherMembers ? getNumMembers()-1 : iC;

   std::vector<float> vec;
   vec.assign(values, values + size);
   delete[] values;
   Key::Input key = iKey;
   if(0 && getName() == "rda336") {
      std::cout << "Date: " << iKey.date << " " << iKey.variable << " " << getName() << " " << mCacheOtherLocations << std::endl;
      std::cout << oC << " " << oS << " " << oE << std::endl;
      std::cout << lC << " " << lS << " " << lE << std::endl;
      std::cout << iC << " " << iS << " " << iE << std::endl;
   }

   for(int offsetIndex = oS; offsetIndex <= oE; offsetIndex++) {
      key.offset = offsets[offsetIndex];
      for(key.member = iS; key.member <= iE; key.member++) {
         for(key.location = lS; key.location <= lE; key.location++) {
            int index = offsetIndex*getNumLocations()*getNumMembers() + key.location*getNumMembers() + key.member;
            assert(index < vec.size());
            Input::addToCache(key, vec[index]);

            assert(!std::isinf(vec[index]));
            if(key == iKey) {
               returnValue = vec[index];
            }
         }
      }
   }
   if(std::isnan(returnValue)) {
      returnValue = Global::MV;
   }

   return returnValue;
}
Esempio n. 7
0
File: Flat.cpp Progetto: WFRT/Comps
float InputFlat::getValueCore(const Key::Input& iKey) const {
    float returnValue = Global::MV;

    std::string filename = getFilename(iKey);
    std::vector<float> values;

    std::vector<float> offsets = getOffsets();
    std::vector<Member> members = getMembers();

    std::ifstream ifs(filename.c_str(), std::ifstream::in);
    if(!ifs.good()) {
        // Missing file
        std::vector<float> values;
        Key::Input key = iKey;
        for(int i = 0; i < offsets.size(); i++) {
            key.offset = offsets[i];
            for(key.member = 0; key.member < members.size(); key.member++) {
                Input::addToCache(key, Global::MV);
            }
        }
        std::stringstream ss;
        ss << "InputFlat: File " << filename << " missing";
        Global::logger->write(ss.str(), Logger::message);
    }
    else {
        // Loop over each line
        Key::Input key = iKey;
        int offsetId = 0;
        while(ifs.good()) {
            char line[10000];
            ifs.getline(line, 10000, '\n');
            if(ifs.good() && line[0] != '#') {
                if(offsetId >= offsets.size()) {
                    std::stringstream ss;
                    ss << "InputFlat: File '" << filename << "' has too many lines" << std::endl;
                    Global::logger->write(ss.str(), Logger::warning);
                    break;
                }
                assert(offsetId < offsets.size());
                key.offset = offsets[offsetId];
                std::stringstream ss(line);
                // Loop over each value
                key.member = 0;
                while(ss.good()) {
                    float value;
                    if(ss >> value) {
                        Input::addToCache(key, value);
                    }
                    if(key.offset == iKey.offset && key.member == iKey.member) {
                        returnValue = value;
                    }
                    key.member++;
                }
            }
            offsetId++;
        }
        offsetId--;
        // Deal with truncated files
        if(offsetId < offsets.size()-1) {
            std::stringstream ss;
            ss << "InputFlat: File '" << filename << "' has too few rows. Assume last rows are missing values";
            Global::logger->write(ss.str(), Logger::warning);
            while(offsetId < offsets.size()) {
                key.offset = offsets[offsetId];
                for(key.member = 0; key.member < getNumMembers(); key.member++) {
                    Input::addToCache(key, Global::MV);
                }
                offsetId++;
            }
        }
    }
    return returnValue;
}
Esempio n. 8
0
extern int Error_getNumMessages(threadData_t *threadData)
{
  return getMembers(threadData)->errorMessageQueue->size();
}
Esempio n. 9
0
void Error_setShowErrorMessages(threadData_t *threadData,int show)
{
  getMembers(threadData)->showErrorMessages = show ? 1 : 0;
}