RingoFetchContext * RingoFetchContext::findFresh (int context_id, const Array<char> &query_id) { OsLocker locker(_instances_lock); TL_GET(PtrArray<RingoFetchContext>, _instances); int i; for (i = 0; i < _instances.size(); i++) { RingoFetchContext *instance = _instances[i]; if (!instance->fresh) continue; if (instance->context_id != context_id) continue; if (instance->_query_id.memcmp(query_id) != 0) continue; return instance; } return 0; }
void RingoFetchContext::removeByContextID (int id) { OsLocker locker(_instances_lock); TL_GET(PtrArray<RingoFetchContext>, _instances); int i; for (i = _instances.size() - 1; i >= 0; i--) if (_instances[i]->context_id == id) _instances.remove(i); }
RingoFetchContext & RingoFetchContext::get (int id) { OsLocker locker(_instances_lock); TL_GET(PtrArray<RingoFetchContext>, _instances); for (int i = 0; i < _instances.size(); i++) if (_instances[i]->id == id) return *_instances[i]; throw Error("context #%d not found", id); }
BingoContext * BingoContext::existing (int id) { OsLocker locker(_instances_lock); TL_GET(PtrArray<BingoContext>, _instances); for (int i = 0; i < _instances.size(); i++) if (_instances[i]->id == id) return _instances[i]; throw Error("context #%d not found", id); }
BingoContext * BingoContext::_get (int id) { OsLocker locker(_instances_lock); TL_GET(PtrArray<BingoContext>, _instances); for (int i = 0; i < _instances.size(); i++) if (_instances[i]->id == id) return _instances[i]; return 0; }
RingoContext * RingoContext::get (int id) { OsLocker locker(_instances_lock); TL_GET(PtrArray<RingoContext>, _instances); for (int i = 0; i < _instances.size(); i++) if (_instances[i]->_context.id == id) return _instances[i]; BingoContext *bingo_context = BingoContext::get(id); return &_instances.add(new RingoContext(*bingo_context)); }
int RingoContext::next (int k) { int i, next_id = end(); OsLocker locker(_instances_lock); TL_GET(PtrArray<RingoContext>, _instances); for (i = 0; i < _instances.size(); i++) if (_instances[i]->_context.id > k && _instances[i]->_context.id < next_id) next_id = _instances[i]->_context.id; return next_id; }
void RingoFetchContext::remove (int id) { OsLocker locker(_instances_lock); TL_GET(PtrArray<RingoFetchContext>, _instances); int i; for (i = 0; i < _instances.size(); i++) if (_instances[i]->id == id) break; if (i == _instances.size()) throw Error("remove(): context #%d not found", id); _instances.remove(i); }
int RingoContext::begin () { OsLocker locker(_instances_lock); TL_GET(PtrArray<RingoContext>, _instances); if (_instances.size() < 1) return 0; int i, min_id = _instances[0]->_context.id; for (i = 1; i < _instances.size(); i++) if (_instances[i]->_context.id < min_id) min_id = _instances[i]->_context.id; return min_id; }
int RingoContext::end () { OsLocker locker(_instances_lock); TL_GET(PtrArray<RingoContext>, _instances); if (_instances.size() < 1) return 0; int i, max_id = _instances[0]->_context.id; for (i = 1; i < _instances.size(); i++) if (_instances[i]->_context.id > max_id) max_id = _instances[i]->_context.id; return max_id + 1; }
RingoFetchContext & RingoFetchContext::create (RingoOracleContext &context, const Array<char> &query_id) { OsLocker locker(_instances_lock); TL_GET(PtrArray<RingoFetchContext>, _instances); int id = 1; for (int i = 0; i < _instances.size(); i++) if (_instances[i]->id >= id) id = _instances[i]->id + 1; AutoPtr<RingoFetchContext> new_context(new RingoFetchContext(id, context, query_id)); const BingoOracleContext &boc = context.context(); new_context->id = id; _instances.add(new_context.release()); return *_instances.top(); }