]> git.lyx.org Git - features.git/blob - src/mathed/array.h
c9cff48a7137d594f492dbe3ad2ce0ff3d17aeda
[features.git] / src / mathed / array.h
1 // -*- C++ -*-
2 /*
3  *  Purpose:     A general purpose resizable array.  
4  *  Author:      Alejandro Aguilar Sierra <asierra@servidor.unam.mx> 
5  *  Created:     January 1996
6  *
7  *  Dependencies: None (almost)
8  *
9  *  Copyright: 1996, Alejandro Aguilar Sierra
10  *                 1997  The LyX Team!
11  *
12  *   You are free to use and modify this code under the terms of
13  *   the GNU General Public Licence version 2 or later.
14  */
15
16 #ifndef MATHEDARRAY_H
17 #define MATHEDARRAY_H
18
19 #include <vector>
20
21 #include "mathed/support.h"
22
23 class MathedInset;
24
25 #ifdef __GNUG__
26 #pragma interface
27 #endif
28
29 /** \class MathedArray
30     \brief A resizable array.
31     
32     A general purpose resizable array.
33     
34     \author Alejandro Aguilar Sierra
35     \author André Pönitz
36     \author Lars Gullik Bjønnes
37     \version February 2001
38   */
39 class MathedArray  {
40 public:
41         ///
42         typedef std::vector<byte>         buffer_type;
43         typedef byte                      value_type;
44         typedef buffer_type::size_type    size_type;
45         typedef buffer_type::iterator iterator;
46         typedef buffer_type::const_iterator const_iterator;
47         
48         ///
49         MathedArray();
50
51         ///
52         iterator begin();
53         ///
54         iterator end();
55         ///
56         const_iterator begin() const;
57         ///
58         const_iterator end() const;
59         
60         ///
61         int empty() const;
62    
63         ///
64         int last() const;
65         ///
66         void last(int l);
67
68 #if 0
69         ///
70         void insert(iterator pos, const_iterator beg, const_iterator end);
71 #else
72         /// Merge \a dx elements from array \a a at \apos.
73         /// This doesn't changes the size (dangerous)
74         void mergeF(MathedArray * a, int pos, int dx); 
75 #endif
76         ///
77         void raw_pointer_copy(MathedInset ** p, int pos) const;
78 #if 0
79         ///
80         void insertInset(int pos, MathedInset * p, int type);
81         ///
82         MathedInset * getInset(int pos);
83 #else
84         ///
85         void raw_pointer_insert(void * p, int pos, int len);
86 #endif
87         ///
88         void strange_copy(MathedArray * dest, int dpos, int spos, int len);
89         ///
90         byte operator[](int) const;
91         ///
92         byte & operator[](int i);
93         
94         ///
95         void move(int p, int shift);
96         ///
97         void resize(int newsize);
98         /// Make sure we can access at least \a needed elements
99         void need_size(int needed);
100 private:
101         /// Buffer
102         buffer_type bf_;
103 #if 0
104         ///
105         struct InsetTable {
106                 ///
107                 int pos;
108                 ///
109                 MathedInset * inset;
110                 ///
111                 InsetTable(int p, MathedInset * i)
112                         : pos(p), inset(i) {}
113                 
114         };
115         /// 
116         typedef std::vector<InsetTable> InsetList;
117         /// The list of insets in this array.
118         InsetList insetList_;
119 #endif
120         /// Last position inserted.
121         int last_;
122 };
123 #endif