Mercurial > hg > Members > kono > Cerium
view TaskManager/kernel/ppe/MailManager.cc @ 648:f1e10ba45d28
Mail modification. Working on Mac OS X.
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 21 Nov 2009 20:14:45 +0900 |
parents | 7c9ded1ea750 |
children | 55f898a58748 |
line wrap: on
line source
#include <stdlib.h> #include "MailManager.h" void MailManager::calc_mask(unsigned int qsize) { mask = 1; while((qsize>>= 1)>0) { mask <<= 1; } size = mask; mask--; } MailManager::MailManager(unsigned int qsize) { calc_mask(qsize); queue = New(memaddr,size); } MailManager::~MailManager() { free(queue); } int MailManager::count() { return (write+size-read)&mask; } void MailManager::send(memaddr data) { queue[write++] = data; if (write==read) { calc_mask(size*2); memaddr *newq = New(memaddr,size); int i; while(count()>0) { newq[i++] = recv(); } read = 0; write = i; free(queue); queue = newq; } write &= mask; } memaddr MailManager::recv() { memaddr data; if (count()>0) { data = queue[read++]; read &= mask; } else { data = 0; } return data; } /* end */