diff options
Diffstat (limited to 'indra/llinventory')
| -rwxr-xr-x | indra/llinventory/llparcel.cpp | 88 | ||||
| -rwxr-xr-x | indra/llinventory/llparcel.h | 25 | ||||
| -rwxr-xr-x | indra/llinventory/llparcelflags.h | 6 | 
3 files changed, 107 insertions, 12 deletions
| diff --git a/indra/llinventory/llparcel.cpp b/indra/llinventory/llparcel.cpp index b24e14c72b..0908613c10 100755 --- a/indra/llinventory/llparcel.cpp +++ b/indra/llinventory/llparcel.cpp @@ -40,6 +40,8 @@  #include "llsdutil_math.h"  #include "message.h"  #include "u64.h" +#include "llregionflags.h" +#include <boost/range/adaptor/map.hpp>  static const F32 SOME_BIG_NUMBER = 1000.0f;  static const F32 SOME_BIG_NEG_NUMBER = -1000.0f; @@ -627,8 +629,8 @@ void LLParcel::unpackMessage(LLMessageSystem* msg)  void LLParcel::packAccessEntries(LLMessageSystem* msg,  								 const std::map<LLUUID,LLAccessEntry>& list)  { -    access_map_const_iterator cit = list.begin(); -    access_map_const_iterator end = list.end(); +    LLAccessEntry::map::const_iterator cit = list.begin(); +    LLAccessEntry::map::const_iterator end = list.end();      if (cit == end)      { @@ -679,9 +681,28 @@ void LLParcel::unpackAccessEntries(LLMessageSystem* msg,  } +void LLParcel::unpackExperienceEntries( LLMessageSystem* msg, U32 type ) +{ +	LLUUID id; + +	S32 i; +	S32 count = msg->getNumberOfBlocksFast(_PREHASH_List); +	for (i = 0; i < count; i++) +	{ +		msg->getUUIDFast(_PREHASH_List, _PREHASH_ID, id, i); + +		if (id.notNull()) +		{ +			mExperienceKeys[id]=type; +		} +	} +} + + +  void LLParcel::expirePasses(S32 now)  { -    access_map_iterator itor = mAccessList.begin(); +    LLAccessEntry::map::iterator itor = mAccessList.begin();      while (itor != mAccessList.end())      {          const LLAccessEntry& entry = (*itor).second; @@ -771,7 +792,7 @@ BOOL LLParcel::addToAccessList(const LLUUID& agent_id, S32 time)  		// Can't add owner to these lists  		return FALSE;  	} -	access_map_iterator itor = mAccessList.begin(); +	LLAccessEntry::map::iterator itor = mAccessList.begin();  	while (itor != mAccessList.end())  	{  		const LLAccessEntry& entry = (*itor).second; @@ -814,7 +835,7 @@ BOOL LLParcel::addToBanList(const LLUUID& agent_id, S32 time)  		return FALSE;  	} -    access_map_iterator itor = mBanList.begin(); +    LLAccessEntry::map::iterator itor = mBanList.begin();      while (itor != mBanList.end())      {          const LLAccessEntry& entry = (*itor).second; @@ -848,7 +869,7 @@ BOOL remove_from_access_array(std::map<LLUUID,LLAccessEntry>* list,                                const LLUUID& agent_id)  {      BOOL removed = FALSE; -    access_map_iterator itor = list->begin(); +    LLAccessEntry::map::iterator itor = list->begin();      while (itor != list->end())      {          const LLAccessEntry& entry = (*itor).second; @@ -1191,3 +1212,58 @@ LLParcel::ECategory category_ui_string_to_category(const std::string& s)      // is a distinct option from "None" and "Other"      return LLParcel::C_ANY;  } + +LLAccessEntry::map LLParcel::getExperienceKeysByType( U32 type ) const +{ +	LLAccessEntry::map access; +	LLAccessEntry entry; +	xp_type_map_t::const_iterator it = mExperienceKeys.begin(); +	for(/**/; it != mExperienceKeys.end(); ++it) +	{ +		if(it->second == type) +		{ +			entry.mID = it->first; +			access[entry.mID] = entry; +		} +	} +	return access; +} + +void LLParcel::clearExperienceKeysByType( U32 type ) +{ +	xp_type_map_t::iterator it = mExperienceKeys.begin(); +	while(it != mExperienceKeys.end()) +	{ +		if(it->second == type) +		{ +			mExperienceKeys.erase(it++); +		} +		else +		{ +			++it; +		} +	} +} + +void LLParcel::setExperienceKeyType( const LLUUID& experience_key, U32 type ) +{ +	if(type == EXPERIENCE_KEY_TYPE_NONE) +	{ +		mExperienceKeys.erase(experience_key); +	} +	else +	{ +		if(countExperienceKeyType(type) < PARCEL_MAX_EXPERIENCE_LIST) +		{ +			mExperienceKeys[experience_key] = type; +		} +	} +} + +U32 LLParcel::countExperienceKeyType( U32 type ) +{ +	return std::count_if( +		boost::begin(mExperienceKeys | boost::adaptors::map_values),  +		boost::end(mExperienceKeys | boost::adaptors::map_values),  +		std::bind2nd(std::equal_to<U32>(), type)); +} diff --git a/indra/llinventory/llparcel.h b/indra/llinventory/llparcel.h index c4363a48df..e68331b99a 100755 --- a/indra/llinventory/llparcel.h +++ b/indra/llinventory/llparcel.h @@ -53,6 +53,9 @@ const S32 PARCEL_MAX_ACCESS_LIST = 300;  //for access/ban lists.  const F32 PARCEL_MAX_ENTRIES_PER_PACKET = 48.f; +// Maximum number of experiences +const S32 PARCEL_MAX_EXPERIENCE_LIST = 24; +  // Weekly charge for listing a parcel in the directory  const S32 PARCEL_DIRECTORY_FEE = 30; @@ -130,9 +133,11 @@ class LLSD;  class LLAccessEntry  {  public: + +	typedef std::map<LLUUID,LLAccessEntry> map; +  	LLAccessEntry() -	:	mID(), -		mTime(0), +	:	mTime(0),  		mFlags(0)  	{} @@ -141,8 +146,6 @@ public:  	U32			mFlags;		// Not used - currently should always be zero  }; -typedef std::map<LLUUID,LLAccessEntry>::iterator access_map_iterator; -typedef std::map<LLUUID,LLAccessEntry>::const_iterator access_map_const_iterator;  class LLParcel  { @@ -320,6 +323,9 @@ public:  	void	unpackAccessEntries(LLMessageSystem* msg,  								std::map<LLUUID,LLAccessEntry>* list); +	void	unpackExperienceEntries(LLMessageSystem* msg, U32 type); + +  	void	setAABBMin(const LLVector3& min)	{ mAABBMin = min; }  	void	setAABBMax(const LLVector3& max)	{ mAABBMax = max; } @@ -665,6 +671,17 @@ public:  	std::map<LLUUID,LLAccessEntry>	mTempBanList;  	std::map<LLUUID,LLAccessEntry>	mTempAccessList; +	typedef std::map<LLUUID, U32> xp_type_map_t; + +	void setExperienceKeyType(const LLUUID& experience_key, U32 type); +	U32 countExperienceKeyType(U32 type); +	U32 getExperienceKeyType(const LLUUID& experience_key)const; +	LLAccessEntry::map getExperienceKeysByType(U32 type)const; +	void clearExperienceKeysByType(U32 type); + +private: +	xp_type_map_t mExperienceKeys; +  }; diff --git a/indra/llinventory/llparcelflags.h b/indra/llinventory/llparcelflags.h index b1a917df73..25b27a281a 100755 --- a/indra/llinventory/llparcelflags.h +++ b/indra/llinventory/llparcelflags.h @@ -90,8 +90,10 @@ const U32 PF_DEFAULT =  PF_ALLOW_FLY                          | PF_USE_ESTATE_VOICE_CHAN;  // Access list flags -const U32 AL_ACCESS  = (1 << 0); -const U32 AL_BAN     = (1 << 1); +const U32 AL_ACCESS				= (1 << 0); +const U32 AL_BAN					= (1 << 1); +const U32 AL_ALLOW_EXPERIENCE	= (1 << 3); +const U32 AL_BLOCK_EXPERIENCE	= (1 << 4);  //const U32 AL_RENTER  = (1 << 2);  // Block access return values. BA_ALLOWED is the only success case | 
