LINUX.ORG.RU

Сообщения ECLIPSE

 

egrep аналог

Изучал производительность разных технологий которые используют регулярные выражения, и остановился на egrep, такую производительность больше не дает никто. Но проблема в том что я ее не могу использовать в проприетарном по так там GNU лицензия. Может кто знает есть ли какие-то аналоги?

 , ,

ECLIPSE
()

Поиск weak_ptr в векторе

Храню weak_ptr в векторе, и хочу искать по нему. Не могу понять почему не компилится данный код:

std::vector<std::weak_ptr<Car>> cars;

std::shared_ptr<Car> lambo = std::make_shared<Car>();
std::weak_ptr<Car> wPtr(lambo);
cars.emplace_back(lambo);

const auto pos = std::find(cars.begin(), cars.end(), [&wPtr](const std::weak_ptr<Car>& ptr1) {
    return ptr1.lock() == wPtr.lock();
});

if (pos != cars.end())
    cout << "Not found!" << endl;

Заранее благодарен за помощь.

 , ,

ECLIPSE
()

cmake и версия продукта

Появилась необходимость каким-то образом получить версию продукта, при сборке проекта используя утилиту cmake.

В проекте версия объявлена вот так:

if(NOT "${BUILD_VERSION}")
    set(BUILD_VERSION 1.0)
endif()

Заранее благодарю за помощь.

 ,

ECLIPSE
()

Алгоритм поиска вируса в скриптовых языках на C/C++

Задача состоит в том чтобы искать строки кода в файлах. То есть у нас есть несколько строк вируса и нужно чтобы все эти строки были найдены в файле и если все они найдены то файл заражен. Очень интересно услышать ваши мнения. Заранее спасибо.

 , ,

ECLIPSE
()

Добавить вектор в вектор с максимальной производительностью

Я создаю вектор в отдельном потоке, после этого мне его надо сохранить вызвав функцию Data::insert(). После сохранения изначальный вектор мне больше не нужен. Как лучше всего это сделать? Заранее спасибо.

template<typename DATA_TYPE>
class Data
{
public:
    Data();

    void insert(vector<DATA_TYPE>& d)
    {
        if (d.empty())
            throw range_error("Data::insert(): Vector is empty!");

        lock_guard<mutex> l(data_mutex_);
        // Add d to the vector data_
    }
private:
    vector<vector<DATA_TYPE>> data_;

    mutex data_mutex_;
};

 , ,

ECLIPSE
()

Перехват системных вызовов в Mac OS

Хотелось бы знать есть ли вообще такая возможность или нет. Нашел вот такую штуку, но увы.

kern_return_t
task_set_emulation(                                                                                                                                                         
    __unused task_t     task,
    __unused vm_offset_t    routine_entry_pt,
    __unused int        routine_number)
{
    return KERN_NOT_SUPPORTED;
}

 , ,

ECLIPSE
()

cmake conditions

Нужна помощь чтобы разобрать следующий код:

IF(BUILD_64_TARGET)
    SET(...)
ELSE(BUILD_64_TARGET)
    SET(...)
ENDIF(BUILD_64_TARGET)

Вызывается часть под ELSE. Не понимаю почему условия под IF и ELSE одинаковые. Благодарен за помощь.

 ,

ECLIPSE
()

Посоветуйте книгу по анализу производительности алгоритмов

Желательно чтобы она была применительно к C++ чтобы быстрее читалась. Хочу систематизировать свои знания в этой сфере. Заранее спасибо.

 ,

ECLIPSE
()

cmake dyld: Library not loaded

Всем привет, начал осваивать cmake. Есть вот такая структура:

➜  helloWorld ls                                                                                                                                                                                                           [18/11/29|11:19AM]
CMakeLists.txt    cmake-build-debug main.cpp          third_parties
➜  helloWorld

➜  helloWorld ls third_parties/say                                                                                                                                                                                         [18/11/29|11:19AM]
compilesaylib.sh libsaylib.dylib  saylib.cpp       saylib.h
➜  helloWorld

CMakeLists.txt выглядит вот так:

cmake_minimum_required(VERSION 3.12)
cmake_policy(SET CMP0015 NEW)
SET(CMAKE_SYSTEM_NAME Darwin)
project (myproject)

include_directories(${CMAKE_SOURCE_DIR}/third_parties/say)

file(GLOB LIBRARIES "third_parties/say/*.dylib")
message("LIBRARIES = ${LIBRARIES}")

add_executable(myproject main.cpp)
target_link_libraries(myproject ${LIBRARIES})

main.cpp:

#include <iostream>
#include "./third_parties/say/saylib.h"

int main() {
    say("Hi there!");
    return 0;
}

Ошибка:

➜  cmake-build-debug ./helloWorld                                                                                                                                                                                          [18/11/29|10:56AM]
dyld: Library not loaded: libsaylib.dylib
  Referenced from: /Users/oleg/CLionProjects/helloWorld/cmake-build-debug/./helloWorld
  Reason: image not found
[1]    17995 abort      ./helloWorld
➜  cmake-build-debug

Сама либа получается без пути и ищется в директории где исполняемый файл.

➜  cmake-build-debug otool -L helloWorld                                                                                                                                                                                   [18/11/29|10:56AM]
helloWorld:
	libsaylib.dylib (compatibility version 0.0.0, current version 0.0.0)
	/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.4)
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.200.5)
➜  cmake-build-debug

Можно ли указать относительный путь к shared library чтобы не копировать либу к исполняемому файлу, а оставить ее там где она лежит сейчас? Заранее спасибо.

 , , ,

ECLIPSE
()

Либа 7z для архиватора и запаковщика на С++

Посоветуйте пожалуйста опенсорсную либу которая написана на C++ и которая умеет работать с rar и zip архивами последней версии, нужно вставить ее в коммерческий продукт. Заранее спасибо.

 , , , ,

ECLIPSE
()

Что нужно знать для написания антивируса под Linux

Хочу понять насколько сложно разработать антивирус под линукс. Буду очень благодарен также за ссылки и статьи, которые могут помочь набраться знаний в данном направлении.

 ,

ECLIPSE
()

Передача параметров по ссылке. Что не так с моей программой?

Есть вот такая программа:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

class no_object : public std::exception
{
protected:
    std::string mMsg;
public:
    no_object(const char* msg) : mMsg(msg) {}
    virtual ~no_object() noexcept override {}
    virtual const char* what() const noexcept override { return mMsg.c_str(); }
};


using namespace std;

class Object {
public:
    Object(const string info) : information(info) { cout << "Object constructor!" << endl; }
    ~Object() { cout << "Object destructor!" << endl; }
    Object(const Object& obj) { information = obj.information; cout << "Copy constructor!" << endl; }
    void setInformation() {  }
    string getInformation() const { return information; }
private:
    string information;
};

class Storage {
public:
    Storage(const size_t width) {
        objs = static_cast<Object*>(malloc(sizeof(Object) * width));

        if (objs == NULL)
            throw std::bad_alloc();

        lastPointer = objs + sizeof (Object) * (width - 1);
    }

    void storeObject(Object& obj, size_t index) {
        if (isIndexOutOfRange(index))
            throw std::out_of_range("Oops, index is out of range!");

        availableIndexes.push_back(index);
        objs[index] = obj;
    }

    Object& getObjectAtIndex(size_t index) const {
        if (isIndexOutOfRange(index))
            throw std::out_of_range("Oops, index is out of range!");

        auto it = find(availableIndexes.begin(), availableIndexes.end(), index);
        if (it == availableIndexes.end())
            throw no_object("Oops, the object for this index is not set!");

        return objs[index];
    }

    ~Storage() {
        free(objs);
    }
private:
    bool isIndexOutOfRange(size_t index) const noexcept {
        Object* indexPointer = objs + sizeof (Object) * index;

        if (indexPointer > lastPointer)
            return true;

        return false;
    }

    vector<size_t> availableIndexes;

    Object* objs;
    Object* lastPointer;
};

int main()
{
    Storage storage(3);
    {
        cout << "1" << endl;
        Object obj = Object("lambo");
        cout << "2" << endl;
        Object& objRef = obj;
        cout << "3" << endl;
        storage.storeObject(objRef, 2);
    }

    cout << "4" << endl;
    Object savedObject = storage.getObjectAtIndex(2);
    cout << "Information from stored object is " << savedObject.getInformation() << endl;

    return 0;
}

Вывод который она выдает:

1
Object constructor!
2
3
Object destructor!
4
Copy constructor!
Information from stored object is lambo
Object destructor!

По ней у меня есть несколько вопросов?

1. Мы в памяти сохранили объект который получили по ссылке перед тем как она вышла из области видимости. При условии что этот объект получаю из памяти, можно ли так делать? Если нет то как это исправить. Только просьба не советовать stl и vector. Я именно хочу разобраться глубоко при работе с памятью.

2. Есть ли какой-то undefined behavior в ее использовании кроме копирования объекта Storage?

Заранее благодарен за ответы и если можете скинуть ссылки где можно прочитать про нечто подобное, а именно использование подобной схемы управления памятью буду очень признателен.

 , , , ,

ECLIPSE
()

Правильное архитектурное решение

Есть вот такая архитектура на моем текущем проетке.

class WebsocketsStream {

};

class Data {

};

class Configuration {

};

class DeviceDataListener {

};

class BaseDeviceListener {
    virtual void receive_data(Data* data) = 0;
    virtual void receive_processed_data(Data* data) = 0;
};

class DataReceiverDevice {
    public:
        void register_data_listener(BaseDeviceListener* data_listener);
};

class DeviceListener;
class Device {
public:
    Device(DataReceiverDevice* dd) : dd_(dd), device_listener_(new DeviceListener(dd)) { dd_->register_data_listener(device_listener) }
    void receive_processed_data(Data* data) {
        for (auto &listener : device_listeners_) {
            listener->receive_processed_data(data);
        }
    }
    void receive_data(Data* data) {
        for (auto &listener : device_listeners_) {
            listener->receive_data(data);
        }
    }

private:
    DataReceiverDevice* dd_;
    DeviceListener* device_listener_;
    std::vector<std::shared_ptr<DeviceDataListener>> device_listeners_;
};

class DeviceListener : public BaseDeviceListener {
public:
    void receive_data(Data* data) { device_->receive_data(data);
    void receive_processed_data(Data* data) { device_->receive_processed_data(data);  
}
    DeviceListener(Device* device) : device_(device) {}
private:
    Device* device_;
};

class OscOutputConfiguration : public Configuration {
    private:
        Device* device_;
};

class LocalFileOutputConfiguration : public Configuration {
    private:
        Device* device_;
};

class WebsocketsOutputConfiguration : public Configuration {
    private:
        Device* device_;
        WebsocketsStream* w_stream;
};

Есть Device класс, который получает данные от DataReceiverDevice с помощью обсервер паттерна у которого есть выходные конфигурации: одна для записи данных в файл, вторая для посылки данных на другой девайс через блютуз.

У класса Device мы регистрируем listener с помощью метода register_data_listener() для DataReceiverDevice и мы оттуда получаем данные вызывая метод receive_data(). Также у девайса есть вектор слушателей который отправляет данные наверх. Когда класс Device получает данные он их отправляет всем листенерам.

Мне понадобилось сделать дополнительную конфигурацию WebsocketsOutputConfiguration чтобы отправлять данные по вебсокетам и принимать уже обработанные данные. Эта конфигурация как входная так и выходная.

И вот сейчас я в раздумьях как мне достучаться до Device объекта из WebsocketsStream, чтобы вызвать его методы о получении данных и соответсвенно обновлять всех listener'ов. Можно передать тот же device_listener_ который у нас есть уже в классе Device ниже по иерархии, он уже содержит ссылку на девайс в себе и можно дернуть скажем новый метод receive_processed_data? Просто каждая конфигурация уже содержит в себе Device объект? Как вы считаете, как сделать это в рамках данной архитектуры более правильно?

 , ,

ECLIPSE
()

boost.asio https/ws url

Возможно ли заюзать https url для того чтобы подключиться к сeрверу websockets используя boost.asio?. Я, в свою очередь, пытаюсь просто добиться от разраба вебсервера урлу типа ws://... . Но он мне говорит что урла https должна работать. Копать ли мне в сорсы буста и смотреть есть ли такая возможность или нет и как ее реализовать или просто настаивать на своем? Заранее спасибо.

 , , ,

ECLIPSE
()

Cпомпилировать boost asio без линковки к -lboost_system

Задача состоит именно в том чтобы использовать boost.asio и не линковать к boost_system. Так как библиотка boost состоит из хидеров то я по идее могу подключив сорсы не делать линковку. Прав ли я? И если да то какие сорсы нужно подключить? Заранее спасибо.

 , , ,

ECLIPSE
()

Передача параметра в другой поток в C++

Мы передаем объект в другой поток. Объект data должен удалиться в методе oops2(). Как возможно чтобы этот объект продолжал существовать в другом потоке?

class Data {
public:
    Data(int val = 0) {}
    int getVal () const { return mVal; }
    void setVal(int val) { mVal = val; }
protected:
    int mVal;
};

void set_val(int& i, Data* data)
{
    data->setVal(i);
}

void print_val(Data* data)
{
    cout << "Data value = " << data->getVal() << endl;
}

struct func2
{
    Data* data;
    func2(Data* data_): data(data_){}

    void operator()()
    {
        printf("Address of func2 data is %p\n", data);
        for (int j=0;j < 1000000;++j)
        {
            print_val(data);
            set_val(j, data);
        }
    }
};

void oops2()
{
    Data* data = new Data(100);
    func2 my_func(data);
    my_thread = std::thread(my_func);
    delete data;
}

int main()
{
    oops2();
    my_thread.join();
    return 0;
}

 ,

ECLIPSE
()

Определить размер доступного места на диске (statvfs)

Есть вот такой вот код:

char* fnPath = "/";
const unsigned int GB = (1024 * 1024) * 1024;
struct statvfs buffer;
int ret = statvfs(fnPath, &buffer);
if (!ret) {
    const double available = (double)(buffer.f_bavail * buffer.f_frsize) / GB;
    printf("Available: %f --> %.0f\n", available, available);
}

Пытаюсь определить размер доступного места на диске. Проверяю на маке и iOS. Не совпадаем с теми значениями что находятся в настройках ос. Получается приблизительно меньше на 3Гб и там и там. Может есть какая-то хитрость?

 , ,

ECLIPSE
()

Отслеживать размер файла при непрерывной записи

Есть непрерывный процесс записи в файл. Файловый дискриптор все время открыт. Необходимо когда файл превысит 800Mb закрыть файл и начать писать в новый. Каким образом это лучше сделать? Думал просто иметь переменную типа long long и при каждой записи добавлять туда количество записанных данных.

 , ,

ECLIPSE
()

Чет залинкать не могу в qt creator'e

➜  ~ ls -la /usr/local/opt/json-c/lib/
total 184
drwxr-xr-x   6 oleg  admin    192 Jun  7  2016 .
drwxr-xr-x  12 oleg  admin    384 Jan  5 15:14 ..
-r--r--r--   1 oleg  admin  37364 Jan  5 15:14 libjson-c.2.dylib
-r--r--r--   1 oleg  admin  50376 Jun  7  2016 libjson-c.a
lrwxr-xr-x   1 oleg  admin     17 Jun  7  2016 libjson-c.dylib -> libjson-c.2.dylib
drwxr-xr-x   3 oleg  admin     96 Jan  5 15:14 pkgconfig
➜  ~

Вот здесь находится либа.

LIBS += -L/usr/local/opt/json-c/ -ljson-c
А вот так линкую. Заранее спасибо.

 ,

ECLIPSE
()

Посоветуйте чем в С++ лучше всего разпарсить строку

Может быть есть какая-то библиотека, хотелось бы иметь аналог nsdictionary. Заранее спасибо.

 ,

ECLIPSE
()

RSS подписка на новые темы