remove __PICONTAINERS_SIMPLE_TYPE__ #44

Merged
peri4 merged 4 commits from experiment into master 2020-10-02 11:22:25 +03:00
Owner

Я тут посмотрел, оставил свои замечания

Я тут посмотрел, оставил свои замечания
andrey reviewed 2020-10-02 10:36:10 +03:00
@@ -142,0 +124,4 @@
//! \relatesalso PIByteArray \brief Byte arrays compare operator
inline bool operator <(const PIByteArray & v0, const PIByteArray & v1) {
if (v0.size() == v1.size()) {
for (uint i = 0; i < v0.size(); ++i)
Author
Owner

надо бы заменить на memcmp

надо бы заменить на memcmp
Owner

по тестам memcmp профита не даёт

по тестам memcmp профита не даёт
andrey marked this conversation as resolved
@@ -142,0 +136,4 @@
inline bool operator ==(PIByteArray & f, PIByteArray & s) {
if (f.size_s() != s.size_s())
return false;
for (int i = 0; i < f.size_s(); ++i)
Author
Owner

надо бы заменить на memcmp

надо бы заменить на memcmp
andrey marked this conversation as resolved
@@ -142,0 +146,4 @@
inline bool operator !=(PIByteArray & f, PIByteArray & s) {
if (f.size_s() != s.size_s())
return true;
for (int i = 0; i < f.size_s(); ++i)
Author
Owner

надо бы заменить на memcmp

надо бы заменить на memcmp
andrey marked this conversation as resolved
@@ -154,0 +166,4 @@
// store operators for basic types
#define PBA_OPERATOR_TO int os = s.size_s(); s.enlarge(sizeof(v)); memcpy(s.data(os), &v, sizeof(v));
Author
Owner

а этот макрос теперь нужен вообще? он же в 1м месте только

а этот макрос теперь нужен вообще? он же в 1м месте только
Owner

в 3

в 3
Author
Owner

у тебя на 3 строки 5 строк описания дефайна, мне это кажется нелогичным, не говоря от том что макросы нужно использовать только по необходимости, коей здесь не видно

у тебя на 3 строки 5 строк описания дефайна, мне это кажется нелогичным, не говоря от том что макросы нужно использовать только по необходимости, коей здесь не видно
@@ -190,1 +259,4 @@
// restore operators for basic types
#define PBA_OPERATOR_FROM memcpy((void*)(&v), s.data(), sizeof(v)); s.remove(0, sizeof(v));
Author
Owner

этот макрос тоже теперь не нужен?

этот макрос тоже теперь не нужен?
Owner

тем более они потом undefine, в чем проблема?

тем более они потом undefine, в чем проблема?
Author
Owner

не читаемый код получается, и к тому же кода больше чем если ты эту строку вставишь в функцию

не читаемый код получается, и к тому же кода больше чем если ты эту строку вставишь в функцию
@@ -221,3 +281,4 @@
template<typename T> inline PIByteArray & operator >>(PIByteArray & s, PIFlags<T> & v) {PBA_OPERATOR_FROM return s;}
//! \relatesalso PIByteArray \brief Restore operator, see \ref PIByteArray_sec1 for details
PIP_EXPORT PIByteArray & operator >>(PIByteArray & s, PIByteArray & v);
Author
Owner

а почему этот оператор не inline, а оператор << inline?

а почему этот оператор не inline, а оператор << inline?
Owner

потому что реализован в cpp, и 20 строк, большой

потому что реализован в cpp, и 20 строк, большой
Author
Owner

оператор « маленький что ли?

оператор « маленький что ли?
peri4 marked this conversation as resolved
@@ -323,1 +446,3 @@
__PIBYTEARRAY_SIMPLE_TYPE__(PIChar)
template<typename T, typename std::enable_if<!std::is_trivially_copyable<T>::value, int>::type = 0>
inline PIByteArray & operator <<(PIByteArray & s, const T & ) {
static_assert(std::is_trivially_copyable<T>::value, "[PIByteArray] Error: using undeclared operator << for complex type!");
Author
Owner

Пихать в static_assert std::is_trivially_copyable::value мне кажется лишним, другой туда не попадёт, наглядней будет static_assert(false) или static_assert(0). Ещё предлагаю в сообщение запихнуть имя типа, а то не понятно на что он сработал.

Пихать в static_assert std::is_trivially_copyable<T>::value мне кажется лишним, другой туда не попадёт, наглядней будет static_assert(false) или static_assert(0). Ещё предлагаю в сообщение запихнуть имя типа, а то не понятно на что он сработал.
Owner

нет, не трогай. с false он для всех типов стреляет ассертом. имя типа как мы получим, это ж компил-тайм?

нет, не трогай. с false он для всех типов стреляет ассертом. имя типа как мы получим, это ж компил-тайм?
Author
Owner

а typeid это разве не компил тайм?

а typeid это разве не компил тайм?
Owner

зачем вообще тип выводить если тебе ошибка дана на место в коде, сходи и посмотри

зачем вообще тип выводить если тебе ошибка дана на место в коде, сходи и посмотри
andrey marked this conversation as resolved
@@ -324,1 +451,4 @@
template<typename T, typename std::enable_if<!std::is_trivially_copyable<T>::value, int>::type = 0>
inline PIByteArray & operator >>(PIByteArray & s, T & ) {
static_assert(std::is_trivially_copyable<T>::value, "[PIByteArray] Error: using undeclared operator >> for complex type!");
Author
Owner

аналогично предыдущему

аналогично предыдущему
@@ -0,0 +47,4 @@
template<typename T>
class __VariantFunctions__: public __VariantFunctionsBase__ {
public:
__VariantFunctionsBase__ * instance() override {static __VariantFunctions__<T> ret; return &ret;}
Author
Owner

тут правильнее во всех функциях использовать final вместо override

тут правильнее во всех функциях использовать final вместо override
Owner

ok

ok
@@ -0,0 +52,4 @@
uint hash() const override {static uint ret = typeName().hash(); return ret;}
void newT(void *& ptr, const void * value) override {ptr = (void*)(new T(*(const T*)value)); /*printf(" * new\n")*/;}
void newNullT(void *& ptr) override {ptr = (void*)(new T());/* printf(" * new null\n")*/;}
void equalT(void *& ptr, const void * value) override {*(T*)ptr = *(const T*)value; /*printf(" * =\n")*/;}
Author
Owner

правильнее назвать функцию assign

правильнее назвать функцию assign
Owner

ok

ok
peri4 was assigned by andrey 2020-10-02 10:38:03 +03:00
andrey self-assigned this 2020-10-02 10:38:05 +03:00
peri4 merged commit 0c83dffe9d into master 2020-10-02 11:22:25 +03:00
peri4 deleted branch experiment 2020-10-02 11:23:40 +03:00
Sign in to join this conversation.