Я не уверен на 100%, что я понял ваши потребности, но обеспечение сброса пароля и тайм-аута в функции сброса может быть выполнено путем рефакторинга связанного кода с приведенным ниже. Это может быть одним из способов ...
// КАК ЕСТЬ
// Clear passkey and timeout
$this->request->data['passkey'] = null;
$this->request->data['timeout'] = null;
$user = $this->Users->patchEntity($user, $this->request->data);
if ($this->Users->save($user)) {
…
// ЭТОМУ
$user = $this->Users->patchEntity($user, $this->request->getData());
// Clear passkey and timeout
$user->passkey = null;
$user->timeout = null;
if ($this->Users->save($user)) {
…
Используйте sizeof (float) * filter_len
, если вы не работаете в какая-то странная реализация, где sizeof (float) == sizeof (char)
.
memset(delay_line, 0, sizeof(float) * filter_len);
Edit: как Stephan202 указывает в комментариях, 0.0 - это особенно простое значение с плавающей запятой для кодирования для memset, поскольку стандартное представление IEEE для 0.0 - это все нулевые биты.
memset работает в области памяти, а не в области чисел. Второй параметр, объявленный как int, приводится к беззнаковому char. Если ваша реализация C ++ использует четыре байта на число с плавающей запятой, выполняются следующие отношения:
Так что ноль - это особый случай.
Если это кажется странным, вспомните, что memset объявлен в
Как Милан Бабушков указывает в комментариях, есть функция bzero (нестандартная и устаревшая), доступная на данный момент на Mac и Linux, но не Microsoft, которая, поскольку она специально предназначена для обнуления памяти, безопасно пропускает несколько инструкций.
используйте
#include <algorithm>
...
std::fill_n( delay_line, filer_len, 0 )
Элементы динамически выделяемого массива могут быть инициализированы значением по умолчанию для типа элемента, следуя за размером массива пустой парой скобок:
float* delay_line = new float[filter_len]();
Теперь, когда мы находимся, еще лучше было бы использовать класс vector
.
std::vector< float > delay_line( filter_len, 0.0 );
Используйте std :: vector вместо:
std::vector<float> delay_line( filter_len );
Вектор будет инициализирован нулем.
Другой вариант - использовать calloc для выделения и обнуления в в то же время:
float *delay_line = (float *)calloc(sizeof(float), filter_len);
Преимущество здесь в том, что, в зависимости от вашей реализации malloc, можно избежать обнуления массива, если известно, что он выделяется из памяти, которая уже обнулена (как это часто бывает с страницами, выделенными из операционной системы)
Помните, что для такого массива вы должны использовать free (), а не delete [].
Какой наиболее эффективный способ
memset может быть немного быстрее, НО КТО ЗАБОТИТСЯ!?!? Микрооптимизация до этого уровня - пустая трата времени, если только вы не программируете калькулятор, и, вероятно, даже тогда.
Я думаю, что метод memset более понятен, НО я думаю, вам действительно стоит проверить свой человек- страниц для memset ... Я был бы удивлен, если бы ваша версия стандартных библиотек имела функцию memset, которая принимает float в качестве второго аргумента.
PS: Битовый шаблон, представляющий ноль, такой же для как целые числа, так и числа с плавающей запятой ... это намеренно, а не просто удача.
Удачи; -)
Ура. Кит.