a geicko-2 based round robin ranking system designed to test c++ battleship submissions
battleship.dunkirk.sh
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