Sirikata
space/src/caches/Complete_Cache.hpp
Go to the documentation of this file.
00001 /*  Sirikata
00002  *  Complete_Cache.hpp
00003  *
00004  *  Copyright (c) 2010, Behram Mistree
00005  *  All rights reserved.
00006  *
00007  *  Redistribution and use in source and binary forms, with or without
00008  *  modification, are permitted provided that the following conditions are
00009  *  met:
00010  *  * Redistributions of source code must retain the above copyright
00011  *    notice, this list of conditions and the following disclaimer.
00012  *  * Redistributions in binary form must reproduce the above copyright
00013  *    notice, this list of conditions and the following disclaimer in
00014  *    the documentation and/or other materials provided with the
00015  *    distribution.
00016  *  * Neither the name of Sirikata nor the names of its contributors may
00017  *    be used to endorse or promote products derived from this software
00018  *    without specific prior written permission.
00019  *
00020  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
00021  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
00022  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
00023  * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
00024  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00025  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00026  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00027  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00028  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00029  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00030  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00031  */
00032 
00033 #include <map>
00034 #include <functional>
00035 #include <vector>
00036 #include <list>
00037 #include "Cache.hpp"
00038 #include "Utility.hpp"
00039 #include <string>
00040 #include "CacheRecords.hpp"
00041 #include <float.h>
00042 
00043 
00044 #ifndef __COMPLETE_CACHE_HPP__
00045 #define __COMPLETE_CACHE_HPP__
00046 
00047 namespace Sirikata
00048 {
00049 
00050   typedef double (*CompleteCacheScoreFunc) (const FCacheRecord* a);
00051   typedef double (*CompleteCacheScoreFuncPrint) (const FCacheRecord* a,bool toPrint);
00052 
00053 
00054   class Complete_Cache : public Cache
00055   {
00056   private:
00057     typedef std::map<UUID,FCacheRecord*> IDRecordMap;
00058     IDRecordMap idRecMap;
00059 
00060     typedef std::multimap<double,FCacheRecord*> TimeRecordMap;
00061     TimeRecordMap timeRecMap;
00062 
00063     void maintain();
00064 
00065 
00066     double ewmaPopPar;
00067     std::string mName;
00068     int mMaxSize;
00069 
00070     CompleteCacheScoreFunc mScoreFunc;
00071     CompleteCacheScoreFuncPrint mScoreFuncPrint;
00072     SpaceContext* ctx;
00073     CacheTimeMS mPrevTime;
00074 
00075     float mInsideRadiusInsert;
00076 
00077     void checkUpdate();
00078 
00079 
00080   public:
00081     OSegEntry mCraqEntry;
00082     Complete_Cache(double avgPopPar,std::string complete_name, CompleteCacheScoreFunc ccScorer,CompleteCacheScoreFuncPrint ccScorerPrint, SpaceContext* spctx, float insideRadiusInsert= FLT_MAX);
00083     Complete_Cache(double avgPopPar,std::string complete_name,CompleteCacheScoreFunc ccScorer,CompleteCacheScoreFuncPrint ccScorerPrint,SpaceContext* spctx,int complete_size, float insideRadiusInsert = FLT_MAX);
00084 
00085     virtual ~Complete_Cache();
00086 
00087     //    void insert(UUID toInsert, ServerID bid, CacheTimeMS tms, double vMag);
00088     virtual void insert(const UUID& toInsert, ServerID bid, CacheTimeMS tms, double vMag, double weight, double distance, double radius,double lookupWeight,double scaler);
00089 
00090     virtual const OSegEntry& lookup (const UUID& lookingFor);
00091     ServerID lookup_dynamic(UUID uuid);
00092     virtual std::string getCacheName();
00093     virtual void remove(const UUID& oid);
00094 
00095     void printAll();
00096 
00097   };
00098 
00099 }
00100 #endif