annotate foosdk/sdk/pfc/traits.h @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 #pragma once
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 namespace pfc {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 class traits_default {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 enum {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 realloc_safe = false,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 needs_destructor = true,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 needs_constructor = true,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 constructor_may_fail = true
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 class traits_default_movable {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 enum {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 realloc_safe = true,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 needs_destructor = true,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 needs_constructor = true,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 constructor_may_fail = true
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 class traits_rawobject : public traits_default {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 enum {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 realloc_safe = true,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 needs_destructor = false,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 needs_constructor = false,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 constructor_may_fail = false
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 class traits_vtable {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 enum {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 realloc_safe = true,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 needs_destructor = true,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 needs_constructor = true,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 constructor_may_fail = false
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 template<typename T> class traits_t : public traits_default {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 template<typename traits1,typename traits2>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 class combine_traits {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 enum {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 realloc_safe = (traits1::realloc_safe && traits2::realloc_safe),
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52 needs_destructor = (traits1::needs_destructor || traits2::needs_destructor),
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 needs_constructor = (traits1::needs_constructor || traits2::needs_constructor),
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54 constructor_may_fail = (traits1::constructor_may_fail || traits2::constructor_may_fail),
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58 template<typename type1, typename type2>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 class traits_combined : public combine_traits<traits_t<type1>,traits_t<type2> > {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 template<typename T> class traits_t<T*> : public traits_rawobject {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63 template<> class traits_t<char> : public traits_rawobject {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 template<> class traits_t<unsigned char> : public traits_rawobject {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 template<> class traits_t<signed char> : public traits_rawobject {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66 template<> class traits_t<wchar_t> : public traits_rawobject {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67 template<> class traits_t<short> : public traits_rawobject {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68 template<> class traits_t<unsigned short> : public traits_rawobject {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 template<> class traits_t<int> : public traits_rawobject {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 template<> class traits_t<unsigned int> : public traits_rawobject {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71 template<> class traits_t<long> : public traits_rawobject {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 template<> class traits_t<unsigned long> : public traits_rawobject {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73 template<> class traits_t<long long> : public traits_rawobject {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
74 template<> class traits_t<unsigned long long> : public traits_rawobject {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
75 template<> class traits_t<bool> : public traits_rawobject {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
76
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77 template<> class traits_t<float> : public traits_rawobject {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78 template<> class traits_t<double> : public traits_rawobject {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
79
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
80 template<> class traits_t<GUID> : public traits_rawobject {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
82 template<typename T,t_size p_count>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
83 class traits_t<T[p_count]> : public traits_t<T> {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
84
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
85 }