std::list<unsigned long> JsonUtils::asUnsignedLongList(const Json::Value &value, const std::list<unsigned long> defaultValue, unsigned long defaultItemValue) { if(value.isNull() || !value.isArray()) return defaultValue; std::list<unsigned long> output; for(Json::ValueIterator it = value.begin(); it != value.end(); ++it) output.push_back(asUnsignedLong(*it, defaultItemValue)); return output; }
std::map<Ogre::String, unsigned long> JsonUtils::asStringUnsignedLongMap(const Json::Value &value) { std::map<Ogre::String, unsigned long> map; if(value.isNull() || !value.isObject()) return map; for(auto const & name : value.getMemberNames()) map.emplace(Ogre::String(name), asUnsignedLong(value[name], 0)); return map; }
/* Unpack a sign/mag long */ long PackedNavBits::asSignMagLong(const int startBit, const int numBits, const int scale) const { // Get the magnitude int startBitMag = startBit + 1; int numBitsMag = numBits - 1; unsigned long mag = asUnsignedLong(startBitMag, numBitsMag, scale); // Get the sign bit uint64_t uint = asUint64_t( startBit, 1 ); long smag = (long) mag; if (uint==1) smag *= -1; return smag; }
extern "C" unsigned long PyLong_AsUnsignedLong(PyObject* vv) noexcept { assert(vv); if (vv->cls == int_cls) { long val = PyInt_AsLong(vv); if (val < 0) { PyErr_SetString(PyExc_OverflowError, "can't convert negative value " "to unsigned long"); return (unsigned long)-1; } return val; } RELEASE_ASSERT(PyLong_Check(vv), ""); BoxedLong* l = static_cast<BoxedLong*>(vv); try { return asUnsignedLong(l); } catch (ExcInfo e) { setCAPIException(e); return -1; } }