Занялся оптимизацией своих функций, нужен совет. - страница 3

 
fxsaber:

Это вряд ли.


это точно, она работает только с массивами чисел, строк. 

 
Alexandr Gavrilin:


это точно, она работает только с массивами чисел, строк. 

Работает
struct STRUCT
{
  int j;
  
  STRUCT( void )
  {
    static int i = 0;
    
    j = i;
    
    i++;
  }
};

void OnStart()
{
  STRUCT Array1[5], Array2[5];

  ArrayCopy(Array1, Array2);
}
Вместо "operator =" напишите конструктор.
 
bool GlobalVariableDel(string name)
     {
      //Print(__FUNCTION__," del count=",ArraySize(m_global));
      if(IsTester)
        {
         int index=TesterFindIndexGlobal(name);
         if(index==-1){
           //Print(__FUNCTION__," no index count=",ArraySize(m_global));
          return false;
         }  

         _global newglobal[];
         int inewsize=0;
         int isize=ArraySize(m_global);

         if(GlobalCopy(newglobal,m_global)>0)
           {

            isize=0;
            ArrayResize(m_global,0); //переформируем структуру

            inewsize=ArraySize(newglobal);


            for(int i=0;i<inewsize;i++)
              {
               if(newglobal[i].name!=name)
                 {
                  
                 // Print(newglobal[i].name," name=",name);
                                    
                  if(ArrayResize(m_global,isize+1)!=-1)
                    {
                     m_global[isize].name=newglobal[i].name;
                     m_global[isize].data=newglobal[i].data;
                     isize++;
                    }
                 }
              
              }
            
            //Print(__FUNCTION__," delete ok count=",ArraySize(m_global)," name=",name);
            return true;
           }

         //Print(__FUNCTION__," no copy array count=",ArraySize(m_global));
         return false;
        }

      return ::GlobalVariableDel(name);
     }

вот если в этой функции функцию копирования GlobalCopy заменить на ArrayCopy то при копировании мне эта функция всегда выдает 0, а должна кол-во скопированных элементов массива.

П‌оэтмоу пришлось везде сделать вместо ArrayCopy свои функции работающие с копированием массив классов и структур. Но после этого непонятное увеличение массива прекратилось, удаление элементов из него заработало.

 

 
Alexandr Gavrilin:

вот если в этой функции функцию копирования GlobalCopy заменить на ArrayCopy то при копировании мне эта функция всегда выдает 0, а должна кол-во скопированных элементов массива.

П‌оэтмоу пришлось везде сделать вместо ArrayCopy свои функции работающие с копированием массив классов и структур. Но после этого непонятное увеличение массива прекратилось, удаление элементов из него заработало.

У Вас операторы присваивания перегружены, о каком копировании может идти речь?! Говорю же, замените операторы на конструкторы. Выше лаконичное доказательство, что ArrayCopy отрабатывает идеально.
 
fxsaber:
У Вас операторы присваивания перегружены, о каком копировании может идти речь?! Говорю же, замените операторы на конструкторы. Выше лаконичное доказательство, что ArrayCopy отрабатывает идеально.

ок. тогда у меня везде где через = работать не будет(
 
Alexandr Gavrilin:

ок. тогда у меня везде где через = работать не будет(
Ну так напишите, чтобы работало!
 

struct STRUCT
{
  int j;
  
  void operator=(STRUCT &s)
  {
    static int i = 0;
    
    j = i;
    
    i++;
  }
};
//---

void OnStart()
{
  STRUCT Array1[5], Array2[5];

  Print(ArrayCopy(Array1, Array2));
}  

попробовал ваш пример вот так записать и проверить виноват ли оператор, работает. 

п‌оэтому там чтото другое происходит, что эта функция не хочет работать у меня.

 
struct _global
  {
   string            name;
   double            data;
  };
Такие структуры не могут копироваться ArrayCopy из-за наличия объекта неизвестного размера. И это правильно.
 
fxsaber:
struct _global
  {
   string            name;
   double            data;
  };
Такие структуры не могут копироваться ArrayCopy из-за наличия объекта неизвестного размера. И это правильно.

ну вот и объяснение почему у меня не копируются классы. Значит то решение которое я сделал сделано правильно,  и arraycopy мне не подходит.
Причина обращения: