Kp
44867c637d
Flatten creation of invalid valptridx
...
Constructing valptridx::basic_ptr with a known-invalid magic index does
not require an array. Simplify the static_assert to reject uses of
factory functions with known-invalid magic index values. Fix the two
sites that fail with the stricter static_assert.
2016-11-12 18:10:08 +00:00
Kp
57412a21c9
Return vobjptridx from segiter
...
The segiter code used objptridx because end is signalled by object_none,
and vobjptridx does not allow object_none. However, the compiler
produces better code if segment_object_range_t returns vobjptridx and
future cleanups are easier if iterating objects_in yields vobjptridx
objects. Add a special-case override of the normal checking rules, move
the required checks into segiter, and then let segiter break the rules
normally enforced by valptridx. Add a comment explaining that this
permits unsafe coding and should be done only with a clear understanding
of the responsibilities it brings.
2016-10-29 23:16:18 +00:00
Kp
aaca04ba1f
Simplify valptridx array access restrictions
2016-10-15 00:53:18 +00:00
Kp
608467161b
Remove obsolete arguments from DEFINE_VALPTRIDX_SUBTYPE
2016-04-06 03:34:13 +00:00
Kp
443b1f2915
Add file/line to valptridx output when available
2016-04-06 03:34:13 +00:00
Kp
5b3a36e6b8
Remove valptridx operator-(P *, A &)
2016-04-06 03:34:13 +00:00
Kp
553b313099
Use vwallptr
2016-02-12 04:02:28 +00:00
Kp
e6d5b6f041
Move valptridx get_count/set_count to untyped base
2016-02-10 03:58:05 +00:00
Kp
1f9e69b0b7
Replace highest_valid(V,offset) with partial_range
2016-02-06 22:12:55 +00:00
Kp
ec025d4e88
Pass common highest_valid to vptr factory
2016-02-06 22:12:54 +00:00
Kp
a3ae630829
Remove default argument for basic_ptridx(index)
2016-01-09 16:38:14 +00:00
Kp
0be0475309
Move valptridx array highest to base class
2016-01-09 16:38:14 +00:00
Kp
6489c64598
Use type_traits to manage valptridx const
2016-01-09 16:38:13 +00:00
Kp
98f5afa9f8
Remove default argument for basic_ptr(pointer,array &)
2016-01-09 16:38:13 +00:00
Kp
d17b12da31
Remove default argument for basic_ptr(index,array &)
2016-01-09 16:38:12 +00:00
Kp
1cef946a90
Remove default argument for basic_idx(index,array &)
2016-01-09 16:38:12 +00:00
Kp
f48eddeece
Block direct changes to Highest_object_index
...
Route updates through helper functions.
2016-01-09 16:38:12 +00:00
Kp
e8c34be843
Use v*ptr* factories with highest_valid
2015-12-22 04:18:51 +00:00
Kp
d479819931
Use absolute_sibling to reduce global references for ptridx
2015-12-22 04:18:51 +00:00
Kp
af8876efe1
Make array optional for valptridx check_index_range
2015-12-22 04:18:50 +00:00
Kp
45f1a71420
Move valptridx get_global_array to DXX_VALPTRIDX_DECLARE_GLOBAL_SUBTYPE
...
This removes the need to repeat the array name when invoking
DEFINE_VALPTRIDX_SUBTYPE.
2015-12-08 04:20:24 +00:00
Kp
db77622f0e
Move array_size into valptridx_specialized_types
2015-11-26 02:56:55 +00:00
Kp
82d0c2ed96
Make some implicit uses of ptridx construction explicit
2015-11-19 03:23:34 +00:00
Kp
8997ec557d
Simplify valptridx get_global_array definition
2015-11-14 18:17:21 +00:00
Kp
5f29170702
Move valptridx error reporting out of main header
2015-10-13 02:43:25 +00:00
Kp
9bd5c492aa
Move valptridx size call out of line
2015-10-13 02:43:24 +00:00
Kp
dd0f5cb83f
Move fwdvalptridx.h -> fwd-valptridx.h for consistency
2015-10-09 02:46:11 +00:00
Kp
76b94de1de
Add commented out hook for warning on valptridx exceptions
2015-09-26 21:17:12 +00:00
Kp
2f927c68f9
Improve support for using exact_type with valptridx
2015-09-15 02:48:04 +00:00
Kp
fb5ae4e0bc
Fix various header freestanding issues
2015-09-09 03:27:52 +00:00
Kp
9ca2bc20c6
Use DXX_CONSTANT_TRUE for valptridx static checks
2015-08-22 20:43:04 +00:00
Kp
2833e81ab4
Disallow copying vptr factories
2015-08-22 20:43:04 +00:00
Kp
e6fab164ae
Remove valptridx internal use of operator-(ptr,array)
2015-08-22 20:43:04 +00:00
Kp
2155c417cb
Move array_managed_type into valptridx<T>
2015-08-22 20:43:04 +00:00
Kp
a126f72bef
Remove array for basic_ptr(basic_ptr<rpolicy>,array)
2015-08-22 20:43:04 +00:00
Kp
fcfd3d7e54
Cast valptridx size_t to unsigned long for Windows
...
Windows has `typedef unsigned size_t`, so %lu triggers a format warning
for Windows targets.
Reported-by: Mako88 <https://github.com/dxx-rebirth/dxx-rebirth/issues/116 >
2015-08-19 02:42:49 +00:00
Kp
0a3de25d7a
Flatten valptridx ptr/idx further
...
Use a dummy template parameter to prevent slicing, instead of an extra
class in the inheritance chain. This improves the generated code
slightly.
2015-08-07 03:13:51 +00:00
Kp
3458454f7e
Flatten valptridx hierarchy
2015-08-06 02:57:59 +00:00
Kp
b3d1c6efaa
Use helper for valptridx array size checks
2015-08-06 02:57:58 +00:00
Kp
eb5fcb34e6
Remove default argument for basic_ptr(reference,array)
2015-07-29 03:05:28 +00:00
Kp
e0e1b28c72
Remove default argument for basic_ptr(reference,index,array)
2015-07-29 03:05:28 +00:00
Kp
84bd64a14c
Remove default argument for basic_ptridx(magic,array)
2015-07-29 03:05:28 +00:00
Kp
ba38214bab
Remove default argument for basic_ptridx(pointer,index,array)
2015-07-29 03:05:28 +00:00
Kp
b7838318b1
Fix valptridx for -fno-inline
2015-07-25 23:10:46 +00:00
Kp
1c5399427a
Work around clang name lookup bug #13983
...
clang searches scopes in the wrong order, causing strange failures when
an inner template has a parameter with the same name as a type in an
outer scope.
clang bug report: <https://llvm.org/bugs/show_bug.cgi?id=13983 >
2015-07-13 01:09:37 +00:00
Kp
6c94416a90
Pass array from ptridx factory
2015-07-13 01:09:37 +00:00
Kp
fa8dcc9113
Explicitly delete basic_ptridx(pointer_type); require array
...
Require the array argument for basic_ptridx, which is supplied
automatically when the factory is used.
2015-07-13 01:09:37 +00:00
Kp
ff5bb37c5c
Combine basic_ptr_global_factory, basic_vptridx_global_factory
2015-07-13 01:09:36 +00:00
Kp
73fdd59225
Require exact type for valptridx factory
2015-07-13 01:09:36 +00:00
Kp
8b7c5c3e2b
Rewrite valptridx
...
Move decisions out to policy classes. Provide trivial copy
construction/assignment. Simplify checking for unsafe conversions.
2015-07-09 03:12:45 +00:00
Kp
286753d210
Fix valptridx operator& definition
2015-06-13 22:42:15 +00:00
Kp
fcaacaebde
Factor out valptridx test for *_none
2015-06-13 22:42:15 +00:00
Kp
f92e890f50
Improve valptridx exception reporting
2015-05-09 17:39:02 +00:00
Kp
ae8ee3651a
Enable vcvalptr(P*)
2015-05-09 17:38:58 +00:00
Kp
534fe7a160
Refactor valptr range checks
2015-04-18 01:21:54 +00:00
Kp
f17458d353
Explicitly delete valptridx inequality operators
2015-02-14 22:48:30 +00:00
Kp
81d763476e
Raise index_range_exception on bad index to valptridx
2015-01-17 04:31:17 +00:00
Kp
3f84b8e165
Move valptridx checks inline
2014-12-20 04:36:10 +00:00
Kp
3423d94729
Disallow converting valptridx to void*
2014-12-14 05:23:00 +00:00
Kp
8b3d9b9d31
Bypass NULL check copying valptr_t
2014-12-02 04:36:19 +00:00
Kp
690dec3342
Workaround compilers mishandling template-template arguments
...
Visual Studio 2013 Update 4 and Clang 3.4 fail to parse
valptridx_template_t related argument lists because they misinterpret
the unspecialized inner template name as a reference to the current
specialization. This seems to be nonconforming in C++11.
All gcc versions supported by Rebirth parse this sample program
correctly, but neither Visual Studio nor clang accept it.
template <template <typename> class>
struct A
{
};
template <typename>
struct B
{
B(A<B>);
};
In <https://stackoverflow.com/questions/17687459/clang-not-accepting-use-of-template-template-parameter-when-using-crtp >, a user saw a similar failure and received the answer:
Your code is legal.
From the C++11 Standard, section 14.6.1:
Like normal (non-template) classes, class templates have an injected-class-name (Clause 9). The injected-class-name can be used as a template-name or a type-name. When it is used with a template-argument-list, as a template-argument for a template template-parameter, or as the final identifier in the elaborated-type- specifier of a friend class template declaration, it refers to the class template itself.
Looks like your version of clang is still implementing the old rule.
This failure was first seen with Visual Studio 2013, but ignored because
Visual Studio has so many other problems parsing Rebirth. Now that it
has been reported to affect clang as well, a workaround is clearly
needed. A fix was suggested by btb
<2f9543f981
>,
but that fix breaks gcc.
Rewrite the valptridx_template_t parameter passing to avoid mentioning
unspecialized template names as template parameters while defining the
class used as the parameter.
Reported by btb (clang): https://github.com/dxx-rebirth/dxx-rebirth/pull/12
2014-11-30 23:44:52 +00:00
Kp
5f38c85e02
Improve compiler error messages on failed const T* -> T* conversions
2014-11-27 03:25:21 +00:00
Kp
327fe23586
Fix -Wnarrowing in valptridx operator-
2014-11-26 03:00:58 +00:00
Kp
388dfb98a0
Move valptridx helpers out of macro
2014-11-25 04:02:01 +00:00
Kp
d0090225b3
Fix segment_first/object_first mismatch
2014-11-23 21:41:30 +00:00
Kp
d63be88eb0
Propagate use of vsegptridx_t
2014-11-23 04:58:45 +00:00
Kp
53aa70cecb
Use vsegptridx_t
2014-10-28 03:08:51 +00:00
Kp
039bf2f0b7
Fix crash on failure to create afterburner blob
...
Fix crash on failure to recreate thief.
2014-09-13 22:01:17 +00:00
Kp
41bb341777
Split valptridx_t into pieces
2014-09-12 03:22:34 +00:00
Kp
b95759aecc
Propagate use of objptridx
2014-08-23 23:53:56 +00:00
Kp
f5a85b0f65
Enable converting vvalptridx->valptridx for subtypes
2014-08-17 22:09:32 +00:00
Kp
3ea6b0eb18
Explicitly delete nullptr construction of valptridx
2014-08-17 20:41:59 +00:00
Kp
66cb80c343
Propagate use of objptridx
2014-08-17 20:31:18 +00:00
Kp
56557a0443
Explicitly delete vvalptridx(valptridx&&)
2014-08-17 19:32:16 +00:00
Kp
55063abade
Use static_assert to reject invalid vvalptridx_t constants
2014-08-13 22:10:20 +00:00
Kp
915b78b5e1
Add vvalptridx_t for always-valid valptridx values
2014-08-13 03:19:12 +00:00
Kp
903258f54b
Make valptridx constructors ready for constexpr
...
Wait on constexpr marking since array in <gcc-4.8 is not constexpr.
2014-08-09 17:38:45 +00:00
Kp
d667772b21
Move valptridx operator- into DEFINE_VALPTRIDX_SUBTYPE
2014-08-02 00:46:56 +00:00
Kp
9c6cc3b3c9
Allow constructing valptridx_t(index_type) from ~0
2014-08-01 03:34:08 +00:00
Kp
0fc376d92a
Simplify DXX_VALPTRIDX_STATIC_CHECK
2014-08-01 03:34:08 +00:00
Kp
082bb43ede
Fold valptridx_t features into template
2014-07-13 03:43:32 +00:00
Kp
229dbe1b47
Add runtime exception reporting to valptridx
2014-07-05 22:00:08 +00:00
zico
ad7cb106bc
Changed custom D1X license to GPLv3
2014-06-01 19:55:23 +02:00
Kp
a2427f58b5
Use special type to reduce pointer/index conversions
2014-01-12 19:32:12 +00:00
Kp
d246005c7e
Move object_create_explosion_sub pointer into loop
2014-01-12 00:33:08 +00:00
Kp
aac0ab26d7
Refactor _DEFINE_VALPTRIDX_SUBTYPE_USERTYPES
2014-01-11 18:20:33 +00:00
Kp
07a23cbaf2
Detect always-invalid valptridx indexes
2014-01-10 03:58:03 +00:00
Kp
f1a6757693
Use objptridx_t for obj_create
2014-01-10 03:20:11 +00:00
Kp
a748065fe5
Explicitly delete valptridx subtype default constructors
2014-01-06 04:17:57 +00:00
Kp
8218af34b5
Add special type to let obj_*link take either pointer or index
2014-01-03 04:04:04 +00:00