diff --git a/Base/Aliases.hpp b/Base/Aliases.hpp index 30817df..b648b23 100644 --- a/Base/Aliases.hpp +++ b/Base/Aliases.hpp @@ -3,7 +3,7 @@ #pragma once -namespace ProjectA { +namespace USER_NAMESPACE { typedef std::int8_t sint8; typedef std::int16_t sint16; typedef std::int32_t sint32; diff --git a/Base/Base.hpp b/Base/Base.hpp index 863916b..01c9797 100644 --- a/Base/Base.hpp +++ b/Base/Base.hpp @@ -7,6 +7,10 @@ #include #include +#ifndef USER_NAMESPACE + #error "ModuleBase: Please define USER_NAMESPACE with a user namespace name." +#endif + #include "Context.hpp" #include "Macros.hpp" diff --git a/Base/Bit.hpp b/Base/Bit.hpp index 8f322e1..533cff6 100644 --- a/Base/Bit.hpp +++ b/Base/Bit.hpp @@ -6,7 +6,7 @@ // Returns a number with a single set bit at `index`. #define BIT(index) (1 << (index)) -namespace ProjectA { +namespace USER_NAMESPACE { // Returns the minimum number of bits necessary to store `value`. inline uint8 countBits(uint64 value) { uint8 bitCount = 0; diff --git a/Base/Cast.hpp b/Base/Cast.hpp index 127c7c3..c42f5e2 100644 --- a/Base/Cast.hpp +++ b/Base/Cast.hpp @@ -3,7 +3,7 @@ #pragma once -namespace ProjectA { +namespace USER_NAMESPACE { template typename std::enable_if::type>::value, O>::type pointer_cast(I pointer) { return static_cast(static_cast(pointer)); diff --git a/Base/Limits.hpp b/Base/Limits.hpp index 9e28883..1bca7ea 100644 --- a/Base/Limits.hpp +++ b/Base/Limits.hpp @@ -3,7 +3,7 @@ #pragma once -namespace ProjectA { +namespace USER_NAMESPACE { // Returns the minimum value representable by `T`. template constexpr T min() noexcept; diff --git a/Base/Types/base_sequence.hpp b/Base/Types/base_sequence.hpp index 4e8061a..9d43ebe 100644 --- a/Base/Types/base_sequence.hpp +++ b/Base/Types/base_sequence.hpp @@ -3,11 +3,11 @@ #pragma once -namespace ProjectA { +namespace USER_NAMESPACE { // TODO(upgrade): Allocate from arena. template class base_sequence { - private: + protected: static T* allocate(uint64 count) { return new T[count](); } diff --git a/Base/Types/base_view.hpp b/Base/Types/base_view.hpp index cba70ad..0afdbba 100644 --- a/Base/Types/base_view.hpp +++ b/Base/Types/base_view.hpp @@ -3,7 +3,7 @@ #pragma once -namespace ProjectA { +namespace USER_NAMESPACE { template class base_view { public: diff --git a/Base/Types/sequence.hpp b/Base/Types/sequence.hpp index bd9375a..d4f1cc8 100644 --- a/Base/Types/sequence.hpp +++ b/Base/Types/sequence.hpp @@ -6,7 +6,7 @@ #include "Types/base_sequence.hpp" #include "Types/base_view.hpp" -namespace ProjectA { +namespace USER_NAMESPACE { // A container that encapsulates a dynamic size array. // Unlike `std::vector`, `sequence` is not resizeable. // It *should* be used when the number of elements is known at runtime, before creating the sequence. @@ -42,5 +42,14 @@ namespace ProjectA { sequence(const sequence& sequence) : sequence(sequence.begin(), sequence.count()) {} + + void operator=(const sequence& sequence) { + free(_data); + + _count = sequence._count; + _data = allocate(_count + 1); + + copy(sequence.begin(), sequence.end(), _data); + } }; } \ No newline at end of file diff --git a/Base/Types/view.hpp b/Base/Types/view.hpp index 92fccea..f3e9734 100644 --- a/Base/Types/view.hpp +++ b/Base/Types/view.hpp @@ -5,7 +5,7 @@ #include "Types/base_view.hpp" -namespace ProjectA { +namespace USER_NAMESPACE { template class view : public base_view { public: diff --git a/Base/Utilities.hpp b/Base/Utilities.hpp index b4d87b2..d24a491 100644 --- a/Base/Utilities.hpp +++ b/Base/Utilities.hpp @@ -3,7 +3,7 @@ #pragma once -namespace ProjectA { +namespace USER_NAMESPACE { template inline void copy(const T* sourceBegin, const T* sourceEnd, T* destination) { std::copy(sourceBegin, sourceEnd, destination);