a geicko-2 based round robin ranking system designed to test c++ battleship submissions battleship.dunkirk.sh
at main 1.8 kB view raw
1// Copyright (C) 2018 Yasuhiro Matsumoto <mattn.jp@gmail.com>. 2// 3// Use of this source code is governed by an MIT-style 4// license that can be found in the LICENSE file. 5 6#ifdef SQLITE_ENABLE_UNLOCK_NOTIFY 7#include <stdio.h> 8#ifndef USE_LIBSQLITE3 9#include "sqlite3-binding.h" 10#else 11#include <sqlite3.h> 12#endif 13 14extern int unlock_notify_wait(sqlite3 *db); 15 16int 17_sqlite3_step_blocking(sqlite3_stmt *stmt) 18{ 19 int rv; 20 sqlite3* db; 21 22 db = sqlite3_db_handle(stmt); 23 for (;;) { 24 rv = sqlite3_step(stmt); 25 if (rv != SQLITE_LOCKED) { 26 break; 27 } 28 if (sqlite3_extended_errcode(db) != SQLITE_LOCKED_SHAREDCACHE) { 29 break; 30 } 31 rv = unlock_notify_wait(db); 32 if (rv != SQLITE_OK) { 33 break; 34 } 35 sqlite3_reset(stmt); 36 } 37 38 return rv; 39} 40 41int 42_sqlite3_step_row_blocking(sqlite3_stmt* stmt, long long* rowid, long long* changes) 43{ 44 int rv; 45 sqlite3* db; 46 47 db = sqlite3_db_handle(stmt); 48 for (;;) { 49 rv = sqlite3_step(stmt); 50 if (rv!=SQLITE_LOCKED) { 51 break; 52 } 53 if (sqlite3_extended_errcode(db) != SQLITE_LOCKED_SHAREDCACHE) { 54 break; 55 } 56 rv = unlock_notify_wait(db); 57 if (rv != SQLITE_OK) { 58 break; 59 } 60 sqlite3_reset(stmt); 61 } 62 63 *rowid = (long long) sqlite3_last_insert_rowid(db); 64 *changes = (long long) sqlite3_changes(db); 65 return rv; 66} 67 68int 69_sqlite3_prepare_v2_blocking(sqlite3 *db, const char *zSql, int nBytes, sqlite3_stmt **ppStmt, const char **pzTail) 70{ 71 int rv; 72 73 for (;;) { 74 rv = sqlite3_prepare_v2(db, zSql, nBytes, ppStmt, pzTail); 75 if (rv!=SQLITE_LOCKED) { 76 break; 77 } 78 if (sqlite3_extended_errcode(db) != SQLITE_LOCKED_SHAREDCACHE) { 79 break; 80 } 81 rv = unlock_notify_wait(db); 82 if (rv != SQLITE_OK) { 83 break; 84 } 85 } 86 87 return rv; 88} 89#endif