/** * Gets the value of the specified property key in the internal * property set. If the key is not found in the internal property * set, the application property set is then searched. If neither * search finds the specified key, a default value is returned. * * @param key The key to search for * @param def The default value to return if <tt>key</tt> is not found. * * @return The value associated with <tt>key</tt> if found, otherwise * <tt>def</tt> */ const char* getInternalPropertyDefault(const char* key, const char* def) { const char *result; result = findProp(implementationProperties, key); if (NULL == result) { result = findProp(applicationProperties, key); } return (NULL == result) ? def : result; }
/** * Gets the value of the specified property key in the internal * property set. If the key is not found in the internal property * set, the application property set is then searched. * * @param key The key to search for * * @return The value associated with <tt>key</tt> if found, otherwise * <tt>NULL</tt> */ const char* getInternalProperty(const char* key) { const char *result; result = findProp(implementationProperties, key); if (NULL == result) { result = findProp(applicationProperties, key); } return result; }
named_prop_t &named_element_t::findOrCreateProp(const std::string &n) { named_prop_t *p = findProp(n); if (p == NULL) { props.push_back(named_prop_t(n)); p = &props.back(); } return *p; }
// caller responsible for the returned string bool MediaAnalyticsItem::getCString(MediaAnalyticsItem::Attr name, char **value) { Prop *prop = findProp(name); if (prop == NULL || prop->mType != kTypeDouble) { return false; } if (value != NULL) { *value = strdup(prop->u.CStringValue); } return true; }
bool MediaAnalyticsItem::getDouble(MediaAnalyticsItem::Attr name, double *value) { Prop *prop = findProp(name); if (prop == NULL || prop->mType != kTypeDouble) { return false; } if (value != NULL) { *value = prop->u.doubleValue; } return true; }
bool MediaAnalyticsItem::getInt64(MediaAnalyticsItem::Attr name, int64_t *value) { Prop *prop = findProp(name); if (prop == NULL || prop->mType != kTypeInt64) { return false; } if (value != NULL) { *value = prop->u.int64Value; } return true; }
/** * Gets the value of the specified property key in the application * property set. * * @param key The key to search for * * @return The value associated with <tt>key</tt> if found, otherwise * <tt>NULL</tt> */ const char* getSystemProperty(const char* key) { const char *result; result = findProp(applicationProperties, key); if ((NULL == result) && (strcmp(key, "microedition.hostname") == 0)) { /* Get the local hostname from the native networking subsystem */ result = getLocalHostName(); } return result; }
// merge the info from 'incoming' into this record. // we finish with a union of this+incoming and special handling for collisions bool MediaAnalyticsItem::merge(MediaAnalyticsItem *incoming) { // if I don't have key or session id, take them from incoming // 'this' should never be missing both of them... if (mKey.empty()) { mKey = incoming->mKey; } else if (mSessionID == 0) { mSessionID = incoming->mSessionID; } // we always take the more recent 'finalized' value setFinalized(incoming->getFinalized()); // for each attribute from 'incoming', resolve appropriately int nattr = incoming->mPropCount; for (int i = 0 ; i < nattr; i++ ) { Prop *iprop = &incoming->mProps[i]; Prop *oprop = findProp(iprop->mName); const char *p = iprop->mName; size_t len = strlen(p); char semantic = p[len-1]; if (oprop == NULL) { // no oprop, so we insert the new one oprop = allocateProp(p); copyProp(oprop, iprop); } else { // merge iprop into oprop switch (semantic) { case '<': // first aka keep old) /* nop */ break; default: // default is 'last' case '>': // last (aka keep new) copyProp(oprop, iprop); break; case '+': /* sum */ // XXX validate numeric types, sum in place break; } } } // not sure when we'd return false... return true; }
bool MediaAnalyticsItem::getRate(MediaAnalyticsItem::Attr name, int64_t *count, int64_t *duration, double *rate) { Prop *prop = findProp(name); if (prop == NULL || prop->mType != kTypeRate) { return false; } if (count != NULL) { *count = prop->u.rate.count; } if (duration != NULL) { *duration = prop->u.rate.duration; } if (rate != NULL) { double r = 0.0; if (prop->u.rate.duration != 0) { r = prop->u.rate.count / (double) prop->u.rate.duration; } *rate = r; } return true; }
reader_base *findReader(const std::string &b, const std::string &e, const std::string &p) const { named_prop_t *prop = findProp(b, e, p); if (prop) return prop->rd.ptr(); return NULL; }