00001 #ifndef SCHEDULER_LA_H
00002 #define SCHEDULER_LA_H
00003
00004 #include "scheduler_common.h"
00005
00025 typedef enum {SCHED_BEST,SCHED_WEIGHTED} SchedOrdering;
00026
00031 typedef int (*filterFunction)(schedPeerID ,schedChunkID );
00032
00037 typedef double (*peerEvaluateFunction)(schedPeerID*);
00038
00043 typedef double (*chunkEvaluateFunction)(schedChunkID*);
00044
00049 typedef double (*pairEvaluateFunction)(struct PeerChunk*);
00050
00054 typedef double (*double2op)(double,double);
00055
00056
00057
00074 void schedSelectPeers(SchedOrdering ordering, schedPeerID *peers, int peers_len, schedChunkID *chunks, int chunks_len,
00075 schedPeerID *selected, int *selected_len,
00076 filterFunction filter,
00077 peerEvaluateFunction peerevaluate);
00078
00086 void schedSelectChunks(SchedOrdering ordering, schedPeerID *peers, int peers_len, schedChunkID *chunks, int chunks_len,
00087 schedChunkID *selected, int *selected_len,
00088 filterFunction filter,
00089 chunkEvaluateFunction chunkevaluate);
00090
00091
00092
00099 void schedSelectPeerFirst(SchedOrdering ordering, schedPeerID *peers, size_t peers_len, schedChunkID *chunks, size_t chunks_len,
00100 struct PeerChunk *selected, size_t *selected_len,
00101 filterFunction filter,
00102 peerEvaluateFunction peerevaluate, chunkEvaluateFunction chunkevaluate);
00103
00104
00105
00112 void schedSelectChunkFirst(SchedOrdering ordering, schedPeerID *peers, size_t peers_len, schedChunkID *chunks, size_t chunks_len,
00113 struct PeerChunk *selected, size_t *selected_len,
00114 filterFunction filter,
00115 peerEvaluateFunction peerevaluate, chunkEvaluateFunction chunkevaluate);
00116
00117
00118
00127 void schedSelectComposed(SchedOrdering ordering, schedPeerID *peers, size_t peers_len, schedChunkID *chunks, size_t chunks_len,
00128 struct PeerChunk *selected, size_t *selected_len,
00129 filterFunction filter,
00130 peerEvaluateFunction peerevaluate, chunkEvaluateFunction chunkevaluate, double2op weightcombine);
00131
00132
00133
00140 void schedSelectHybrid(SchedOrdering ordering, schedPeerID *peers, size_t peers_len, schedChunkID *chunks, size_t chunks_len,
00141 struct PeerChunk *selected, size_t *selected_len,
00142 filterFunction filter,
00143 pairEvaluateFunction pairevaluate);
00144
00145 #endif