inline void ValueMap::Add(const Value& key, const Value& value) { Data& d = UnShare(); d.key.Add(key); d.value.Add(value); } inline int StdValueCompare(const Value& a, const Value& b, const LanguageInfo& f) { return IsString(a) && IsString(b) ? CompareStrings(a, b, f) : a.Compare(b); } inline int StdValueCompare(const Value& a, const Value& b, int language) { return StdValueCompare(a, b, GetLanguageInfo(language)); } inline int StdValueCompare(const Value& a, const Value& b) { return StdValueCompare(a, b, GetLanguageInfo()); } inline int StdValueCompareDesc(const Value& a, const Value& b, const LanguageInfo& f) { return -StdValueCompare(a, b, f); } inline int StdValueCompareDesc(const Value& a, const Value& b, int language) { return -StdValueCompare(a, b, language); } inline int StdValueCompareDesc(const Value& a, const Value& b) { return -StdValueCompare(a, b); } #ifdef DEPRECATED template struct RawRef : public RefManager { virtual void SetValue(void *p, const Value& v) { *(T *) p = RawValue::Extract(v); } virtual Value GetValue(const void *p) { return RawValue(*(const T *) p); } virtual int GetType() { return GetValueTypeNo(); } virtual ~RawRef() {} }; template Ref RawAsRef(T& x) { return Ref(&x, &Single< RawRef >()); } template struct RichRef : public RawRef { virtual Value GetValue(const void *p) { return RichToValue(*(T *) p); } virtual bool IsNull(const void *p) { return UPP::IsNull(*(T *) p); } virtual void SetValue(void *p, const Value& v) { *(T *) p = T(v); } virtual void SetNull(void *p) { UPP::SetNull(*(T *)p); } }; template Ref RichAsRef(T& x) { return Ref(&x, &Single< RichRef >()); } #endif