Переход назад
Оглавление

BxCAAMInterpretorData.h

См. документацию.
00001 //----------------------------------------------------------//
00002 //----------------------------------------------------------//
00003 //-         BxCAAMInterpretorData.cpp версия 1.26          -//
00004 //- Библиотека для интеграции DLL библитек в систему CAAM. -//
00005 //-             Копируется ByteriX 2005-2010 г..           -//
00006 //-   Все права защищены ООО "Газодинамические аппараты".  -//
00007 //----------------------------------------------------------//
00008 //-  Используеться в IDE(Интегрированной среде разработки) -//
00009 //-                 C++Builder, MS Vusual C++              -//
00010 //----------------------------------------------------------//
00011 //-                     Совместимость:                     -//
00012 //-                     WIN 32     Да                      -//
00013 //-                     WIN 9X     Да                      -//
00014 //-                     WIN NT     Да                      -//
00015 //-                     WIN 2k     Да                      -//
00016 //-                     WIN XP     Да                      -//
00017 //----------------------------------------------------------//
00018 //----------------------------------------------------------//
00019 
00020 //------------------------------------------------------------------------------
00021 #ifndef BxCAAMInterpretorData
00022 #define BxCAAMInterpretorData
00023 
00024 #if defined(__BORLANDC__) && !defined(_NO_VCL)
00025     #include <vcl.h>
00026 #endif
00027 
00028 #include <exception>
00029 
00031 //namespace CAAMInterpreter {
00032 
00033 //------------------------------------------------------------------------------
00034   //---------------------------------//------------//--------------------//------------------------------//
00035   // Простые типы данных             // Delphi     // C++ implementation // Size/Value                   //
00036   //---------------------------------//------------//--------------------//------------------------------//
00037   typedef int *PBxInteger;           // Integer    // int                // 32-bit integer               //
00038   typedef short *PBxSmallInt;        // SmallInt   // short              // 16-bit integer               //
00039   typedef unsigned int *PBxCardinal; // Cardinal   // unsigned int       // 32-bit unsigned integer      //
00040   typedef unsigned short *PBxWord;   // Word       // unsigned short     // 16-bit unsigned integer      //
00041   typedef bool *PBxBoolean;          // Boolean    // bool               // 8-bit true/false             //
00042   typedef char *PBxChar;             // Char       // char               // 8-bit unsigned character     //
00043 #if defined(__BORLANDC__) && !defined(_NO_VCL)
00044   typedef AnsiString *PBxString;     // String     // AnsiString         // Delphi AnsiString class      //
00045 #endif
00046   typedef float *PBxSingle;          // Single     // float              // 32-bit floating point number //
00047   typedef double *PBxDouble;         // Double     // double             // 64-bit floating point number //
00048   typedef long double *PBxExtended;  // Extended   // extended           // 80-bit floating point number //
00049   typedef void *PBxPointer;          // Pointer    // void*              // 32-bit ugeneric pointer      //
00050   //---------------------------------//------------//--------------------//------------------------------//
00051 //------------------------------------------------------------------------------
00052   // Определение сложных структур типов данных CAAM //
00053 
00054   // Структура, отображающая комплексное поле распределения Электро-магнитного излучения
00055   typedef PBxDouble *PPBxDouble;
00056   typedef PPBxDouble TBxDoubleArray;
00057   struct TOptics // структура CAAM
00058   {
00059     TBxDoubleArray Amplitude; // матрица амплитуды комплексного распределения
00060     TBxDoubleArray Phase; // матрица фазы комплексного распределения
00061     double sizeX; // реальный размер области распределений в мм по горизонтали
00062     double sizeY; // реальный размер области распределений в мм по вертикали
00063     int width;
00064     int height;
00065   };
00066   typedef TOptics* POptics;
00067 
00068   typedef
00069   // структура параметров мод комплексного распределения Электро-магнитного излучения
00070   struct TModes // структура CAAM
00071   {
00072     int count; // количество мод
00073     PBxInteger m, n; // Целочисленные параметры
00074     PBxDouble alpha, w; // Вещественные параметры
00075     PBxDouble A, phi; // Начальные распределения амплитуды и фазы соответственно
00076   } TModes;
00077   typedef TModes *PModes; // ссылка на структуру
00078 
00079   typedef
00080 // Структура одномерной комплексной функции для
00081     struct TComplex1D // структура CAAM
00082     {
00083         int size; // размер точек дискретизации
00084         PBxDouble imag; // мнимая часть функции
00085         PBxDouble real; // реальная часть функции
00086         double beginX; // координата начала отчета аргумента функции
00087         double endX; // координата конца отчета аргумента функции
00088     } TComplex1D;
00089 typedef TComplex1D *PComplex1D; // ссылка на структуру
00090 
00091 #if defined(__BORLANDC__) && !defined(_NO_VCL)
00092   typedef DynamicArray<double> TDoubles; // массив вещественных значений
00093   typedef DynamicArray<int> TInts; // массив целочисленных значений
00094   typedef
00095   // Структура, отображающая вещественное графическое отображение кривых линй
00096   struct TBxSchedule // структура CAAM
00097   {
00098     TDoubles Argument; // Аргумент функции кривой линии
00099     TDoubles Abscissa; // Значение функции кривой линии
00100     TInts Orders; // Порядковый номер линии
00101   } TBxSchedule;
00102   typedef TBxSchedule *PBxSchedule; // ссылка на структуру
00103 #endif
00104 //------------------------------------------------------------------------------
00105 
00106   /*interface DECLSPEC_UUID("{7B141555-6624-46F9-8DE0-6A7FA3E5C376}") IInterpreterCAAMExternalInterface;
00107   interface IInterpreterCAAMExternalInterface : public IUnknown
00108   {
00109   public:
00110     virtual int _stdcall setProgressPosition(double value) = 0;
00111     virtual int _stdcall setProgressText(PChar value) = 0;
00112     virtual PChar _stdcall getProjectPath() = 0;
00113     virtual bool _stdcall isExit() = 0;
00114     virtual int _stdcall getThis() = 0;
00115   };*/
00116   
00117   
00118 
00119   struct IInterpreterCAAMExternalInterface;
00120   typedef IInterpreterCAAMExternalInterface * PInterpreterCAAMExternalInterface;
00121   typedef int  (__stdcall *setProgressPositionInvoker)(PInterpreterCAAMExternalInterface , double );
00122   typedef bool (__stdcall *isExitInvoker)(PInterpreterCAAMExternalInterface);
00123   struct IInterpreterCAAMExternalInterface
00124   {
00126     setProgressPositionInvoker setProgressPosition;
00127     int (__stdcall *setProgressText)(PInterpreterCAAMExternalInterface, const char*);
00128     const char* (__stdcall *getProjectPath)(PInterpreterCAAMExternalInterface);
00130     isExitInvoker isExit;
00131     void (__stdcall *exitWithError)(PInterpreterCAAMExternalInterface, const char*);
00132     void * self;
00133     int processId;
00134     unsigned int LanguageId;
00135   };
00136 #if defined(__BORLANDC__) && !defined(_NO_VCL)
00137   class EExit : public Exception {
00138   public :
00139     EExit(void) : Exception("Exit"){
00140       //
00141     }
00142   };
00143 #else
00144   class EExit : public std::exception {
00145   public :
00146     EExit(void) : std::exception(/*"Exit"*/){
00147       //
00148     }
00149   };
00150 #endif
00151 //------------------------------------------------------------------------------
00152 // функция изменяющая положение индикатора выполнения задачи в системе
00153 inline void Progress(
00154   PInterpreterCAAMExternalInterface pExternalInterface, double position)
00155 {
00156   if (pExternalInterface->isExit(pExternalInterface))
00157     throw EExit();
00158   pExternalInterface->setProgressPosition(pExternalInterface, position);
00159 }
00160 //------------------------------------------------------------------------------
00161 #if defined(__BORLANDC__) && !defined(_NO_VCL)
00162 inline void Except(PInterpreterCAAMExternalInterface pExternalInterface,
00163   const Exception * e)
00164 {
00165   if ((dynamic_cast<const EExit *>(e)) == 0)
00166     pExternalInterface->exitWithError(pExternalInterface, e->Message.c_str());
00167 }
00168 
00169 #else
00170 
00171 inline void Except(PInterpreterCAAMExternalInterface pExternalInterface,
00172   const std::exception * e)
00173 {
00174   if ((dynamic_cast<const EExit *>(e)) == 0 && pExternalInterface)
00175     pExternalInterface->exitWithError(pExternalInterface, e->what());
00176 }
00177 #endif
00178 
00179 //} // CAAMInterpreter
00180 
00192 #define BX_CAAM_BEGIN_FUNCTION(pExternalInterface)\
00193     try\
00194     {
00195 
00196 #if defined(__BORLANDC__) && !defined(_NO_VCL)
00197 
00204   #define BX_CAAM_END_FUNCTION(pExternalInterface)\
00205     }\
00206     catch (const Exception * exception)\
00207     {\
00208       Except(pExternalInterface, exception);\
00209     }
00210 
00211 #else
00212 
00213   #define BX_CAAM_END_FUNCTION(pExternalInterface)\
00214     }\
00215     catch (const std::exception &e)\
00216     {\
00217         Except(pExternalInterface, &e);\
00218     }\
00219     catch (const std::exception *e)\
00220     {\
00221         Except(pExternalInterface, e);\
00222     }
00223 
00224 #endif
00225 
00226 #if defined(__BORLANDC__)
00227 
00228     #define BX_CAAM_EXPORT_FUNCTION(TYPE)\
00229         extern "C" __declspec(dllexport) TYPE _stdcall
00230 
00231 #else
00232 
00233     #define BX_CAAM_EXPORT_FUNCTION(TYPE)\
00234         extern "C" __declspec(dllexport) TYPE
00235 
00236 #endif
00237 
00238 //------------------------------------------------------------------------------
00239 #endif //BxCAAMInterpretorData
Документация по системе CAAM. © Все права защищены БайтериКС 2005-2015. BYTERIX.COM byterix