Exemple #1
0
    Status Resolver::resolveCached(
            const vector<Address>&  addresses,
            vector<ExpandedNodeId>& expandedNodeIds,
            vector<Status>&         statuses,
            Mask&                   expandedNodeIdMask,
            Mask&                   relativePathMask)
    {
        logger_->debug("Resolving the addresses by querying the cache");

        // declare the return status
        Status ret(statuscodes::Good);

        // declare the number of addresses
        size_t noOfAddresses = addresses.size();

        // resize the masks
        expandedNodeIdMask.resize(noOfAddresses);
        relativePathMask.resize(noOfAddresses);

        // loop through the addresses
        for (size_t i=0; i<noOfAddresses; i++)
        {
            logger_->debug("Trying to find address %d in the cache", i);

            if (database_->addressCache.find(addresses[i], expandedNodeIds[i]))
            {
                statuses[i] = statuscodes::Good;
                logger_->debug("Address %d was already cached", i);
            }
            else
            {
                if (addresses[i].isExpandedNodeId())
                {
                    expandedNodeIdMask.set(i);
                    logger_->debug("Address %d is an ExpandedNodeId not found in the cache", i);
                }
                else if (addresses[i].isRelativePath())
                {
                    relativePathMask.set(i);
                    logger_->debug("Address %d is a RelativePath not found in the cache", i);
                }
                else
                {
                    ret = EmptyAddressError();
                    logger_->error("Address %d cannot be resolved since it's an empty address", i);
                    break;
                }
            }
        }

        return ret;
    }
Exemple #2
0
void bi::InputNetCDFBuffer::readMask0(const VarType type,
    Mask<ON_HOST>& mask) {
  typedef temp_host_matrix<real>::type temp_matrix_type;
  mask.resize(m.getNumVars(type), false);

  Var* var;
  int r;
  long start, len;

  /* sparse masks */
  for (r = 0; r < int(recDims.size()); ++r) {
    if (timeVars[r] < 0) {
      BOOST_AUTO(range, modelVars.equal_range(r));
      BOOST_AUTO(iter, range.first);
      BOOST_AUTO(end, range.second);

      start = 0;
      len = nc_inq_dimlen(ncid, recDims[r]);

      temp_matrix_type C(iter->second->getNumDims(), len);
      readCoords(coordVars[r], start, len, C);
      for (; iter != end; ++iter) {
        var = iter->second;
        if (var->getType() == type) {
          mask.addSparseMask(var->getId(), C.size2());
          serialiseCoords(var, C, mask.getIndices(var->getId()));
        }
      }
    }
  }

  /* dense masks */
  r = -1;  // for those vars not associated with a record dimension
  BOOST_AUTO(range, modelVars.equal_range(r));
  BOOST_AUTO(iter, range.first);
  BOOST_AUTO(end, range.second);

  for (; iter != end; ++iter) {
    var = iter->second;
    if (var->getType() == type) {
      mask.addDenseMask(var->getId(), var->getSize());
    }
  }
}
Exemple #3
0
void bi::InputNetCDFBuffer::readMask(const size_t k, const VarType type,
    Mask<ON_HOST>& mask) {
  typedef temp_host_matrix<real>::type temp_matrix_type;

  mask.resize(m.getNumVars(type), false);

  Var* var;
  int r;
  long start, len;
  for (r = 0; r < int(recDims.size()); ++r) {
    if (timeVars[r] >= 0) {
      start = recStarts[k][r];
      len = recLens[k][r];

      if (len > 0) {
        BOOST_AUTO(range, modelVars.equal_range(r));
        BOOST_AUTO(iter, range.first);
        BOOST_AUTO(end, range.second);

        if (coordVars[r] >= 0) {
          /* sparse mask */
          temp_matrix_type C(iter->second->getNumDims(), len);
          readCoords(coordVars[r], start, len, C);
          for (; iter != end; ++iter) {
            var = iter->second;
            if (var->getType() == type) {
              mask.addSparseMask(var->getId(), len);
              serialiseCoords(var, C, mask.getIndices(var->getId()));
            }
          }
        } else {
          /* dense mask */
          for (; iter != end; ++iter) {
            var = iter->second;
            if (var->getType() == type) {
              mask.addDenseMask(var->getId(), var->getSize());
            }
          }
        }
      }
    }
  }
}