crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Реализация анализатора (парсера) формул времени выполнения
AntonTatu
  опции профиля:
сообщение 4.3.2009, 17:56
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 48
Регистрация: 27.11.2008
Пользователь №: 437

Спасибо сказали: 0 раз(а)




Репутация:   0  


Всем привет !

Вопрос в следующем, имеется прога которая генерирует некоторую формулу (формула меняет количество своих параметров в зависимости от исходных значений в программе ), в этой же проге есть массив который использует полученную формулу в дальнейших расчетах, хочется создать из формулы dll ку и потом ее вызывать в нужном месте программы, как это сделать? С вызовом полученной dll я вроде бы разобрался, а вот как научить прогу генерить dll ку понять не могу.

ЗЫ: Какие можно использовать компилятор/линковщик (минимум занимаемого места, требуемых для работы файлов, потдержка STL требуется)

Выручайте ! :) Спасибо !
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
BRE
  опции профиля:
сообщение 6.3.2009, 9:29
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Пример:

array2d.h
#ifndef __ARRAY2D
#define __ARRAY2D

#include <QObject>
#include <vector>

class Array2D : public QObject
{
        Q_OBJECT
public:
        Array2D( int dx, int dy );

public Q_SLOTS:
        char    at( int i, int j ) const;
        void    set( int i, int j, char val );

        inline  int             dx() const { return m_dx; }
        inline  int             dy() const { return m_dy; }

private:
        int             m_dx;
        int             m_dy;
        std::vector< std::vector<char> > *m_data;
};

#endif


array2d.cpp
#include "array2d.h"

Array2D::Array2D( int dx, int dy )
        : m_dx( dx ), m_dy( dy )
{
        m_data = new std::vector< std::vector<char> >( m_dx );
        for( int i = 0; i < m_dx; ++i )
                (*m_data)[ i ] = std::vector<char>( m_dy );
}

char Array2D::at( int i, int j ) const
{
        Q_ASSERT( i > 0 && i < m_dx );
        Q_ASSERT( j > 0 && j < m_dy );
        return (*m_data)[ i ][ j ];
}

void Array2D::set( int i, int j, char val )
{
        Q_ASSERT( i > 0 && i < m_dx );
        Q_ASSERT( j > 0 && j < m_dy );
        (*m_data)[ i ][ j ] = val;
}


main.cpp
#include <QApplication>         
#include <QScriptEngine>        
#include <QDebug>
#include "array2d.h"

const int arrDx = 5;
const int arrDy = 5;

void dump( const Array2D &arr )
{
        for( int i = 0; i < arr.dx(); ++i )
                for( int j = 0; j < arr.dy(); ++j )
                        qDebug( "item [%i, %i] = %i", i, j, arr.at( i, j ) );
}

int main( int argc, char *argv[] )
{
        QApplication app( argc, argv );

        Array2D arr( arrDx, arrDy );

        for( int i = 0; i < arr.dx(); ++i )
                for( int j = 0; j < arr.dy(); ++j )
                        arr.set( i, j, i + j );

        dump( arr );

        QScriptEngine se;
        se.globalObject().setProperty( "arr", se.newQObject( &arr ) );

        QScriptValue fun = se.evaluate( "function( i, j ) { print( i, j ); return arr.at( i, j ); }" );
        QScriptValueList args;
        args << QScriptValue( &se, 1 ) << QScriptValue( &se, 4 );
        QScriptValue y = fun.call( QScriptValue(), args );
        qDebug() << y.toNumber();

        return 0;
}


Высокой скорости вычисления от скриптов ожидать не стоит (от нативной она будет сильно отличаться).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 6.3.2009, 10:03
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(BRE @ 6.3.2009, 9:29) *
Пример:

array2d.h
#ifndef __ARRAY2D
#define __ARRAY2D

#include <QObject>
#include <vector>

class Array2D : public QObject
{
        Q_OBJECT
public:
        Array2D( int dx, int dy );
                ~Array2D();

public Q_SLOTS:
        char    at( int i, int j ) const;
        void    set( int i, int j, char val );

        inline  int             dx() const { return m_dx; }
        inline  int             dy() const { return m_dy; }

private:
        int             m_dx;
        int             m_dy;
        std::vector< std::vector<char> > *m_data;
};

#endif


array2d.cpp
#include "array2d.h"

Array2D::Array2D( int dx, int dy )
        : m_dx( dx ), m_dy( dy )
{
        m_data = new std::vector< std::vector<char> >( m_dx );
        for( int i = 0; i < m_dx; ++i )
                (*m_data)[ i ] = std::vector<char>( m_dy );
}

Array2D::~Array2D()
{
                delete m_data;
}

char Array2D::at( int i, int j ) const
{
        Q_ASSERT( i > 0 && i < m_dx );
        Q_ASSERT( j > 0 && j < m_dy );
        return (*m_data)[ i ][ j ];
}

void Array2D::set( int i, int j, char val )
{
        Q_ASSERT( i > 0 && i < m_dx );
        Q_ASSERT( j > 0 && j < m_dy );
        (*m_data)[ i ][ j ] = val;
}


main.cpp
#include <QApplication>         
#include <QScriptEngine>        
#include <QDebug>
#include "array2d.h"

const int arrDx = 5;
const int arrDy = 5;

void dump( const Array2D &arr )
{
        for( int i = 0; i < arr.dx(); ++i )
                for( int j = 0; j < arr.dy(); ++j )
                        qDebug( "item [%i, %i] = %i", i, j, arr.at( i, j ) );
}

int main( int argc, char *argv[] )
{
        QApplication app( argc, argv );

        Array2D arr( arrDx, arrDy );

        for( int i = 0; i < arr.dx(); ++i )
                for( int j = 0; j < arr.dy(); ++j )
                        arr.set( i, j, i + j );

        dump( arr );

        QScriptEngine se;
        se.globalObject().setProperty( "arr", se.newQObject( &arr ) );

        QScriptValue fun = se.evaluate( "function( i, j ) { print( i, j ); return arr.at( i, j ); }" );
        QScriptValueList args;
        args << QScriptValue( &se, 1 ) << QScriptValue( &se, 4 );
        QScriptValue y = fun.call( QScriptValue(), args );
        qDebug() << y.toNumber();

        return 0;
}


Высокой скорости вычисления от скриптов ожидать не стоит (от нативной она будет сильно отличаться).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- AntonTatu   Реализация анализатора (парсера) формул времени выполнения   4.3.2009, 17:56
- - kuler   если в студии, то там всего лишь надо указать тип ...   4.3.2009, 18:13
- - Litkevich Yuriy   Цитата(AntonTatu @ 4.3.2009, 20:56) а вот...   4.3.2009, 18:24
- - SABROG   Можно таскать вместе с программой MinGW Зачем ...   4.3.2009, 18:26
- - ViGOur   SABROG, думаю твой пост не к месту. Просто есть ...   4.3.2009, 18:31
|- - SABROG   Цитата(ViGOur @ 4.3.2009, 18:31) SABROG, ...   4.3.2009, 18:42
|- - AntonTatu   Цитата(ViGOur @ 4.3.2009, 18:31) Человеку...   4.3.2009, 20:25
|- - trdm   Цитата(AntonTatu @ 4.3.2009, 20:25) Попро...   4.3.2009, 21:32
||- - AntonTatu   [/quote] QtScript - для того, чтобы скрипты ИСПОЛН...   4.3.2009, 21:55
||- - trdm   Цитата(AntonTatu @ 4.3.2009, 21:55) Цитат...   4.3.2009, 23:10
||- - AntonTatu   Цитатанормальное замечание. не знаю. если верить ...   4.3.2009, 23:42
|- - trdm   Цитата(AntonTatu @ 4.3.2009, 20:25) PS: Ф...   5.3.2009, 9:54
- - trdm   А я вообще не врубился в "генерирует формулу...   4.3.2009, 19:38
- - Admin   SABROG, перечитал твое сообщение, и решил извинить...   4.3.2009, 20:32
- - Litkevich Yuriy   AntonTatu, а QtScript тебе для этих целей тоже не ...   4.3.2009, 20:40
|- - AntonTatu   Цитата(Litkevich Yuriy @ 4.3.2009, 20:40)...   4.3.2009, 21:04
- - ViGOur   Цитата(AntonTatu @ 4.3.2009, 21:04) а ...   4.3.2009, 21:10
- - SABROG   Цитата(AntonTatu @ 4.3.2009, 20:25) Форму...   5.3.2009, 0:33
- - Константин   потому, что компилятор предназначен для компилиров...   5.3.2009, 0:47
- - Litkevich Yuriy   Цитата(AntonTatu @ 5.3.2009, 0:55) А что ...   5.3.2009, 8:19
|- - AntonTatu   Цитата(Litkevich Yuriy @ 5.3.2009, 8:19) ...   6.3.2009, 0:07
|- - BRE   Цитата(AntonTatu @ 6.3.2009, 0:07) я так ...   6.3.2009, 7:52
- - BRE   Пример: array2d.h #ifndef __ARRAY2D #define __ARR...   6.3.2009, 9:29
|- - BRE   Цитата(BRE @ 6.3.2009, 9:29) Пример: arr...   6.3.2009, 10:03
|- - Гость_AntonTatu_*   ЦитатаВысокой скорости вычисления от скриптов ожид...   6.3.2009, 12:11
|- - BRE   Цитата(Гость_AntonTatu_* @ 6.3.2009, 12:1...   6.3.2009, 12:26
|- - AntonTatu   Цитата(BRE @ 6.3.2009, 12:26) Цитата(Гост...   6.3.2009, 12:34
|- - BRE   Цитата(AntonTatu @ 6.3.2009, 12:34) все н...   6.3.2009, 12:39
|- - BRE   Цитата(AntonTatu @ 6.3.2009, 12:34) форму...   6.3.2009, 19:05
|- - AntonTatu   ЦитатаИсходя из этого сообщения, я не представляю ...   6.3.2009, 21:19
|- - BRE   Цитата(AntonTatu @ 6.3.2009, 21:19) Алгор...   6.3.2009, 21:31
|- - AntonTatu   Цитата(BRE @ 6.3.2009, 21:31) 4. запускае...   7.3.2009, 0:23
|- - BRE   Цитата(AntonTatu @ 7.3.2009, 0:23) подума...   7.3.2009, 10:18
|- - AntonTatu   ЦитатаКак с этим закончим, можно будет попробовать...   9.3.2009, 2:24
|- - BRE   Цитата(AntonTatu @ 9.3.2009, 2:24) main.o...   9.3.2009, 10:27
|- - AntonTatu   ЦитатаПокажи, что сейчас получилось... Прежде вс...   9.3.2009, 13:35
|- - BRE   Цитата(AntonTatu @ 9.3.2009, 13:35) stat...   9.3.2009, 13:50
|- - AntonTatu   Цитата(BRE @ 9.3.2009, 13:50) В исходник ...   9.3.2009, 16:06
- - trdm   Может быть ассемблер? Данные то все числовые, ком...   6.3.2009, 16:34
- - SABROG   Тогда можно глянуть на fasmlib.   6.3.2009, 17:01
- - SABROG   Я так понял, что у него проблема с тем, что в рант...   6.3.2009, 20:24
|- - BRE   Цитата(SABROG @ 6.3.2009, 20:24) Я так по...   6.3.2009, 20:44
- - Litkevich Yuriy   Цитата(AntonTatu @ 9.3.2009, 16:35) выраж...   9.3.2009, 14:03
- - SABROG   Как по скорости?   9.3.2009, 16:11
|- - AntonTatu   Цитата(SABROG @ 9.3.2009, 16:11) Как по с...   9.3.2009, 18:59
|- - BRE   Цитата(AntonTatu @ 9.3.2009, 18:59) Цитат...   9.3.2009, 20:32
|- - AD   Цитата(BRE @ 9.3.2009, 20:32) Погонял тес...   9.3.2009, 20:36
|- - BRE   Цитата(AD @ 9.3.2009, 20:36) Цитата(BRE ...   9.3.2009, 20:46
|- - AntonTatu   Цитата(BRE @ 9.3.2009, 20:46) ..получил у...   10.3.2009, 12:49
|- - BRE   Цитата(AntonTatu @ 10.3.2009, 12:49) т.е....   10.3.2009, 20:46
|- - AntonTatu   Цитата(BRE @ 10.3.2009, 20:46) Ну барин т...   10.3.2009, 23:38
|- - BRE   Мне кажется, что логичней, если сам метод run() бу...   11.3.2009, 6:12
|- - AntonTatu   Цитата(BRE @ 11.3.2009, 6:12) Мне кажется...   11.3.2009, 11:09
|- - BRE   Цитата(AntonTatu @ 11.3.2009, 11:09) //Оч...   11.3.2009, 11:31
- - BRE   Еще небольшое уточнение, насчет операций вычитания...   9.3.2009, 17:24
- - Litkevich Yuriy   Ребята подумайте как переименовать тему, я ее чита...   9.3.2009, 20:56
- - SABROG   Цитата(BRE @ 9.3.2009, 20:46) Посмотрел. ...   10.3.2009, 20:21
- - Litkevich Yuriy   Цитата(SABROG @ 10.3.2009, 23:21) Хорошо ...   10.3.2009, 20:24
|- - SABROG   Цитата(Litkevich Yuriy @ 10.3.2009, 20:24...   10.3.2009, 20:29
- - BRE   Добавил контексты. Разбил по файлам. Кратко докуме...   11.3.2009, 21:44
- - AntonTatu   Цитата(BRE @ 11.3.2009, 21:44) Добавил ко...   11.3.2009, 21:52
- - BRE   Цитата(AntonTatu @ 11.3.2009, 21:52) ЗЫ: ...   11.3.2009, 23:17


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.1.2025, 3:33