Skip to content

Commit 018b169

Browse files
author
Julian
committed
WIP
1 parent d406c87 commit 018b169

File tree

13 files changed

+84
-35
lines changed

13 files changed

+84
-35
lines changed

CMakeLists.txt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,11 @@ SET(CMAKE_CXX_STANDARD 17)
4646
SET(CMAKE_CXX_STANDARD_REQUIRED ON)
4747
SET(CMAKE_INSTALL_LIBRARY_DIR lib)
4848
SET(CMAKE_INSTALL_INCLUDE_DIR include)
49-
49+
if (MSVC)
50+
add_compile_options(/Wall /wd4820)
51+
else()
52+
add_compile_options(-Wall -Wextra -Wpedantic)
53+
endif()
5054
# Add subdirectories
5155
include(CMakeDependentOption)
5256
option(INKCPP_PY "Build python bindings" OFF)

inkcpp/array.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,9 @@ class managed_array : public snapshot_interface
7575

7676
T& back() { return end()[-1]; }
7777

78-
const size_t size() const { return _size; }
78+
size_t size() const { return _size; }
7979

80-
const size_t capacity() const { return _capacity; }
80+
size_t capacity() const { return _capacity; }
8181

8282
T& push()
8383
{
@@ -170,10 +170,10 @@ class managed_array : public snapshot_interface
170170
}
171171

172172
private:
173-
if_t<dynamic, char, T> _static_data[dynamic ? 1 : initialCapacity];
174173
T* _dynamic_data = nullptr;
175174
size_t _capacity;
176175
size_t _size;
176+
if_t<dynamic, char, T> _static_data[dynamic ? 1 : initialCapacity];
177177
};
178178

179179
template<typename T, bool dynamic, size_t initialCapacity>

inkcpp/include/choice.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,16 @@ namespace runtime
7474
);
7575

7676
protected:
77-
int _index = -1; ///< @private
7877
const char* _text = nullptr; ///< @private
79-
uint32_t _path = ~0; ///< @private
80-
thread_t _thread = ~0; ///< @private
8178
const internal::snap_tag* _tags_start = nullptr; ///< @private
8279
const internal::snap_tag* _tags_end = nullptr; ///< @private
80+
uint32_t _path = ~0U; ///< @private
81+
thread_t _thread = ~0U; ///< @private
82+
int _index = -1; ///< @private
83+
#pragma warning(push)
84+
#pragma warning(disable : 4820, justification : "4 byte aligment free on 64-bit systems")
8385
};
86+
87+
#pragma warning(pop)
8488
} // namespace runtime
8589
} // namespace ink

inkcpp/include/list.h

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ class list_interface
5858
const list_interface& _list;
5959
int _i;
6060
bool _one_list_iterator; ///< iterates only though values of one list
61+
#pragma warning(push)
62+
#pragma warning(disable : 4820, justification : "3 byte aligment free on 64-bit systems")
6163
friend list_interface;
6264
#ifdef INK_BUILD_CLIB
6365
friend int ::ink_list_flags(const HInkList*, InkListIter*);
@@ -68,7 +70,7 @@ class list_interface
6870
protected:
6971
/** @private */
7072
iterator(
71-
const char* flag_name, const list_interface& list, size_t i, bool one_list_only = false
73+
const char* flag_name, const list_interface& list, int i, bool one_list_only = false
7274
)
7375
: _flag_name(flag_name)
7476
, _list_name(nullptr)
@@ -115,8 +117,16 @@ class list_interface
115117
* @param itr other iterator
116118
*/
117119
bool operator==(const iterator& itr) const { return itr._i == _i; }
120+
121+
iterator& operator=(const iterator&) = delete;
118122
};
119123

124+
#pragma warning(pop)
125+
126+
virtual ~list_interface() {}
127+
128+
#pragma warning(push)
129+
#pragma warning(disable : 4100, justification : "non functional prototypes do not need the argument.")
120130
/** checks if a flag is contained in the list */
121131
virtual bool contains(const char* flag) const
122132
{
@@ -166,6 +176,8 @@ class list_interface
166176
inkAssert(false, "Not implemented funciton from interface is called!");
167177
};
168178

179+
#pragma warning(pop)
180+
169181
protected:
170182
/** @private */
171183
iterator new_iterator(const char* flag_name, int i, bool one_list_only = false) const
@@ -182,7 +194,10 @@ class list_interface
182194

183195
/** @private */
184196
internal::list_table* _list_table;
185-
/** @private */
186197
int _list;
198+
#pragma warning(push)
199+
#pragma warning(disable : 4820, justification : "4 byte aligment free on 64-bit systems")
187200
};
201+
202+
#pragma warning(pop)
188203
} // namespace ink::runtime

inkcpp/include/story_ptr.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,16 @@ namespace internal
1919
, valid(true)
2020
{
2121
}
22+
static void remove_reference(ref_block*&);
2223

2324
size_t references;
2425
bool valid;
25-
26-
static void remove_reference(ref_block*&);
26+
#pragma warning(push)
27+
#pragma warning(disable : 4820, justification : "3 byte aligment free on 64-bit systems")
2728
};
2829

30+
#pragma warning(pop)
31+
2932
/** @private */
3033
class story_ptr_base
3134
{

inkcpp/include/traits.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ inline size_t c_str_len(const char* c)
162162
const char* i = c;
163163
while (*i != 0)
164164
i++;
165-
return i - c;
165+
return static_cast<size_t>(i - c);
166166
}
167167

168168
MARK_AS_STRING(char*, c_str_len(x), x);

inkcpp/include/types.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ struct value {
5454
Float, ///< containing a float
5555
List ///< containing a @ref list_interface
5656
} type; ///< Label of type currently contained in @ref value
57+
#pragma warning(push)
58+
#pragma warning(disable : 4820, justification : "4 byte aligment free on 64-bit systems")
5759

5860
value()
5961
: v_int32{0}
@@ -126,6 +128,8 @@ struct value {
126128
}
127129
};
128130

131+
#pragma warning(pop)
132+
129133
/** access #value::Type::Bool value */
130134
template<>
131135
inline const auto& value::get<value::Type::Bool>() const

inkcpp/list_table.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ void list_table::gc()
112112
_list_handouts.clear();
113113
}
114114

115-
int list_table::toFid(list_flag e) const { return listBegin(e.list_id) + e.flag; }
115+
size_t list_table::toFid(list_flag e) const { return listBegin(e.list_id) + e.flag; }
116116

117117
size_t list_table::stringLen(const list_flag& e) const { return c_str_len(toString(e)); }
118118

inkcpp/list_table.h

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -28,16 +28,16 @@ class prng;
2828
// memory segments
2929
// @param bits size in bits
3030
// @param size segment size in bytes
31-
constexpr int segmentsFromBits(int bits, int size)
31+
constexpr size_t segmentsFromBits(size_t bits, size_t size)
3232
{
33-
size *= 8;
34-
return bits / size + (bits % size ? 1 : 0);
33+
size *= 8U;
34+
return bits / size + (bits % size ? 1U : 0);
3535
}
3636

3737
/// managed all list entries and list metadata
3838
class list_table : public snapshot_interface
3939
{
40-
using data_t = int;
40+
using data_t = unsigned;
4141
enum class state : char {
4242
unused,
4343
used,
@@ -77,9 +77,9 @@ class list_table : public snapshot_interface
7777
flag.flag = -1;
7878
return flag;
7979
}
80-
for (int i = listBegin(flag.list_id); i < _list_end[flag.list_id]; ++i) {
81-
if (_flag_values[i] == flag.flag) {
82-
flag.flag = i - listBegin(flag.list_id);
80+
for (int i = listBegin(flag.list_id); i < _list_end[static_cast<size_t>(flag.list_id)]; ++i) {
81+
if (_flag_values[static_cast<size_t>(i)] == flag.flag) {
82+
flag.flag = static_cast<int16_t>(i - listBegin(flag.list_id));
8383
return flag;
8484
}
8585
}
@@ -89,7 +89,7 @@ class list_table : public snapshot_interface
8989

9090
int get_flag_value(list_flag flag) const
9191
{
92-
return _flag_values[listBegin(flag.list_id) + flag.flag];
92+
return _flag_values[static_cast<size_t>(listBegin(flag.list_id) + flag.flag)];
9393
}
9494

9595
/// zeros all usage values
@@ -257,9 +257,9 @@ class list_table : public snapshot_interface
257257

258258
private:
259259
void copy_lists(const data_t* src, data_t* dst);
260-
static constexpr int bits_per_data = sizeof(data_t) * 8;
260+
static constexpr size_t bits_per_data = sizeof(data_t) * 8U;
261261

262-
int listBegin(int lid) const { return lid == 0 ? 0 : _list_end[lid - 1]; }
262+
size_t listBegin(int lid) const { return lid == 0 ? 0 : _list_end[static_cast<size_t>(lid - 1)]; }
263263

264264
const data_t* getPtr(int eid) const
265265
{
@@ -273,13 +273,13 @@ class list_table : public snapshot_interface
273273
+ static_cast<std::ptrdiff_t>(_entrySize) * static_cast<std::ptrdiff_t>(eid);
274274
}
275275

276-
int numFlags() const
276+
size_t numFlags() const
277277
{
278278
return _flag_names.size();
279279
// return _list_end.end()[-1]; TODO:
280280
}
281281

282-
int numLists() const { return _list_end.size(); }
282+
size_t numLists() const { return _list_end.size(); }
283283

284284
bool getBit(const data_t* data, int id) const
285285
{
@@ -314,12 +314,12 @@ class list_table : public snapshot_interface
314314
}
315315
}
316316

317-
int toFid(list_flag e) const;
317+
size_t toFid(list_flag e) const;
318318

319319
auto flagStartMask() const
320320
{
321321
struct {
322-
int segment;
322+
size_t segment;
323323
data_t mask;
324324
} res{numLists() / bits_per_data, ~static_cast<data_t>(0) >> (numLists() % bits_per_data)};
325325

@@ -330,18 +330,18 @@ class list_table : public snapshot_interface
330330
using managed_array = managed_array < T,
331331
config<0, abs(config)>;
332332

333-
static constexpr int maxMemorySize
333+
static constexpr long maxMemorySize
334334
= (config::maxListTypes < 0 || config::maxFlags < 0 || config::maxLists < 0 ? -1 : 1)
335-
* segmentsFromBits(abs(config::maxListTypes) + abs(config::maxFlags), sizeof(data_t))
336-
* static_cast<int>(abs(config::maxLists));
335+
* static_cast<long>(segmentsFromBits(abs(config::maxListTypes) + abs(config::maxFlags), sizeof(data_t))
336+
* static_cast<int>(abs(config::maxLists)));
337337

338338
int _entrySize; ///< entry size in data_t
339339
// entries (created lists)
340340
managed_array<data_t, maxMemorySize> _data;
341341
managed_array<state, config::maxLists> _entry_state;
342342

343343
// defined list (meta data)
344-
managed_array<int, config::maxListTypes> _list_end;
344+
managed_array<size_t, config::maxListTypes> _list_end;
345345
managed_array<const char*, config::maxFlags> _flag_names;
346346
managed_array<int, config::maxFlags> _flag_values;
347347
managed_array<const char*, config::maxListTypes> _list_names;
@@ -351,7 +351,7 @@ class list_table : public snapshot_interface
351351
bool _valid;
352352

353353
public:
354-
friend class name_flag_itr;
354+
friend class named_flag_itr;
355355
friend class list_impl;
356356

357357
class named_flag_itr
@@ -364,10 +364,14 @@ class list_table : public snapshot_interface
364364
const char* name;
365365
} _pos;
366366

367+
/** carry list change.
368+
* if the iterator incremented to the next flag, also increment the list if necessary
369+
* @pre _pos.flag.list_id >= 0
370+
*/
367371
void carry()
368372
{
369373
if (_pos.flag.flag
370-
== _list._list_end[_pos.flag.list_id] - _list.listBegin(_pos.flag.list_id)) {
374+
== _list._list_end[static_cast<size_t>(_pos.flag.list_id)] - _list.listBegin(static_cast<size_t>(_pos.flag.list_id))) {
371375
_pos.flag.flag = 0;
372376
++_pos.flag.list_id;
373377
}
@@ -401,6 +405,12 @@ class list_table : public snapshot_interface
401405
}
402406

403407
public:
408+
named_flag_itr(const named_flag_itr& o)
409+
: _list{o._list}
410+
, _data{o._data}
411+
, _pos{o._pos}
412+
{}
413+
named_flag_itr& operator=(const named_flag_itr&) = delete;
404414
bool operator!=(const named_flag_itr& o) const { return _pos.flag != o._pos.flag; }
405415

406416
named_flag_itr(const list_table& list, const data_t* filter)

inkcpp/snapshot_interface.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,14 +53,20 @@ class snapshot_interface
5353
const string_table& strings;
5454
const char* story_string_table;
5555
const snap_tag* runner_tags = nullptr;
56+
snapper() = delete;
57+
snapper& operator=(const snapper&) = delete;
5658
};
5759

5860
struct loader {
5961
managed_array<const char*, true, 5>& string_table; /// FIXME: make configurable
6062
const char* story_string_table;
6163
const snap_tag* runner_tags = nullptr;
64+
loader() = delete;
65+
loader& operator=(const loader&) = delete;
6266
};
6367

68+
#pragma warning(push)
69+
#pragma warning(disable : 4100, justification : "non functional prototypes do not need the argument." )
6470
size_t snap(unsigned char* data, snapper&) const
6571
{
6672
inkFail("Snap function not implemented");
@@ -72,5 +78,6 @@ class snapshot_interface
7278
inkFail("Snap function not implemented");
7379
return nullptr;
7480
};
81+
#pragma warning(pop)
7582
};
7683
} // namespace ink::runtime::internal

0 commit comments

Comments
 (0)