Main Page | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members | Related Pages

ElementArray.h

Go to the documentation of this file.
00001 
00002 // MathCore = a WYSIWYG equation editor + a powerful math engine     //
00003 // Copyright (C) 2003 by Francesco Montorsi                          //
00004 //                                                                   //
00005 // This library is free software; you can redistribute it and/or     //
00006 // modify it under the terms of the GNU Lesser General Public        //
00007 // License as published by the Free Software Foundation; either      //
00008 // version 2.1 of the License, or (at your option) any later         //
00009 // version.                                                          //
00010 //                                                                   //
00011 // This library is distributed in the hope that it will be useful,   //
00012 // but WITHOUT ANY WARRANTY; without even the implied warranty of    //
00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the      //
00014 // GNU Lesser General Public License for more details.               //
00015 //                                                                   //
00016 // You should have received a copy of the GNU Lesser General Public  //
00017 // License along with this program; if not, write to the Free        //
00018 // Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,   //
00019 // MA 02111-1307, USA.                                               //
00020 //                                                                   //
00021 // For any comment, suggestion or feature request, please contact    //
00022 // the administrator of the project at frm@users.sourceforge.net     //
00023 //                                                                   //
00031 
00032 
00033 
00034 #ifndef ELEMENTARRAY_H
00035 #define ELEMENTARRAY_H
00036 
00037 // optimization for GCC compiler
00038 #ifdef __GNUG__
00039 #pragma interface "ElementArray.h"
00040 #endif
00041 
00042 // required includes
00043 #include "mc/Element.h"
00044 #include "mc/MathCore.h"
00045 #include "mc/Operator.h"
00046 
00047 
00048 // defined later
00049 class mcElementArrayHelpers;
00050 class mcMonomial;
00051 class mcFraction;
00052 class mcBracket;
00053 class mcNumber;
00054 
00055 
00058 #define mcELEMENTARRAY_DEFAULT_ROOM   4
00059 
00062 #define mcELEMENTARRAY_EMPTYENTRY   ((mcElement )0xFFFFFFFF)
00063 
00067 #define mcEP_ELEMENTARRAY_FILTER   mcEP_NONSTANDARD_BASE*2
00068 
00071 #define mcFILTER_NO_INSTANCES_LIMIT   -1
00072 
00073 
00074 
00075 
00077 class mcArrayEntry : public mcDataHelper 
00078 {
00079 public:
00080 
00082  int mdata_idx;
00083 
00085  const mcElementArrayHelpers *mdata_arr;
00086 
00087 public:
00088 
00089  mcArrayEntry(const mcElementArrayHelpers *owner = NULL, int idx = -1) 
00090   : mdata_arr(owner) { mdata_idx=idx; }
00091 
00092  virtual ~mcArrayEntry() {}
00093 
00094 
00095 
00098  
00099  mcElement &data_GetRef() const;
00100 
00101  int data_GetIdx() const;
00102  int math_GetIdx() const;
00103 
00104  mcBracket &data_GetBracket() const  { return (mcBracket &)data_GetRef(); }
00105  mcFraction &data_GetFraction() const { return (mcFraction &)data_GetRef(); } 
00106 
00107  bool data_isValid() const
00108   { return (mdata_arr != NULL) && (mdata_idx != -1); }
00109 
00111 
00112 
00115 
00116  void data_SetOwner(mcElementArrayHelpers *ref) { mdata_arr = ref; }
00117  void data_SetIdx(int idx)      { mdata_idx = idx; }
00118 
00120 };
00121 
00122 
00123 // a global instance of the mcArrayEntry class
00124 extern mcArrayEntry mcEmptyArrayEntry;
00125 
00126 
00133 class mcFilter : public mcDataHelper
00134 {
00135 protected:
00136 
00138  mcFilterType m_nType;
00139 
00144  int m_nMaxInstances[mcNUM_ELEMENT_TYPES];
00145 
00146 public:
00147 
00153  mcFilter(mcFilterType type = mcFILTER_INCLUDE_ELEMENT_LIST, 
00154   mcElementType t1 = mcET_INVALID, int count1 = -1);
00155  virtual ~mcFilter() {}
00156 
00158  void DeepCopy(const mcFilter *f) {
00159   for (int i=0; i < mcNUM_ELEMENT_TYPES; i++)   
00160    m_nMaxInstances[i] = f->m_nMaxInstances[i];  
00161 
00162   m_nType = f->m_nType;
00163  }
00164 
00165 
00166 
00170 
00177  void SetMaxInstancesFor(mcElementType t, 
00178   int count = mcFILTER_NO_INSTANCES_LIMIT);
00179 
00181  void math_AddAllowedMathData() {}
00182 
00184  void SetFilterType(mcFilterType type) {
00185   m_nType = type;
00186  }
00187 
00189 
00190 
00191 
00196 
00200  bool isElementTypeAllowed(mcElementType t, int num);
00201 
00203 };
00204 
00205 
00206 
00207 
00208 
00209 // this defines all the classes declared in this header file
00210 mcDEFINE_HELPER_CLASSES(mcElementArray)
00211 
00212 
00213 
00214 
00215 
00216 class mcElementArrayHelpers : public mcElementHelpers
00217 {
00218  friend class mcArrayEntry;
00219 
00220 #ifdef mcENABLE_DATA
00221 private:  // DATA variables
00222 
00225  mcElement *mdata_pElemArray;
00226  
00229  int mdata_nUpperBound;
00230  
00231 protected:
00232 
00234  int mdata_nElements;
00235 
00238  mcFilter *mdata_pFilter;
00239 
00240 #endif
00241 
00242 
00243 
00244 
00245 #ifdef mcENABLE_GUI
00246 protected:  // GUI variables
00247 
00251  int mgui_nCursorPos; 
00252 
00253 
00254 public:    // customizable variables getters
00255 
00258  static wxPen *sgui_pSelectionPen;
00259 
00265  static bool sgui_bDrawSelectionInverting;
00266 
00274  virtual int gui_GetSpaceBetweenRatio() const 
00275   { return 0; }
00276 
00277 #ifdef mcELEMENTARRAY_DRAW_DECORATIONS
00278 
00279  static wxBitmap *pBeginTriBmp, *pEndTriBmp;
00280 #endif
00281 
00282 #endif
00283 
00284 
00285 
00286 
00287 public:
00288 
00289  mcElementArrayHelpers() {
00290 
00291   // array is empty and still not allocated
00292   mdata_nElements = mdata_nUpperBound = 0; 
00293   mdata_pElemArray = NULL;
00294   mdata_pFilter = NULL;
00295   mgui_nCursorPos = 0;
00296  }
00297 
00298  virtual ~mcElementArrayHelpers() {
00299   data_DeleteAll();
00300   mcSAFE_DELETE_ARRAY(mdata_pElemArray);  
00301   mcSAFE_DELETE(mdata_pFilter);
00302  }
00303 
00304 
00305 protected:
00306  
00308  void gui_Init()  { mcElementHelpers::gui_Init(); mgui_nCursorPos = 0; }
00309 
00310 
00311 
00312 #ifdef mcENABLE_DATA
00313 protected:
00314 
00315  virtual int data_GetIdxFromEntry(const mcArrayEntry *p) const = 0;
00316  virtual mcElement &data_GetRefFromEntry(const mcArrayEntry *p) = 0;
00317  
00318 public:
00319 
00323 
00324 #ifdef __MCDEBUG__
00325 
00326  void data_Check() const;
00327 
00330  wxString data_Debug(long flags) const;
00331 
00333  wxString data_GetDebugName() const
00334   { return wxT("mcElementArray"); }
00335 
00336 #endif
00337 
00338  void data_DeepCopy(const mcElementHelpers *p);
00339 
00343  void data_AddProperty(int p, void *val1 = NULL, void *val2 = NULL) {
00344   if (p == mcEP_ELEMENTARRAY_FILTER)
00345    data_ChangeFilter((const mcFilter *)val1);
00346  }
00347 
00348  int data_GetChildrenCount() const {
00349   return mcElementHelpers::data_GetChildrenCount()+data_GetCount();
00350  }
00351 
00352  const mcElement &data_GetConstChild(int n) const {
00353   mcRETURN_ELEMENT_CHILD(n, mcElementHelpers);
00354   return data_Get(n);
00355  }
00356  
00357  void data_SetChild(int n, const mcElement &newchild) {
00358   mcSET_ELEMENT_CHILD(n, mcElementHelpers, newchild);
00359   data_Delete(n);
00360   data_Set(n, newchild);
00361   }
00362 
00363  
00366  void data_CheckArrayLimit();
00367 
00369  void data_ChangeFilter(const mcFilter *p);
00370 
00372  void data_UpdateFilterFor(mcElement &p, const mcFilter *f);
00373 
00376  bool data_isElementAllowed(mcElementType type) const;
00377 
00379  bool data_isSameAs(const mcElementHelpers *p) const;
00380 
00382 
00383  
00384  
00388 
00394  virtual bool data_ScanArray(bool (*func)(const mcElement &), bool odd) const;
00395 
00409  virtual int data_AddElements(const mcElement *p, int num, int pos = -1, 
00410        bool bOverwrite = FALSE, bool bForceCopy = FALSE);
00411 
00417  virtual mcElement &data_AddNewElement(mcElementType t, bool bOverwrite = FALSE, int pos = -1);
00418 
00423  virtual mcElement &data_AddNewWrappedElement(mcElementType t, 
00424         bool bOverwrite = FALSE, int pos = -1) 
00425   { return data_AddNewElement(t, bOverwrite, pos); }
00426 
00434  void data_Merge(const mcElementArray &p, int n = 0, bool bAddToEnd = TRUE);
00435 
00443  virtual void data_AddNewOp(mcElementType type, int pos = -1);
00444 
00446  virtual void data_AddNewEmptyBox(int pos = -1);
00447  
00451  virtual void data_UpdateNeighbor(int n);
00452  
00456  virtual void data_Delete(int entry);
00457 
00465  virtual bool data_Delete(const mcElement &elem);
00466 
00470  virtual void data_DeleteLast(int num);
00471 
00475  virtual void data_DeleteFirst(int num);
00476 
00479  virtual void data_DeleteAllElemType(mcElementType);
00480 
00485  mcElement data_Detach(int n);
00486 
00488  mcElement data_DetachLastElem(int num);
00489 
00493  mcElement data_DetachAll();
00494  
00497  void data_DeleteAll();
00498  
00502  void data_MoveElemRight(int start);
00503  
00512  void data_MoveElemLeft(int start);
00513 
00518  void data_Move(int n, int k);
00519 
00525  int data_MoveAllElemType(mcElementType t, mcElementArray &m);
00526  
00530  void data_Swap(int index1, int index2);
00531 
00542  int data_QueueElemType(mcElementType t, int firstpos);
00543 
00547  virtual void data_Repair() {}
00548 
00550  virtual bool data_isWrappingOnly(mcElementType t) const;
00551 
00555  virtual const mcElement &data_GetWrapped(mcElementType t) const;
00556 
00558  
00559  
00560  
00561  
00565  
00569  inline void data_CheckIndex(int entry) const {
00570   // in release mode, for perfomance reasons, don't test
00571   mcASSERT(mdata_pElemArray != NULL, wxT("Array not allocated yet"));
00572   mcASSERT(entry >= 0 && entry <= mdata_nUpperBound, wxT("Invalid index"));
00573  }
00574  
00582  inline const mcElement &data_GetConst(int entry) const {
00583   data_CheckIndex(entry);
00584   return mdata_pElemArray[entry];
00585  }
00586 
00587  inline const mcElement &data_Get(int entry) const 
00588   { return data_GetConst(entry); }
00589 
00590  inline mcElement &data_Get(int entry) {
00591   data_CheckIndex(entry);
00592   return mdata_pElemArray[entry];
00593  }
00594  
00597  int data_GetIndexOf(const mcElement &p) const;
00598 
00600  inline const mcElement &data_GetLast() const 
00601   { return data_Get(data_GetCount()-1); }
00602 
00603  inline mcElement &data_GetLast()
00604   { return data_Get(data_GetCount()-1); }
00605  
00608  inline mcElement *data_GetArray(int n = 0) const {
00609   data_CheckIndex(n);
00610   return &mdata_pElemArray[n];
00611  }
00612 
00619  inline int data_GetIndex(int id) const {
00620   for (int i=0; i < data_GetCount(); i++)
00621    if (data_Get(i).data_GetID() == id)
00622     return i;
00623    return -1;
00624  }
00625  
00628  inline int data_GetCount() const { 
00629   return mdata_nElements; 
00630  }
00631  
00634  inline int data_GetAvailableEntryCount() const {
00635   return mdata_nUpperBound;
00636  }
00637  
00640  int data_GetNumOfElemType(mcElementType t) const;
00641  
00643  int data_GetOpCount() const;
00644  
00649  mcElement &data_GetElemOfType(int n, mcElementType t) const;
00650  
00654  int data_GetElemIndexOfType(int n, mcElementType t) const;
00655 
00658  mcElement &data_GetNonOpElem(int n) const;
00659 
00662  int data_GetNonOpElemIndex(int n) const;
00663  
00667  mcOperator &data_GetOp(int n) const;
00668  
00676  int data_GetOpIndex(int n) const;
00677 
00679  mcElementType data_GetOpTypeBetween(int n1, int n2) const;
00680 
00682  mcElementType data_GetOpTypePreceding(int n) const;
00683 
00684  mcOperator &data_GetOpPreceding(int n) const
00685   { return (mcOperator &)*data_GetInstanceOf(data_GetOpTypePreceding(n)); }
00686 
00691  const mcElement &data_GetElemAtLeftOf(const mcElement &p) const {
00692   int n = data_GetIndexOf(p);
00693   return (n < 1) ? mcEmptyElement : data_Get(n-1);
00694  }
00695  
00700  const mcElement &data_GetElemAtRightOf(const mcElement &p) const { 
00701   int n = data_GetIndexOf(p);
00702   return (n == -1 || n >= mdata_nElements-1) ? mcEmptyElement : data_Get(n+1);
00703  }
00704 
00706  
00707  
00708  
00709  
00710  
00714  
00716  bool data_isOp(int entry) const;
00717  
00720  inline bool data_isEmptyBox(int entry) const {
00721   data_CheckIndex(entry);
00722   return (mdata_pElemArray[entry].data_GetType() == mcET_EMPTYBOX); 
00723  }
00724  
00727  inline bool data_isEmptyEntry(int entry) const {
00728   data_CheckIndex(entry);
00729   return (data_Get(entry) == mcEmptyElement);
00730  }
00731  
00733  inline bool data_isAddSubOp(int entry) const {
00734   data_CheckIndex(entry);
00735   return (data_Get(entry).data_GetType() == mcET_ADDOP || 
00736    data_Get(entry).data_GetType() == mcET_SUBOP);
00737  }
00738  
00740  inline bool data_isMultDivOp(int entry) const {
00741   data_CheckIndex(entry);
00742   return (data_Get(entry).data_GetType() == mcET_MULTOP || 
00743    data_Get(entry).data_GetType() == mcET_DIVOP);
00744  }
00745  
00747  inline bool data_isArrayEmpty() const {
00748   return (mdata_nElements == 0);
00749  }
00750  
00755  static inline bool data_isValidElem(const mcElement &p) {
00756   return p != mcEmptyElement;  
00757  }
00758  
00760  inline bool data_isValidElem(int entry) const {
00761   data_CheckIndex(entry);
00762   return data_isValidElem(mdata_pElemArray[entry]);
00763  }
00765  
00766  
00767  
00768  
00772  
00776  void data_Set(int i, const mcElement &value);
00777  
00784  inline void data_SetAsEmptyEntry(int entry) {
00785   data_CheckIndex(entry);
00786   mdata_pElemArray[entry] = mcEmptyElement;
00787  }
00788  
00790 
00791 
00795 
00798  void data_SetFilter(const mcFilter *p);
00799 
00802  mcFilter *data_GetFilter()     { return mdata_pFilter; }
00803 
00805  const mcFilter *data_GetFilter() const  { return mdata_pFilter; }
00806 
00808  bool data_isUsingFilter() const    { return (mdata_pFilter != NULL); }
00809 
00811 
00812 #endif  // mcENABLE_DATA
00813 
00814 
00815 
00816 
00817 
00818 #ifdef mcENABLE_GUI
00819 public:
00820  
00824 
00836  virtual int gui_AddNewElement(mcElementType type, const mcKey &key, int pos = -1);
00837  
00841  void gui_AddNewEmptyBox(int pos = -1);
00842 
00846  void gui_AddNewOp(mcElementType nOpType, int pos = -1);
00847 
00849  void gui_SetCursorOnElemBegin(int n) {  
00850   mgui_nCursorPos = n;
00851   data_Get(n).gui_SetCursorPos(mcCP_BEGIN);
00852   gui_CheckCursorPos();
00853  }
00854 
00856  void gui_SetCursorOnElemEnd(int n) {  
00857   mgui_nCursorPos = n;
00858   data_Get(n).gui_SetCursorPos(mcCP_END);
00859   gui_CheckCursorPos();
00860  }
00861 
00865  bool gui_isCursorOn(const mcElement &p) const {
00866   int idx = data_GetIndexOf(p);
00867   if (idx != -1)
00868    return (idx == mgui_nCursorPos);
00869   return FALSE;
00870  }
00871 
00873  int gui_GetSelElemCount() const {
00874   return gui_GetSelEnd()-gui_GetSelStart();
00875  }
00876 
00879  int gui_GetSelElemCountOfType(mcElementType t) const {
00880   int count = 0;
00881 
00882   for (int i=gui_GetSelStart(), max=gui_GetSelEnd(); i < max; i++)
00883    if (data_Get(i).data_GetType() == t)
00884     count++;
00885 
00886   return count;
00887  }
00888  
00895  int gui_GetSelElemIndex(int n) const {
00896   int m = -1; // PLEASE NOTE THAT WE MUST ALWAYS START FROM -1:
00897      // IN THIS WAY THE PARAMETER n MUST BE EXPRESSED
00898      // AS ZERO-BASED
00899   
00900   for (int i=0; i < data_GetCount(); i++) {
00901    if (data_Get(i).gui_isSelected()) {
00902     m++;
00903     // found ?
00904     if (m == n) return i;
00905    }
00906   }
00907   
00908   // no enough selected elements
00909   return -1;
00910  }
00911 
00919  int gui_GetSelElemIndexOfType(int n, mcElementType t) const {
00920   int m = -1;
00921   
00922   for (int i=0, max=gui_GetSelElemCount(); i < max; i++) {
00923    if (gui_GetSelElem(i).data_GetType() == t) {
00924     m++;
00925     // found ?
00926     if (n == m) return gui_GetSelElemIndex(i);
00927    }
00928   }
00929   
00930   // the n-th occurrence of t doens't exist
00931   return -1;
00932  }
00933  
00939  const mcElement &gui_GetSelElem(int n) const {
00940   int m = gui_GetSelElemIndex(n);
00941   
00942   if (m > -1)
00943    return data_Get(m);
00944   
00945   // not enough selected elements
00946   return mcEmptyElement;
00947  }
00948 
00949  const mcElement &gui_GetSelElemOfType(int n, mcElementType t) const {
00950   int m = gui_GetSelElemIndexOfType(n, t);
00951   
00952   if (m > -1)
00953    return data_Get(m);
00954   
00955   // not enough selected elements
00956   return mcEmptyElement;
00957  }
00958  
00961  int gui_GetSelStart() const {
00962   for (int i=0; i < data_GetCount(); i++)
00963    if (data_Get(i).gui_isSelected())
00964     return i;
00965   return -1;
00966  }
00967  
00970  int gui_GetSelEnd() const {
00971   for (int i=data_GetCount()-1; i >= 0; i--)
00972    if (data_Get(i).gui_isSelected())
00973     return i+1;
00974   return -1;
00975  }
00976 
00978  void gui_DeleteSelection();
00979  
00982  mcElement &gui_ExGetActiveElem(int x, int y, const wxPoint &pt, int cl) {
00983   int n = gui_GetActiveElemIndex(x, y, pt, cl);
00984   if (n != mcDRW_NOACTIVEELEM && n != mcDRW_ONSELECTION)
00985    return data_Get(n).gui_GetActiveElem(x, y, pt);
00986   return mcEmptyElement;
00987  }
00988 
00990  void gui_DeleteNextOp();
00991 
00993  void gui_DeletePreviousOp();
00994 
00997  void gui_MoveCursorRight();
00998  void gui_MoveCursorLeft();
00999 
01002  void gui_UpdateExpDepth();
01003 
01004  bool gui_Insert(const mcElement &toinsert);
01005 
01007 
01008 
01009 
01010 
01011 
01016 
01017  virtual bool gui_isEndKey(const mcKey &ev) const;
01018  //virtual void DeepCopy(const mcElementGUI *p);
01019  virtual void gui_SetCursorPos(const mcCursorPos &code);
01020  virtual mcInputRes gui_Input(const mcKey &ev, mcElement *newelem);
01021  virtual mcMoveCursorRes gui_MoveCursor(mcMoveCursorFlag flag, long modifiers);
01022  virtual mcElement gui_GetSelection() const;
01023  virtual void gui_DoRecalcSize();
01024  virtual void gui_GetCursorPos(mcCursorPos &) const;
01025  virtual mcCursorPos gui_GetCursorPos() const
01026   { return mcElementHelpers::gui_GetCursorPos(); }
01027 
01028  virtual int gui_GetYAnchor() const {
01029   return gui_GetCenterLine();
01030  }
01031 
01032  void gui_OnSelect(wxDC &dc, wxRect &rc) {
01033   // call the overloaded version;
01034   gui_ExOnSelect(dc, rc, -1);
01035  }
01036 
01037  int gui_Draw(wxDC &dc, int x, int y, long flags, const wxPoint &pt) const {
01038   // call the overloaded version
01039   return gui_ExDraw(dc, x, y, flags, pt, -1);
01040  }
01041 
01042  int gui_GetRelCursorPos(wxDC &dc, wxPoint *pt) const {
01043   // call the overloaded version
01044   return gui_ExGetRelCursorPos(dc, pt, -1);
01045  }
01046 
01047  int gui_MoveCursorUsingPoint(wxDC &dc, const wxPoint &pt) {
01048   // call the overloaded version
01049   return gui_ExMoveCursorUsingPoint(dc, pt, -1);
01050  }
01051 
01052  mcElement &gui_GetActiveElem(int x, int y, const wxPoint &pt) {
01053   // call the overloaded version
01054   return gui_ExGetActiveElem(x, y, pt, -1);
01055  }
01056 
01058 
01059 
01060 
01061 
01066 
01069  virtual mcInputRes gui_BackInput(const mcKey &key, mcElement *pnewelem, int n) = 0;
01070 
01074  virtual bool gui_isArrEndKey(const mcKey &ev) const = 0;
01075   
01081  virtual void gui_CheckCursorPos() const = 0;
01082 
01085  virtual void gui_DoSplit(mcElementType type, const mcKey &ev) = 0;
01086 
01087 
01092 
01094 
01095 
01096 
01097 
01102 
01106  virtual int gui_GetSpaceBetween() const;
01107 
01111  virtual int gui_GetCenterLine() const;
01112 
01125   virtual int gui_ExDraw(wxDC &dc, int x, int y, long flags, const wxPoint &pt, int cl = -1, 
01126      int begin = 0, int end = -1, bool bgui_DrawSelected = FALSE) const;
01127 
01141   virtual int gui_DrawSelectedElements(wxDC &dc, int x, int y, long flags, 
01142          const wxPoint &pt, int cl = -1) const;
01143 
01160  virtual int gui_DrawSelection(wxDC &hDC, int x, int y, long flags, const wxPoint &pt, int cl = -1) const;
01161 
01171  virtual void gui_ExOnSelect(wxDC &dc, wxRect &rc, int cl = -1);
01172 
01178  virtual wxSize gui_CalcSizeOfFirst(int n, int cl = -1) const;
01179 
01187  virtual wxSize gui_CalcSizeOfRange(int begin, int end, int cl = -1) const;
01188 
01195  virtual wxRect gui_GetSelectionRect(wxDC &dc, int x, int y, int cl = -1) const;
01196 
01200  virtual wxPoint gui_GetOriginOfElem(int n, int cl = -1) const;
01201  
01215  virtual int gui_GetBB(int n, wxRect *rc, int yCenter = 0, int w = 0) const;
01216 
01222  virtual int gui_ExGetRelCursorPos(wxDC &hDC, wxPoint *pt, int cl = -1) const;
01223  
01231  virtual int gui_ExMoveCursorUsingPoint(wxDC &hDC, const wxPoint &pt, int cl = -1);
01232 
01241  virtual int gui_GetActiveElemIndex(int x, int y, const wxPoint &pt, int cl = -1);
01242 
01244 #endif  // mcENABLE_GUI
01245 
01246 
01247 
01248 
01249 #ifdef mcENABLE_MATH
01250 
01273 
01274 
01275 protected:
01276 
01285  virtual mcExpSimRes math_HandleExpSimFlag(mcExpSimRes r, mcElement *newelem, int i);
01286 
01292  virtual void math_HandleBasicOpRes(mcBasicOpRes res, mcElement r, int ridx);
01293 
01300  virtual int math_ReorderElements(mcElement *arr, int sz, int start = 0, int toskip = 1);
01301 
01302 
01304  virtual mcExpSimRes math_ExpandAll(long flags, mcElement *pp);
01305 
01306 
01308  virtual mcExpSimRes math_SimplifyAll(long flags, mcElement *pp);
01309 
01311  virtual mcExpSimRes math_SimplifyExp(long flags, mcElement *pp);
01312 
01315  virtual mcExpSimRes math_SimplifyRemoveNeutrals(long flags);
01316 
01318  virtual mcExpSimRes math_SimplifySolveOp(long flags);
01319 
01323  virtual mcExpSimRes math_Reorder() = 0;
01324 
01327  virtual bool math_SimplifyNeedExp(long flags, int n) const;
01328 
01329  virtual mcExpSimRes math_BeginSimSteps()  { return mcESR_DONE; }
01330  virtual mcExpSimRes math_FinalSimSteps()  { return mcESR_DONE; }
01331 
01334  virtual void math_EndSimSteps() {}
01335 
01337  virtual void math_EndExpSteps() {}
01338 
01339 public:
01340 
01344 
01345  mcExpSimRes math_Simplify(long flags, mcElement *newelem);
01346  mcExpSimRes math_Expand(long flags, mcElement *newelem);
01347 
01352   mcExpSimRes math_Simplify(long flags) { return math_Simplify(flags, NULL); }
01353   mcExpSimRes math_Expand(long flags)  { return math_Expand(flags, NULL); }
01354 
01355  mcMathType math_GetMathType() const;
01356 
01357  bool math_CanBeAddedWith(const mcElement &p) const;
01358  bool math_CanBeDivBy(const mcElement &p) const;
01359  bool math_CanBeMultWith(const mcElement &p) const;
01360 
01361  //void math_SetExp(const mcPolynomial &p);
01362  mcBasicOpRes math_MakeReciprocal(mcElement *);
01363 
01364  virtual mcRealValue math_Evaluate() const;
01365  
01369  virtual mcRealValue math_GetLenght() const  { return 0.5; }
01370 
01372 
01373 
01374 
01375 
01379 
01382  const mcElement &math_Get(int n) const 
01383   { return data_Get(math_MathToDataIdx(n)); }
01384  mcElement &math_Get(int n) 
01385   { return data_Get(math_MathToDataIdx(n)); }
01386 
01387  virtual int math_GetCount() const 
01388   { return data_GetCount() - data_GetOpCount(); }
01389 
01396  int math_GetIndexOf(int occ, const mcElement &tofind) const;  
01397 
01398  mcElementType math_GetOpTypeBetween(int n1, int n2) const 
01399   { return data_GetOpTypeBetween(math_MathToDataIdx(n1), math_MathToDataIdx(n2)); }
01400 
01401  mcElementType math_GetOpTypePreceding(int n) const 
01402   { return data_GetOpTypePreceding(math_MathToDataIdx(n)); }
01403 
01404  mcOperator &math_GetOpBetween(int n1, int n2) const;
01405  mcOperator &math_GetOpPreceding(int n) const;
01406 
01408 
01409 
01410 
01414  
01426  bool math_Remove(int n, bool bAddZero = TRUE);
01427 
01428  bool math_RemoveFactor(const mcArrayEntry &toremove);
01429 
01441  virtual bool math_Delete(int n, const mcElement &elem, bool bAddZero = TRUE);
01442 
01447  //virtual void Move(int n, int k);
01448 
01451  void math_ApplyOp(mcElementType optype, mcElement res, const mcElement &factor, mcElement *);
01452 
01455  void math_ApplyOpSimple(mcElementType optype, mcElement res, const mcElement &factor);
01456 
01457  virtual bool math_CompareThisOnly(const mcElement &p, long flags) const;
01458  virtual bool math_Compare(const mcElement &p, long flags) const; 
01459 
01461  virtual bool math_isWrappingOnly(mcElementType t) const;
01462 
01466  virtual const mcElement &math_GetWrapped(mcElementType t) const;
01467 
01468  virtual mcArrayEntry math_WrapMonomial(const mcMonomial &) = 0;
01469  virtual mcArrayEntry math_WrapSimple(const mcElement &) = 0;
01470 
01471  virtual mcArrayEntry math_WrapSymbol(const mcSymbolProperties *sym);
01472  virtual mcArrayEntry math_WrapNumber(const mcRealValue &val);
01473 
01475  bool math_isWrappingNumOnly() const  { return math_isWrappingOnly(mcET_NUMBER); }
01476 
01478  bool math_isWrappingSymOnly() const  { return math_isWrappingOnly(mcET_SYMBOL); }
01479 
01482  mcRealValue math_GetWrappedNumber() const;
01483 
01486  const mcSymbolProperties *math_GetWrappedSymbol() const;
01487 
01488  bool math_isWrappingOnly(const mcSymbolProperties *sym) const
01489   { return math_GetWrappedSymbol() == sym; }
01490  bool math_isWrappingOnly(const mcRealValue &val) const
01491   { return math_GetWrappedNumber() == val; }
01492 
01493  virtual void math_ResetToOne();
01494  virtual void math_ResetToZero();
01495 
01496  virtual void math_SimpleAdd(const mcElement &p, bool add = TRUE);
01497  virtual void math_SimpleMultiplyBy(const mcElement &p);
01498  virtual void math_SimpleDivideBy(const mcElement &p);
01499 
01500  mcArrayEntry math_EmbedInFraction(bool bAsDenominator = FALSE); 
01501  mcArrayEntry math_EmbedInBracket();
01502  mcArrayEntry math_EmbedInRadical();
01503 
01505 
01506 
01507 
01511 
01514  virtual int math_DataToMathIdx(int dataindex) const = 0;
01515 
01518  virtual int math_MathToDataIdx(int mathindex) const = 0;
01519 
01520  virtual void math_PrepareForComparison(mcElementArray &p) const;
01521  virtual void math_PrepareForMathOperations(mcElementArray &p) const;
01522 
01523  virtual mcElementType math_GetNeutralOpType() const = 0;
01524  virtual double math_GetNeutralValue() const = 0;
01525  
01529  virtual mcPolynomial math_GetPolynomialWrapper() const = 0;
01530 
01532  virtual mcElementArray math_CreateWrapperFor(const mcElement &p) const;
01533 
01534  virtual mcMonomial math_GetFactors() const;
01535 
01541  //virtual void math_FactoreOut() = 0;
01542 
01543  //virtual void math_RaiseChildrenTo(const mcRealValue &n) = 0;
01544  //virtual void math_RaiseChildrenTo(const mcPolynomial &p) = 0;
01545 
01546  void math_EmbedInBracketAndRaiseTo(const mcRealValue &n);  
01547  void math_EmbedInBracketAndRaiseTo(const mcPolynomial &p);
01548  void math_EmbedInRadicalAndRaiseTo(const mcPolynomial &p);
01549 
01551 
01552 #endif  // mcENABLE_MATH
01553 
01554 
01555 
01556 #ifdef mcENABLE_IO
01557 public:
01558 
01561  bool io_isBeginTag(const wxXml2Node &tag) const { 
01562   if (tag.GetName() == wxT("mrow"))
01563    return TRUE;
01564   return FALSE;
01565  }
01566 
01571  bool io_isBeginChar(const wxString &str) const {
01572   return FALSE;
01573  }
01574 
01575  wxString io_GetInlinedExpr() const;
01576 
01577 #endif  // mcENABLE_IO
01578 };
01579 
01580 
01581 
01582 
01583 
01587 class mcElementArray : public mcElement
01588 {
01589  mcDEFINE_ABSTRACT_CLASS(ElementArray, mcElement);
01590  
01591 public:
01592 
01593  bool data_isValidContainerFor(mcElementType t) const
01594   { return t == mcET_MONOMIAL || t == mcET_POLYNOMIAL; }
01595 
01596 
01597 #ifdef mcENABLE_DATA
01598 public:
01599 
01600  mcWRAPPER void data_CheckIndex(int entry) const
01601   { hlp()->data_CheckIndex(entry); }
01602  mcWRAPPER void data_CheckArrayLimit()
01603   { hlp()->data_CheckArrayLimit(); }
01604  mcWRAPPER void data_ChangeFilter(const mcFilter *p)
01605   { hlp()->data_ChangeFilter(p); }
01606 
01607  mcWRAPPER void data_UpdateFilterFor(mcElement &p, const mcFilter *f)
01608   { hlp()->data_UpdateFilterFor(p, f); }
01609 
01610  mcWRAPPER bool data_isElementAllowed(mcElementType type) const
01611   { return hlp()->data_isElementAllowed(type); }
01612 
01613  mcWRAPPER int data_AddElements(const mcElement *p, int num, int pos = -1, 
01614       bool bOverwrite = FALSE, bool bForceCopy = FALSE)
01615   { return hlp()->data_AddElements(p, num, pos, bOverwrite, bForceCopy); }
01616 
01617  mcWRAPPER mcElement &data_AddNewElement(mcElementType t, bool bOverwrite = FALSE, int pos = -1)
01618   { return hlp()->data_AddNewElement(t, bOverwrite, pos); }
01619 
01620  mcWRAPPER mcElement &data_AddNewWrappedElement(mcElementType t, 
01621          bool bOverwrite = FALSE, int pos = -1) 
01622   { return hlp()->data_AddNewWrappedElement(t, bOverwrite, pos); }
01623 
01624  mcWRAPPER void data_Merge(const mcElementArray &p, int n, bool bmath_AddToEnd = TRUE)
01625   { hlp()->data_Merge(p, n, bmath_AddToEnd); }
01626 
01627  mcWRAPPER void data_AddNewOp(mcElementType type, int pos = -1)
01628   { hlp()->data_AddNewOp(type, pos); }
01629 
01630  mcWRAPPER void data_AddNewEmptyBox(int pos = -1)
01631   { hlp()->data_AddNewEmptyBox(pos); }
01632 
01633 
01634  mcWRAPPER bool data_Delete(const mcElement &elem)
01635   { return hlp()->data_Delete(elem); }
01636  mcWRAPPER void data_Delete(int entry)
01637   { hlp()->data_Delete(entry); }
01638  mcWRAPPER void data_DeleteLast(int num)
01639   { hlp()->data_DeleteLast(num); }
01640  mcWRAPPER void data_DeleteFirst(int num)
01641   { hlp()->data_DeleteFirst(num); }
01642  mcWRAPPER void data_DeleteAllElemType(mcElementType t)
01643   { hlp()->data_DeleteAllElemType(t); }
01644  mcWRAPPER void data_DeleteAll()
01645   { hlp()->data_DeleteAll(); }
01646 
01647  mcWRAPPER mcElement data_Detach(int n)
01648   { return hlp()->data_Detach(n); }
01649  mcWRAPPER mcElement data_DetachLastElem(int num)
01650   { return hlp()->data_DetachLastElem(num); }
01651  mcWRAPPER mcElement data_DetachAll()
01652   { return hlp()->data_DetachAll(); }
01653 
01654  mcWRAPPER void data_MoveElemRight(int start)
01655   { hlp()->data_MoveElemRight(start); }
01656  mcWRAPPER void data_MoveElemLeft(int start)
01657   { hlp()->data_MoveElemLeft(start); }
01658  mcWRAPPER void data_Move(int n, int k)
01659   { hlp()->data_Move(n, k); }
01660  mcWRAPPER int data_MoveAllElemType(mcElementType t, mcElementArray &m)
01661   { return hlp()->data_MoveAllElemType(t, m); }
01662 
01663  mcWRAPPER void data_Swap(int index1, int index2)
01664   { hlp()->data_Swap(index1, index2); }
01665 
01666  mcWRAPPER int data_QueueElemType(mcElementType t, int firstpos)
01667   { return hlp()->data_QueueElemType(t, firstpos); }
01668 
01669  mcWRAPPER void data_Repair()
01670   { hlp()->data_Repair(); }
01671 
01672 
01673 
01674  mcWRAPPER bool data_isWrappingOnly(mcElementType t) const
01675   { return hlp()->data_isWrappingOnly(t); }
01676 
01677  mcWRAPPER const mcElement &data_GetWrapped(mcElementType t) const
01678   { return hlp()->data_GetWrapped(t); }
01679 
01680 
01681  mcWRAPPER const mcElement &data_Get(int entry) const 
01682   { return hlp()->data_Get(entry); }
01683  mcWRAPPER mcElement &data_Get(int entry)
01684   { return hlp()->data_Get(entry); }
01685 
01686 
01687  mcWRAPPER int data_GetIndexOf(const mcElement &p) const
01688   { return hlp()->data_GetIndexOf(p); }
01689 
01690  mcWRAPPER const mcElement &data_GetLast() const 
01691   { return hlp()->data_GetLast(); }
01692  mcWRAPPER mcElement &data_GetLast()
01693   { return hlp()->data_GetLast(); }
01694 
01695 
01696  mcWRAPPER mcElement *data_GetArray(int n = 0) const
01697   { return hlp()->data_GetArray(n); }
01698 
01699  mcWRAPPER int data_GetIndex(int id) const
01700   { return hlp()->data_GetIndex(id); }
01701 
01702  mcWRAPPER int data_GetCount() const 
01703   { return hlp()->data_GetCount(); }
01704 
01705  mcWRAPPER int data_GetAvailableEntryCount() const
01706   { return hlp()->data_GetAvailableEntryCount(); }
01707 
01708  mcWRAPPER int data_GetNumOfElemType(mcElementType t) const
01709   { return hlp()->data_GetNumOfElemType(t); }
01710 
01711  mcWRAPPER int data_GetOpCount() const
01712   { return hlp()->data_GetOpCount(); }
01713 
01714  mcWRAPPER mcElement &data_GetElemOfType(int n, mcElementType t) const
01715   { return hlp()->data_GetElemOfType(n, t); }
01716 
01717  mcWRAPPER int data_GetElemIndexOfType(int n, mcElementType t) const
01718   { return hlp()->data_GetElemIndexOfType(n, t); }
01719 
01720  mcWRAPPER mcElement &data_GetNonOpElem(int n) const
01721   { return hlp()->data_GetNonOpElem(n); }
01722 
01723  mcWRAPPER int data_GetNonOpElemIndex(int n) const
01724   { return hlp()->data_GetNonOpElemIndex(n); }
01725 
01726  mcWRAPPER mcOperator &data_GetOp(int n) const
01727   { return hlp()->data_GetOp(n); }
01728 
01729  mcWRAPPER int data_GetOpIndex(int n) const
01730   { return hlp()->data_GetOpIndex(n); }
01731 
01732  mcWRAPPER mcElementType data_GetOpTypeBetween(int n1, int n2) const
01733   { return hlp()->data_GetOpTypeBetween(n1, n2); }
01734 
01735  mcWRAPPER mcElementType data_GetOpTypePreceding(int n) const
01736   { return hlp()->data_GetOpTypePreceding(n); }
01737 
01738  mcWRAPPER const mcElement &data_GetElemAtLeftOf(const mcElement &p) const
01739   { return hlp()->data_GetElemAtLeftOf(p); }
01740 
01741  mcWRAPPER const mcElement &data_GetElemAtRightOf(const mcElement &p) const 
01742   { return hlp()->data_GetElemAtRightOf(p); }
01743 
01744  mcWRAPPER bool data_isOp(int entry) const
01745   { return hlp()->data_isOp(entry); }
01746  mcWRAPPER bool data_isEmptyBox(int entry) const
01747   { return hlp()->data_isEmptyBox(entry); }
01748  mcWRAPPER bool data_isEmptyEntry(int entry) const
01749   { return hlp()->data_isEmptyEntry(entry); }
01750  mcWRAPPER bool data_isAddSubOp(int entry) const
01751   { return hlp()->data_isAddSubOp(entry); }
01752  mcWRAPPER bool data_isMultDivOp(int entry) const
01753   { return hlp()->data_isMultDivOp(entry); }
01754 
01755  mcWRAPPER bool data_isArrayEmpty() const
01756   { return hlp()->data_isArrayEmpty(); }
01757  mcWRAPPER bool data_isValidElem(int entry) const
01758   { return hlp()->data_isValidElem(entry); }
01759 
01760  mcWRAPPER void data_Set(int i, const mcElement &value)
01761   { hlp()->data_Set(i, value); }
01762 
01763  mcWRAPPER void data_SetAsEmptyEntry(int entry)
01764   { hlp()->data_SetAsEmptyEntry(entry); }
01765 
01766  mcWRAPPER void data_SetFilter(const mcFilter *p)
01767   { hlp()->data_SetFilter(p); }
01768 
01769  mcWRAPPER mcFilter *data_GetFilter()
01770   { return hlp()->data_GetFilter(); }
01771 
01772  mcWRAPPER const mcFilter *data_GetFilter() const  
01773   { return hlp()->data_GetFilter(); }
01774 
01775  mcWRAPPER bool data_isUsingFilter() const    
01776   { return hlp()->data_isUsingFilter(); }
01777 
01778 #endif  // mcENABLE_DATA
01779 
01780 
01781 
01782 
01783 #ifdef mcENABLE_GUI
01784 public:
01785 
01786  mcWRAPPER int gui_AddNewElement(mcElementType type, const mcKey &key, int pos = -1)
01787   { return hlp()->gui_AddNewElement(type, key, pos); }
01788  mcWRAPPER void gui_AddNewEmptyBox(int pos = -1)
01789   { hlp()->gui_AddNewEmptyBox(pos); }
01790  mcWRAPPER void gui_AddNewOp(mcElementType nOpType, int pos = -1)
01791   { hlp()->gui_AddNewOp(nOpType, pos); }
01792 
01793  mcWRAPPER void gui_SetCursorOnElemBegin(int n)  
01794   { hlp()->gui_SetCursorOnElemBegin(n); }
01795  mcWRAPPER void gui_SetCursorOnElemEnd(int n)  
01796   { hlp()->gui_SetCursorOnElemEnd(n); }
01797 
01798  mcWRAPPER bool gui_isCursorOn(const mcElement &p) const
01799   { return hlp()->gui_isCursorOn(p); }
01800 
01801  mcWRAPPER int gui_GetSelElemCount() const
01802   { return hlp()->gui_GetSelElemCount(); }
01803  mcWRAPPER int gui_GetSelElemCountOfType(mcElementType t) const
01804   { return hlp()->gui_GetSelElemCountOfType(t); }
01805  mcWRAPPER int gui_GetSelElemIndex(int n) const
01806   { return hlp()->gui_GetSelElemIndex(n); }
01807  mcWRAPPER int gui_GetSelElemIndexOfType(int n, mcElementType t) const
01808   { return hlp()->gui_GetSelElemIndexOfType(n, t); }
01809 
01810  mcWRAPPER const mcElement &gui_GetSelElem(int n) const
01811   { return hlp()->gui_GetSelElem(n); }
01812  mcWRAPPER const mcElement &gui_GetSelElemOfType(int n, mcElementType t) const
01813   { return hlp()->gui_GetSelElemOfType(n, t); }
01814 
01815  mcWRAPPER int gui_GetSelStart() const
01816   { return hlp()->gui_GetSelStart(); }
01817  mcWRAPPER int gui_GetSelEnd() const
01818   { return hlp()->gui_GetSelEnd(); }
01819 
01820  mcWRAPPER void gui_DeleteSelection()
01821   { hlp()->gui_DeleteSelection(); }
01822 
01823  mcWRAPPER mcElement &gui_ExGetActiveElem(int x, int y, const wxPoint &pt, int cl)
01824   { return hlp()->gui_ExGetActiveElem(x, y, pt, cl); }
01825 
01826  mcWRAPPER void gui_DeleteNextOp()
01827   { hlp()->gui_DeleteNextOp(); }
01828  mcWRAPPER void gui_DeletePreviousOp()
01829   { hlp()->gui_DeletePreviousOp(); }
01830 
01831  mcWRAPPER void gui_MoveCursorRight()
01832   { hlp()->gui_MoveCursorRight(); }
01833  mcWRAPPER void gui_MoveCursorLeft()
01834   { hlp()->gui_MoveCursorLeft(); }
01835 
01836 /*
01837  mcWRAPPER mcInputRes gui_BackInput(const mcKey &key, mcElement *pnewelem, int n)
01838 
01839  mcWRAPPER bool gui_isArrEndKey(const mcKey &ev) const
01840 
01841  mcWRAPPER void gui_CheckCursorPos() const
01842 
01843  mcWRAPPER void gui_DoSplit(mcElementType type, const mcKey &ev)
01844 
01845  mcWRAPPER int gui_GetSpaceBetween() const
01846 */
01847  mcWRAPPER int gui_GetCenterLine() const
01848   { return hlp()->gui_GetCenterLine(); }
01849 
01850  mcWRAPPER int gui_ExDraw(wxDC &dc, int x, int y, long flags, const wxPoint &pt, int cl = -1, 
01851      int begin = 0, int end = -1, bool bDrawSelected = FALSE) const
01852   { return hlp()->gui_ExDraw(dc, x, y, flags, pt, cl, begin, end, bDrawSelected); }
01853 /*
01854   mcWRAPPER int gui_DrawSelectedElements(wxDC &dc, int x, int y, long flags, 
01855          mcWRAPPER const wxPoint &pt, int cl = -1) const
01856 
01857  mcWRAPPER int gui_DrawSelection(wxDC &hDC, int x, int y, long flags, const wxPoint &pt, int cl = -1) const
01858 
01859  mcWRAPPER void gui_ExOnSelect(wxDC &dc, int x, int y, wxRect &rc, int cl = -1)
01860 
01861  mcWRAPPER wxSize gui_CalcSizeOfFirst(int n, int cl = -1) const
01862 
01863  mcWRAPPER wxSize gui_CalcSizeOfRange(int begin, int end, int cl = -1) const
01864 
01865  mcWRAPPER wxRect gui_GetSelectionRect(wxDC &dc, int x, int y, int cl = -1) const
01866 
01867  mcWRAPPER wxPoint gui_GetOriginOfElem(int n, int cl = -1) const
01868 
01869  mcWRAPPER int gui_GetBB(int n, wxRect *rc, int yCenter, int w) const
01870 */
01871  mcWRAPPER int gui_ExGetRelCursorPos(wxDC &dc, wxPoint *pt, int cl = -1) const
01872   { return hlp()->gui_ExGetRelCursorPos(dc, pt, cl); }
01873 /*
01874  mcWRAPPER int gui_ExMoveCursorUsingPoint(wxDC &hDC, const wxPoint &pt, int cl = -1)
01875 
01876  mcWRAPPER int gui_GetActiveElemIndex(int x, int y, const wxPoint &pt, int cl = -1)
01877 */
01878 #endif  // mcENABLE_GUI
01879 
01880 
01881 #ifdef mcENABLE_MATH
01882 public:
01883 
01884   mcWRAPPER mcExpSimRes math_Simplify(long flags)
01885   { return hlp()->math_Simplify(flags); }
01886   mcWRAPPER mcExpSimRes math_Expand(long flags)
01887   { return hlp()->math_Expand(flags); }
01888   mcWRAPPER mcExpSimRes math_Simplify(long flags, mcElement *p)
01889   { return hlp()->math_Simplify(flags, p); }
01890   mcWRAPPER mcExpSimRes math_Expand(long flags, mcElement *p)
01891   { return hlp()->math_Expand(flags, p); }
01892 
01893  mcWRAPPER const mcElement &math_Get(int n) const
01894   { return hlp()->math_Get(n); }
01895  mcWRAPPER mcElement &math_Get(int n)
01896   { return hlp()->math_Get(n); }
01897  mcWRAPPER int math_GetCount() const
01898   { return hlp()->math_GetCount(); }
01899 
01900  mcWRAPPER int math_GetIndexOf(int occ, const mcElement &tofind) const
01901   { return hlp()->math_GetIndexOf(occ, tofind); }
01902 
01903  mcWRAPPER mcElementType math_GetOpTypeBetween(int n1, int n2) const
01904   { return hlp()->math_GetOpTypeBetween(n1, n2); }
01905  mcWRAPPER mcElementType math_GetOpTypePreceding(int n) const
01906   { return hlp()->math_GetOpTypePreceding(n); }
01907  mcWRAPPER mcOperator &math_GetOpBetween(int n1, int n2) const
01908   { return hlp()->math_GetOpBetween(n1, n2); }
01909  mcWRAPPER mcOperator &math_GetOpPreceding(int n) const
01910   { return hlp()->math_GetOpPreceding(n); }
01911 
01912  mcWRAPPER bool math_Remove(int n, bool bAddZero = TRUE)
01913   { return hlp()->math_Remove(n, bAddZero); }
01914  mcWRAPPER bool math_Delete(int n, const mcElement &elem, bool bAddZero = TRUE)
01915   { return hlp()->math_Delete(n, elem, bAddZero); }
01916  mcWRAPPER void math_ApplyOp(mcElementType optype, mcElement res, const mcElement &factor, mcElement *pp)
01917   { hlp()->math_ApplyOp(optype, res, factor, pp); }
01918  mcWRAPPER void math_ApplyOpSimple(mcElementType optype, mcElement res, const mcElement &factor)
01919   { hlp()->math_ApplyOpSimple(optype, res, factor); }
01920 
01921  mcWRAPPER bool math_isWrappingOnly(mcElementType t) const
01922   { return hlp()->math_isWrappingOnly(t); }
01923 
01924  mcWRAPPER const mcElement &math_GetWrapped(mcElementType t) const
01925   { return hlp()->math_GetWrapped(t); }
01926  mcWRAPPER mcArrayEntry math_WrapMonomial(const mcMonomial &m)
01927   { return hlp()->math_WrapMonomial(m); }
01928  mcWRAPPER mcArrayEntry math_WrapSimple(const mcElement &e)
01929   { return hlp()->math_WrapSimple(e); }
01930  mcWRAPPER mcArrayEntry math_WrapSymbol(const mcSymbolProperties *sym)
01931   { return hlp()->math_WrapSymbol(sym); }
01932  mcWRAPPER mcArrayEntry math_WrapNumber(const mcRealValue &val)
01933   { return hlp()->math_WrapNumber(val); }
01934 
01935  mcWRAPPER bool math_isWrappingNumOnly() const  
01936   { return hlp()->math_isWrappingNumOnly(); }
01937  mcWRAPPER bool math_isWrappingSymOnly() const  
01938   { return hlp()->math_isWrappingSymOnly(); }
01939 
01940  mcWRAPPER mcRealValue math_GetWrappedNumber() const
01941   { return hlp()->math_GetWrappedNumber(); }
01942 
01943  mcWRAPPER const mcSymbolProperties *math_GetWrappedSymbol() const
01944   { return hlp()->math_GetWrappedSymbol(); }
01945  mcWRAPPER bool math_isWrappingOnly(const mcSymbolProperties *sym) const
01946   { return hlp()->math_isWrappingOnly(sym); }
01947  mcWRAPPER bool math_isWrappingOnly(const mcRealValue &val) const
01948   { return hlp()->math_isWrappingOnly(val); }
01949 
01950  mcWRAPPER void math_ResetToOne()
01951   { hlp()->math_ResetToOne(); }
01952  mcWRAPPER void math_ResetToZero()
01953   { hlp()->math_ResetToZero(); }
01954 
01955  mcWRAPPER mcArrayEntry math_EmbedInFraction(bool bAsDenominator = FALSE) 
01956   { return hlp()->math_EmbedInFraction(bAsDenominator); }
01957  mcWRAPPER mcArrayEntry math_EmbedInBracket()
01958   { return hlp()->math_EmbedInBracket(); }
01959  mcWRAPPER mcArrayEntry math_EmbedInRadical()
01960   { return hlp()->math_EmbedInRadical(); }
01961 
01962  mcWRAPPER int math_DataToMathIdx(int dataindex) const
01963   { return hlp()->math_DataToMathIdx(dataindex); }
01964  mcWRAPPER int math_MathToDataIdx(int mathindex) const
01965   { return hlp()->math_MathToDataIdx(mathindex); }
01966 
01967 /* mcElementType math_GetNeutralOpType() const
01968  mcWRAPPER double math_GetNeutralValue() const
01969 
01970  mcWRAPPER mcPolynomial math_GetPolynomialWrapper() const
01971 
01972  mcWRAPPER mcElementArray math_CreateWrapperFor(const mcElement &p) const
01973 
01974  mcWRAPPER mcPolynomial math_GetFactors() const*/
01975 /*
01976  mcWRAPPER void math_RaiseChildrenTo(const mcPolynomial &p)
01977   { hlp()->math_RaiseChildrenTo(p); }
01978  mcWRAPPER void math_RaiseChildrenTo(const mcRealValue &p)
01979   { hlp()->math_RaiseChildrenTo(p); }
01980 */
01981  mcWRAPPER void math_EmbedInBracketAndRaiseTo(const mcRealValue &n)
01982   { hlp()->math_EmbedInBracketAndRaiseTo(n); }
01983  mcWRAPPER void math_EmbedInBracketAndRaiseTo(const mcPolynomial &p)
01984   { hlp()->math_EmbedInBracketAndRaiseTo(p); }
01985 
01986 #endif  // mcENABLE_MATH
01987 };
01988 
01989 
01990 #endif // ELEMENTARRAY_H
01991 


Documentation generated with Doxygen on Sun Feb 6 17:10:46 2005
Visit MathStudio home page for more info

[ Top ]