Sirikata
|
00001 /* Sirikata Transfer -- Content Transfer management system 00002 * MaxPriorityAggregation.hpp 00003 * 00004 * Copyright (c) 2010, Jeff Terrace 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 /* Created on: Jan 22th, 2010 */ 00033 00034 #ifndef SIRIKATA_MaxPriorityAggregation_HPP__ 00035 #define SIRIKATA_MaxPriorityAggregation_HPP__ 00036 00037 #include "TransferPool.hpp" 00038 00039 namespace Sirikata { 00040 namespace Transfer { 00041 00042 /* 00043 * Just take the highest priority. Stupid aggregation. 00044 */ 00045 class MaxPriorityAggregation : public PriorityAggregationAlgorithm { 00046 00047 public: 00048 00049 virtual Priority aggregate( 00050 const std::vector<Priority>& l) const { 00051 Priority max = (*l.begin()); 00052 for (std::vector<Priority>::const_iterator it = ++(l.begin()); it != l.end(); it++) { 00053 if ((*it) > max) max = *it; 00054 } 00055 return max; 00056 } 00057 00058 //Return an aggregated priority given the list of priorities 00059 virtual Priority aggregate( 00060 const std::map<std::string, TransferRequestPtr > & l) const { 00061 00062 //don't feel like making compare func for max_element so just manual laziness 00063 std::map<std::string, TransferRequestPtr>::const_iterator findMax = l.begin(); 00064 Priority max = findMax->second->getPriority(); 00065 findMax++; 00066 while(findMax != l.end()) { 00067 if(findMax->second->getPriority() > max) { 00068 max = findMax->second->getPriority(); 00069 } 00070 findMax++; 00071 } 00072 00073 return max; 00074 } 00075 00076 virtual Priority aggregate( 00077 const std::vector<TransferRequestPtr>& l) const { 00078 Priority max = (*l.begin())->getPriority(); 00079 for(std::vector<TransferRequestPtr>::const_iterator it = ++(l.begin()); it != l.end(); it++) { 00080 if ((*it)->getPriority() > max) max = (*it)->getPriority(); 00081 } 00082 return max; 00083 } 00084 }; 00085 00086 } 00087 } 00088 00089 #endif