Jpp
JArray.hh
Go to the documentation of this file.
1 #ifndef __JTOOLS__JARRAY__
2 #define __JTOOLS__JARRAY__
3 
4 #include <stdarg.h>
5 #include <iterator>
6 #include <algorithm>
7 
8 #include "JIO/JSerialisable.hh"
9 #include "JTools/JMultiKey.hh"
10 #include "JMath/JMath.hh"
11 #include "JLang/JAssert.hh"
12 #include "JLang/JClass.hh"
13 #include "JLang/JException.hh"
14 #include "JLang/JEquals.hh"
15 
16 
17 /**
18  * \author mdejong
19  */
20 
21 namespace JTOOLS {}
22 namespace JPP { using namespace JTOOLS; }
23 
24 namespace JTOOLS {
25 
26  using JIO::JReader;
27  using JIO::JWriter;
29 
30 
31  /**
32  * One dimensional array of template objects with fixed length.
33  * The internal data structure consists of a standard C-array.
34  */
35  template<unsigned int N, class T>
36  class JArray :
37  public JMATH::JMath < JArray<N,T> >,
38  public JLANG::JEquals< JArray<N,T> >
39  {
40  public:
41 
42  typedef const T* const_pointer;
43  typedef T* pointer;
44  typedef const T* const_iterator;
45  typedef T* iterator;
46  typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
47  typedef std::reverse_iterator<iterator> reverse_iterator;
48  typedef T& reference;
49  typedef const T& const_reference;
50  typedef unsigned int size_type;
52 
53 
54  /**
55  * Default constructor.
56  */
58  {}
59 
60 
61  /**
62  * Append constructor.
63  *
64  * \param array array
65  * \param value value
66  */
67  JArray(const JArray<N-1, T>& array, argument_type value)
68  {
69  std::copy_n(array.data(), N-1, this->data());
70 
71  this->buffer[N-1] = value;
72  }
73 
74 
75  /**
76  * Append constructor.
77  *
78  * \param array array
79  * \param value value
80  */
82  {
83  std::copy_n(array.data(), N-1, this->data());
84 
85  this->buffer[N-1] = value;
86  }
87 
88 
89  /**
90  * Copy constructor.
91  *
92  * \param array array
93  */
94  template<unsigned int M>
95  JArray(const JArray<M, T>& array)
96  {
97  std::copy_n(array.data(), N-1 < M ? N-1 : M, this->data());
98  }
99 
100 
101  /**
102  * Copy constructor.
103  *
104  * \param array array
105  */
106  template<unsigned int M>
108  {
109  std::copy_n(array.data(), N-1 < M ? N-1 : M, this->data());
110  }
111 
112 
113  /**
114  * Initialise constructor.
115  *
116  * \param x first value
117  * \param y second value
118  */
119  JArray(argument_type x, argument_type y, ...)
120  {
121  va_list ap;
122 
123  va_start(ap, y);
124 
125  buffer[0] = x; // first argument
126  buffer[1] = y; // second argument
127 
128  for (unsigned int i = 2; i != N; ++i) {
129 
130  T value = va_arg(ap, T);
131 
132  buffer[i] = value; // next argument
133  }
134 
135  va_end(ap);
136  }
137 
138 
139  /**
140  * Constructor.
141  *
142  * \param p pointer to data
143  */
144  JArray(const T* p)
145  {
146  std::copy_n(p, N, data());
147  }
148 
149 
150  /**
151  * Constructor.
152  *
153  * \param key multi-dimensional key
154  */
156  {
157  assign(key);
158  }
159 
160 
161  /**
162  * Constructor.
163  *
164  * \param key multi-dimensional key
165  */
167  {
168  assign(key);
169  }
170 
171 
172  /**
173  * Set array.
174  *
175  * \param array array
176  * \return this array
177  */
178  JArray& operator=(const JArray& array)
179  {
180  for (int i = 0; i != N; ++i) {
181  buffer[i] = array[i];
182  }
183 
184  return *this;
185  }
186 
187 
188  const_iterator begin() const { return buffer; } //!< get iterator to begin of data
189  const_iterator end() const { return buffer + N; } //!< get iterator to end of data
190 
191 
192  iterator begin() { return buffer; } //!< get iterator to begin of data
193  iterator end() { return buffer + N; } //!< get iterator to end of data
194 
195 
196  const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); } //!< get reverse iterator to begin of data
197  const_reverse_iterator rend() const { return const_reverse_iterator(begin()); } //!< get reverse iterator to begin of data
198 
199 
200  reverse_iterator rbegin() { return reverse_iterator(end()); } //!< get reverse iterator to begin of data
201  reverse_iterator rend() { return reverse_iterator(begin()); } //!< get reverse iterator to end of data
202 
203 
204  /**
205  * Get element at given index.
206  *
207  * \param index index
208  * \return element
209  */
210  const_reference operator[](int index) const
211  {
212  return buffer[index];
213  }
214 
215 
216  /**
217  * Get element at given index.
218  *
219  * \param index index
220  * \return element
221  */
223  {
224  return buffer[index];
225  }
226 
227 
228  /**
229  * Get element at given index.
230  *
231  * \param index index
232  * \return element at index
233  */
234  const_reference at(int index) const
235  {
236  if (index >= 0 && index < N)
237  return buffer[index];
238  else
239  throw JIndexOutOfRange("JArray<>::at()");
240  }
241 
242 
243  /**
244  * Get element at given index.
245  *
246  * \param index index
247  * \return element at index
248  */
249  reference at(int index)
250  {
251  if (index >= 0 && index < N)
252  return buffer[index];
253  else
254  throw JIndexOutOfRange("JArray<>::at()");
255  }
256 
257 
258  /**
259  * Get pointer to data.
260  *
261  * \return pointer to data
262  */
264  {
265  return buffer;
266  }
267 
268 
269  /**
270  * Get pointer to data.
271  *
272  * \return pointer to data
273  */
275  {
276  return buffer;
277  }
278 
279 
280  /**
281  * Get size of data.
282  *
283  * \return size of data
284  */
285  static size_type size()
286  {
287  return N;
288  }
289 
290 
291  /**
292  * Make a copy in which the first element is removed.
293  *
294  * \return array
295  */
296  JArray<N-1, T> pop_front() const
297  {
298  return JArray<N-1, T>(&buffer[1]);
299  }
300 
301 
302  /**
303  * Make a copy in which the last element is removed.
304  *
305  * \return array
306  */
307  JArray<N-1, T> pop_back() const
308  {
309  return JArray<N-1, T>(buffer);
310  }
311 
312 
313  /**
314  * Negate array.
315  *
316  * \return this array
317  */
319  {
320  for (int i = 0; i != N; ++i) {
321  buffer[i] = -buffer[i];
322  }
323 
324  return *this;
325  }
326 
327 
328  /**
329  * Add array.
330  *
331  * \param array array
332  * \return this array
333  */
334  JArray& add(const JArray& array)
335  {
336  for (int i = 0; i != N; ++i) {
337  buffer[i] += array[i];
338  }
339 
340  return *this;
341  }
342 
343 
344  /**
345  * Subtract array.
346  *
347  * \param array array
348  * \return this array
349  */
350  JArray& sub(const JArray& array)
351  {
352  for (int i = 0; i != N; ++i) {
353  buffer[i] -= array[i];
354  }
355 
356  return *this;
357  }
358 
359 
360  /**
361  * Scale array.
362  *
363  * \param factor multiplication factor
364  * \return this array
365  */
366  JArray& mul(const double factor)
367  {
368  for (int i = 0; i != N; ++i) {
369  buffer[i] *= factor;
370  }
371 
372  return *this;
373  }
374 
375 
376  /**
377  * Scale array.
378  *
379  * \param factor division factor
380  * \return this array
381  */
382  JArray& div(const double factor)
383  {
384  for (int i = 0; i != N; ++i) {
385  buffer[i] /= factor;
386  }
387 
388  return *this;
389  }
390 
391 
392  /**
393  * Check equality.
394  *
395  * \param array array
396  * \return true if arrays are equal; else false
397  */
398  bool equals(const JArray<N, T>& array) const
399  {
400  for (int i = 0; i != N; ++i) {
401  if (buffer[i] != array[i]) {
402  return false;
403  }
404  }
405 
406  return true;
407  }
408 
409 
410  /**
411  * Read array from input.
412  *
413  * \param in reader
414  * \param buffer array
415  * \return reader
416  */
417  friend inline JReader& operator>>(JReader& in, JArray& buffer)
418  {
419  for (iterator i = buffer.begin(); i != buffer.end(); ++i) {
420  in >> *i;
421  }
422 
423  return in;
424  }
425 
426 
427  /**
428  * Write array to output.
429  *
430  * \param out writer
431  * \param buffer array
432  * \return writer
433  */
434  friend inline JWriter& operator<<(JWriter& out, const JArray& buffer)
435  {
436  for (const_iterator i = buffer.begin(); i != buffer.end(); ++i) {
437  out << *i;
438  }
439 
440  return out;
441  }
442 
443  protected:
444 
445  T buffer[N];
446 
447  /**
448  * Assign multidimensional key to array.
449  *
450  * \param key multi-dimensional key
451  */
452  template<unsigned int M>
453  void assign(const JMultiKey<M, T>& key)
454  {
455  buffer[N-M] = key.first;
456 
457  assign(key.second);
458  }
459 
460 
461  /**
462  * Assign multidimensional key to array.
463  *
464  * \param key multi-dimensional key
465  */
466  template<unsigned int M>
467  void assign(const JMultiKey<M, const T>& key)
468  {
469  buffer[N-M] = key.first;
470 
471  assign(key.second);
472  }
473 
474 
475  /**
476  * Assign one-dimensional key to array.
477  *
478  * \param key one-dimensional key
479  */
480  void assign(const JMultiKey<1, T>& key)
481  {
482  buffer[N-1] = key.first;
483  }
484 
485 
486  /**
487  * Assign one-dimensional key to array.
488  *
489  * \param key one-dimensional key
490  */
491  void assign(const JMultiKey<1, const T>& key)
492  {
493  buffer[N-1] = key.first;
494  }
495  };
496 
497 
498  /**
499  * One dimensional array of template objects with fixed length.
500  * The internal data structure consists of a standard C-array.
501  */
502  template<class T>
503  class JArray<1, T> :
504  public JMATH::JMath < JArray<1,T> >,
505  public JLANG::JEquals< JArray<1,T> >
506  {
507  public:
508 
509  static const unsigned int N = 1;
510 
511  typedef const T* const_pointer;
512  typedef T* pointer;
513  typedef const T* const_iterator;
514  typedef T* iterator;
515  typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
516  typedef std::reverse_iterator<iterator> reverse_iterator;
517  typedef T& reference;
518  typedef const T& const_reference;
519  typedef unsigned int size_type;
521 
522 
523  /**
524  * Default constructor.
525  */
527  {}
528 
529 
530  /**
531  * Copy constructor.
532  *
533  * \param array array
534  */
535  template<unsigned int M>
536  JArray(const JArray<M, T>& array)
537  {
538  buffer[0] = array[0];
539  }
540 
541 
542  /**
543  * Copy constructor.
544  *
545  * \param array array
546  */
547  template<unsigned int M>
549  {
550  buffer[0] = array[0];
551  }
552 
553 
554  /**
555  * Initialise constructor.
556  *
557  * \param x value;
558  */
560  {
561  buffer[0] = x;
562  }
563 
564 
565  /**
566  * Constructor.
567  *
568  * \param p pointer to data
569  */
570  JArray(const T* p)
571  {
572  buffer[0] = p[0];
573  }
574 
575 
576  /**
577  * Constructor.
578  *
579  * \param key multi-dimensional key
580  */
582  {
583  buffer[0] = key.first;
584  }
585 
586 
587  /**
588  * Constructor.
589  *
590  * \param key multi-dimensional key
591  */
593  {
594  buffer[0] = key.first;
595  }
596 
597 
598  const_iterator begin() const { return buffer; } //!< get iterator to begin of data
599  const_iterator end() const { return buffer + N; } //!< get iterator to end of data
600 
601 
602  iterator begin() { return buffer; } //!< get iterator to begin of data
603  iterator end() { return buffer + N; } //!< get iterator to end of data
604 
605 
606  const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); } //!< get reverse iterator to begin of data
607  const_reverse_iterator rend() const { return const_reverse_iterator(begin()); } //!< get reverse iterator to begin of data
608 
609 
610  reverse_iterator rbegin() { return reverse_iterator(end()); } //!< get reverse iterator to begin of data
611  reverse_iterator rend() { return reverse_iterator(begin()); } //!< get reverse iterator to end of data
612 
613 
614  /**
615  * Get element at given index.
616  *
617  * \param index index
618  * \return element
619  */
620  const_reference operator[](int index) const
621  {
622  return buffer[index];
623  }
624 
625 
626  /**
627  * Get element at given index.
628  *
629  * \param index index
630  * \return element
631  */
633  {
634  return buffer[index];
635  }
636 
637 
638  /**
639  * Get element at given index.
640  *
641  * \param index index
642  * \return element at index
643  */
644  const_reference at(int index) const
645  {
646  if (index >= 0 && index < N)
647  return buffer[index];
648  else
649  throw JIndexOutOfRange("JArray<>::at()");
650  }
651 
652 
653  /**
654  * Get element at given index.
655  *
656  * \param index index
657  * \return element at index
658  */
659  reference at(int index)
660  {
661  if (index >= 0 && index < N)
662  return buffer[index];
663  else
664  throw JIndexOutOfRange("JArray<>::at()");
665  }
666 
667 
668  /**
669  * Get pointer to data.
670  *
671  * \return pointer to data
672  */
674  {
675  return buffer;
676  }
677 
678 
679  /**
680  * Get pointer to data.
681  *
682  * \return pointer to data
683  */
685  {
686  return buffer;
687  }
688 
689 
690  /**
691  * Get size of data.
692  *
693  * \return size of data
694  */
695  static size_type size()
696  {
697  return N;
698  }
699 
700 
701  /**
702  * Negate array.
703  *
704  * \return this array
705  */
707  {
708  buffer[0] = -buffer[0];
709 
710  return *this;
711  }
712 
713 
714  /**
715  * Add array.
716  *
717  * \param array array
718  * \return this array
719  */
720  JArray& add(const JArray& array)
721  {
722  buffer[0] += array[0];
723 
724  return *this;
725  }
726 
727 
728  /**
729  * Subtract array.
730  *
731  * \param array array
732  * \return this array
733  */
734  JArray& sub(const JArray& array)
735  {
736  buffer[0] -= array[0];
737 
738  return *this;
739  }
740 
741 
742  /**
743  * Scale array.
744  *
745  * \param factor multiplication factor
746  * \return this array
747  */
748  JArray& mul(const double factor)
749  {
750  buffer[0] *= factor;
751 
752  return *this;
753  }
754 
755 
756  /**
757  * Scale array.
758  *
759  * \param factor division factor
760  * \return this array
761  */
762  JArray& div(const double factor)
763  {
764  buffer[0] /= factor;
765 
766  return *this;
767  }
768 
769 
770  /**
771  * Check equality.
772  *
773  * \param array array
774  * \return true if arrays are equal; else false
775  */
776  bool equals(const JArray<N, T>& array) const
777  {
778  return buffer[0] == array[0];
779  }
780 
781 
782  /**
783  * Read array from input.
784  *
785  * \param in reader
786  * \param buffer array
787  * \return reader
788  */
789  friend inline JReader& operator>>(JReader& in, JArray& buffer)
790  {
791  return in >> buffer[0];
792  }
793 
794 
795  /**
796  * Write array to output.
797  *
798  * \param out writer
799  * \param buffer array
800  * \return writer
801  */
802  friend inline JWriter& operator<<(JWriter& out, const JArray& buffer)
803  {
804  return out << buffer[0];
805  }
806 
807  protected:
808  T buffer[1];
809  };
810 
811 
812  /**
813  * Template specialisation of JArray for invalid zero length array.
814  */
815  template<class T>
816  class JArray<0, T>;
817 
818 
819  /**
820  * One dimensional read-only array of template objects with fixed length.
821  * The internal data structure consists of a simple C-pointer to the actual data.
822  * The user should ensure that the data are persistent.
823  */
824  template<unsigned int N, class T>
825  class JArray<N, const T> {
826  public:
827 
828  friend class JArray<N + 1, const T>;
829 
830  typedef const T* const_pointer;
831  typedef const T* const_iterator;
832  typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
833  typedef const T& const_reference;
834  typedef unsigned int size_type;
835 
836 
837  /**
838  * Copy constructor.
839  *
840  * \param array array
841  */
842  template<unsigned int M>
843  JArray(const JArray<M, T>& array) :
844  p(array.data())
845  {
846  STATIC_CHECK(M >= N);
847  }
848 
849 
850  /**
851  * Copy constructor.
852  *
853  * \param array array
854  */
855  template<unsigned int M>
856  JArray(const JArray<M, const T>& array) :
857  p(array.data())
858  {
859  STATIC_CHECK(M >= N);
860  }
861 
862 
863  const_iterator begin() const { return p; } //!< get iterator to begin of data
864  const_iterator end() const { return p + N; } //!< get iterator to end of data
865 
866 
867  const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); } //!< get reverse iterator to begin of data
868  const_reverse_iterator rend() const { return const_reverse_iterator(begin()); } //!< get reverse iterator to end of data
869 
870 
871  /**
872  * Get element at given index.
873  *
874  * \param index index
875  * \return element at index
876  */
877  const_reference operator[](int index) const
878  {
879  return p[index];
880  }
881 
882 
883  /**
884  * Get element at given index.
885  *
886  * \param index index
887  * \return element at index
888  */
889  const_reference at(int index) const
890  {
891  if (index >= 0 && index < N)
892  return p[index];
893  else
894  throw JIndexOutOfRange("JArray<>::at()");
895  }
896 
897 
898  /**
899  * Get pointer to data.
900  *
901  * \return pointer to data
902  */
904  {
905  return p;
906  }
907 
908 
909  /**
910  * Get size of data.
911  *
912  * \return size of data
913  */
914  static size_type size()
915  {
916  return N;
917  }
918 
919 
920  /**
921  * Make a copy in which the first element is removed.
922  *
923  * \return array
924  */
925  JArray<N-1, const T> pop_front() const
926  {
927  return JArray<N-1, const T>(p + 1);
928  }
929 
930 
931  /**
932  * Make a copy in which the last element is removed.
933  *
934  * \return array
935  */
936  JArray<N-1, const T> pop_back() const
937  {
938  return JArray<N-1, const T>(p);
939  }
940 
941 
942  /**
943  * Write array to output.
944  *
945  * \param out writer
946  * \param buffer array
947  * \return writer
948  */
949  friend inline JWriter& operator<<(JWriter& out, const JArray& buffer)
950  {
951  for (const_iterator i = buffer.begin(); i != buffer.end(); ++i) {
952  out << *i;
953  }
954 
955  return out;
956  }
957 
958  protected:
959 
961 
962  /**
963  * Constructor.
964  *
965  * \param __p pointer to data
966  */
967  JArray(const T* __p) :
968  p(__p)
969  {}
970  };
971 
972 
973  /**
974  * One dimensional read-only array of template objects with fixed length.
975  * The internal data structure consists of a simple C-pointer to the actual data.
976  * The user should ensure that the data are persistent.
977  */
978  template<class T>
979  class JArray<1, const T> {
980  public:
981 
982  static const unsigned int N = 1;
983 
984  friend class JArray<N + 1, const T>;
985 
986  typedef const T* const_pointer;
987  typedef const T* const_iterator;
988  typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
989  typedef const T& const_reference;
990  typedef unsigned int size_type;
991 
992 
993  /**
994  * Copy constructor.
995  *
996  * \param array array
997  */
998  template<unsigned int M>
999  JArray(const JArray<M, T>& array) :
1000  p(array.data())
1001  {
1002  STATIC_CHECK(M >= N);
1003  }
1004 
1005 
1006  /**
1007  * Copy constructor.
1008  *
1009  * \param array array
1010  */
1011  template<unsigned int M>
1012  JArray(const JArray<M, const T>& array) :
1013  p(array.data())
1014  {
1015  STATIC_CHECK(M >= N);
1016  }
1017 
1018 
1019  const_iterator begin() const { return p; } //!< get iterator to begin of data
1020  const_iterator end() const { return p + N; } //!< get iterator to end of data
1021 
1022 
1023  const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); } //!< get reverse iterator to begin of data
1024  const_reverse_iterator rend() const { return const_reverse_iterator(begin()); } //!< get reverse iterator to end of data
1025 
1026 
1027  /**
1028  * Get element at given index.
1029  *
1030  * \param index index
1031  * \return element at index
1032  */
1033  const_reference operator[](int index) const
1034  {
1035  return p[index];
1036  }
1037 
1038 
1039  /**
1040  * Get element at given index.
1041  *
1042  * \param index index
1043  * \return element at index
1044  */
1045  const_reference at(int index) const
1046  {
1047  if (index >= 0 && index < N)
1048  return p[index];
1049  else
1050  throw JIndexOutOfRange("JArray<>::at()");
1051  }
1052 
1053 
1054  /**
1055  * Get pointer to data.
1056  *
1057  * \return pointer to data
1058  */
1060  {
1061  return p;
1062  }
1063 
1064 
1065  /**
1066  * Get size of data.
1067  *
1068  * \return size of data
1069  */
1070  static size_type size()
1071  {
1072  return N;
1073  }
1074 
1075 
1076  /**
1077  * Write array to output.
1078  *
1079  * \param out writer
1080  * \param buffer array
1081  * \return writer
1082  */
1083  friend inline JWriter& operator<<(JWriter& out, const JArray& buffer)
1084  {
1085  return out << buffer[0];
1086  }
1087 
1088  protected:
1089 
1091 
1092  /**
1093  * Constructor.
1094  *
1095  * \param __p pointer to data
1096  */
1097  JArray(const T* __p) :
1098  p(__p)
1099  {}
1100  };
1101 
1102 
1103  /**
1104  * Template specialisation of JArray for invalid zero length array.
1105  */
1106  template<class T>
1107  class JArray<0, const T>;
1108 }
1109 
1110 #endif
JTOOLS::JArray::at
const_reference at(int index) const
Get element at given index.
Definition: JArray.hh:234
JTOOLS::JArray< 1, const T >::operator[]
const_reference operator[](int index) const
Get element at given index.
Definition: JArray.hh:1033
JException.hh
JTOOLS::JArray::assign
void assign(const JMultiKey< 1, T > &key)
Assign one-dimensional key to array.
Definition: JArray.hh:480
JTOOLS::JArray::JArray
JArray(const JMultiKey< N, const T > &key)
Constructor.
Definition: JArray.hh:166
JTOOLS::JArray< N, const T >::p
const_pointer p
Definition: JArray.hh:960
JIO::JReader
Interface for binary input.
Definition: JSerialisable.hh:62
JTOOLS::JArray::begin
const_iterator begin() const
get iterator to begin of data
Definition: JArray.hh:188
JTOOLS::JArray< 1, T >::div
JArray & div(const double factor)
Scale array.
Definition: JArray.hh:762
JLANG::JIndexOutOfRange
Exception for accessing an index in a collection that is outside of its range.
Definition: JException.hh:90
JTOOLS::JArray::pop_back
JArray< N-1, T > pop_back() const
Make a copy in which the last element is removed.
Definition: JArray.hh:307
JTOOLS::JArray< 1, const T >::begin
const_iterator begin() const
get iterator to begin of data
Definition: JArray.hh:1019
JTOOLS::JArray< 1, T >::JArray
JArray(const JArray< M, T > &array)
Copy constructor.
Definition: JArray.hh:536
JTOOLS::JArray< 1, const T >::const_iterator
const typedef T * const_iterator
Definition: JArray.hh:987
JTOOLS::JArray::JArray
JArray(const JArray< M, T > &array)
Copy constructor.
Definition: JArray.hh:95
JTOOLS::JArray< 1, T >::mul
JArray & mul(const double factor)
Scale array.
Definition: JArray.hh:748
JTOOLS::JArray< 1, T >::operator>>
friend JReader & operator>>(JReader &in, JArray &buffer)
Read array from input.
Definition: JArray.hh:789
JTOOLS::JArray::JArray
JArray(const JArray< M, const T > &array)
Copy constructor.
Definition: JArray.hh:107
JTOOLS::JArray::reverse_iterator
std::reverse_iterator< iterator > reverse_iterator
Definition: JArray.hh:47
JTOOLS::JArray::const_reference
const typedef T & const_reference
Definition: JArray.hh:49
JTOOLS::JArray::size_type
unsigned int size_type
Definition: JArray.hh:50
JTOOLS::JArray< N, const T >::data
const_pointer data() const
Get pointer to data.
Definition: JArray.hh:903
JTOOLS::JArray::const_reverse_iterator
std::reverse_iterator< const_iterator > const_reverse_iterator
Definition: JArray.hh:46
JTOOLS::JArray< 1, const T >::size
static size_type size()
Get size of data.
Definition: JArray.hh:1070
JLANG::JEquals
Template definition of auxiliary base class for comparison of data structures.
Definition: JEquals.hh:24
STATIC_CHECK
#define STATIC_CHECK(expr)
Definition: JAssert.hh:29
JTOOLS::JArray< 1, T >::sub
JArray & sub(const JArray &array)
Subtract array.
Definition: JArray.hh:734
JTOOLS::JArray< 1, T >::at
reference at(int index)
Get element at given index.
Definition: JArray.hh:659
JTOOLS::JArray::assign
void assign(const JMultiKey< M, T > &key)
Assign multidimensional key to array.
Definition: JArray.hh:453
JTOOLS::JArray::JArray
JArray(const JArray< N-1, const T > &array, argument_type value)
Append constructor.
Definition: JArray.hh:81
JLANG::JClass::argument_type
JArgument< T >::argument_type argument_type
Definition: JClass.hh:82
JTOOLS::JArray< 1, const T >::at
const_reference at(int index) const
Get element at given index.
Definition: JArray.hh:1045
JTOOLS::JArray
One dimensional array of template objects with fixed length.
Definition: JArray.hh:36
JTOOLS::JArray::negate
JArray & negate()
Negate array.
Definition: JArray.hh:318
JTOOLS::JArray< N, const T >::rbegin
const_reverse_iterator rbegin() const
get reverse iterator to begin of data
Definition: JArray.hh:867
JTOOLS::JArray::end
iterator end()
get iterator to end of data
Definition: JArray.hh:193
JTOOLS::JArray< 1, const T >::size_type
unsigned int size_type
Definition: JArray.hh:990
JTOOLS::JArray::buffer
T buffer[N]
Definition: JArray.hh:445
JTOOLS::JArray::iterator
T * iterator
Definition: JArray.hh:45
JTOOLS::JArray::operator[]
const_reference operator[](int index) const
Get element at given index.
Definition: JArray.hh:210
JTOOLS::JArray< N, const T >::size_type
unsigned int size_type
Definition: JArray.hh:834
JTOOLS::JArray< 1, T >::pointer
T * pointer
Definition: JArray.hh:512
JTOOLS::JArray< 1, const T >::end
const_iterator end() const
get iterator to end of data
Definition: JArray.hh:1020
JTOOLS::JArray< 1, T >::const_pointer
const typedef T * const_pointer
Definition: JArray.hh:511
JTOOLS::JArray::data
const_pointer data() const
Get pointer to data.
Definition: JArray.hh:263
JMultiKey.hh
JTOOLS::JArray::assign
void assign(const JMultiKey< M, const T > &key)
Assign multidimensional key to array.
Definition: JArray.hh:467
JTOOLS::JArray< 1, const T >::rend
const_reverse_iterator rend() const
get reverse iterator to end of data
Definition: JArray.hh:1024
JTOOLS::JArray< 1, T >::argument_type
JLANG::JClass< T >::argument_type argument_type
Definition: JArray.hh:520
JTOOLS::JArray::div
JArray & div(const double factor)
Scale array.
Definition: JArray.hh:382
JTOOLS::JArray< 1, T >::JArray
JArray(const JMultiKey< 1, T > &key)
Constructor.
Definition: JArray.hh:581
JMATH::JMath
Auxiliary base class for aritmetic operations of derived class types.
Definition: JMath.hh:26
JTOOLS::JArray< 1, T >::reference
T & reference
Definition: JArray.hh:517
JEquals.hh
JTOOLS::JArray< 1, T >::data
const_pointer data() const
Get pointer to data.
Definition: JArray.hh:673
JTOOLS::JArray< 1, T >::const_iterator
const typedef T * const_iterator
Definition: JArray.hh:513
JTOOLS::JArray::JArray
JArray(const T *p)
Constructor.
Definition: JArray.hh:144
JTOOLS::JArray< N, const T >::operator<<
friend JWriter & operator<<(JWriter &out, const JArray &buffer)
Write array to output.
Definition: JArray.hh:949
JPP
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Definition: JAAnetToolkit.hh:37
JTOOLS::JArray< 1, T >::negate
JArray & negate()
Negate array.
Definition: JArray.hh:706
JTOOLS::JArray::operator=
JArray & operator=(const JArray &array)
Set array.
Definition: JArray.hh:178
JTOOLS::JArray::JArray
JArray(argument_type x, argument_type y,...)
Initialise constructor.
Definition: JArray.hh:119
JTOOLS::JArray::size
static size_type size()
Get size of data.
Definition: JArray.hh:285
JTOOLS::JArray< 1, T >::data
pointer data()
Get pointer to data.
Definition: JArray.hh:684
JTOOLS::JArray< 1, T >::JArray
JArray(const JMultiKey< 1, const T > &key)
Constructor.
Definition: JArray.hh:592
JTOOLS::JArray< 1, const T >::const_reference
const typedef T & const_reference
Definition: JArray.hh:989
JTOOLS::JArray< 1, const T >::JArray
JArray(const T *__p)
Constructor.
Definition: JArray.hh:1097
JTOOLS::JArray::operator>>
friend JReader & operator>>(JReader &in, JArray &buffer)
Read array from input.
Definition: JArray.hh:417
JSerialisable.hh
JTOOLS::JArray::JArray
JArray(const JMultiKey< N, T > &key)
Constructor.
Definition: JArray.hh:155
JTOOLS::JArray< N, const T >::pop_back
JArray< N-1, const T > pop_back() const
Make a copy in which the last element is removed.
Definition: JArray.hh:936
JTOOLS::JArray::rbegin
reverse_iterator rbegin()
get reverse iterator to begin of data
Definition: JArray.hh:200
JTOOLS::JArray< 1, T >::operator[]
reference operator[](int index)
Get element at given index.
Definition: JArray.hh:632
JTOOLS::JArray< N, const T >::JArray
JArray(const T *__p)
Constructor.
Definition: JArray.hh:967
JTOOLS::JArray::operator<<
friend JWriter & operator<<(JWriter &out, const JArray &buffer)
Write array to output.
Definition: JArray.hh:434
JTOOLS::JArray< 1, T >::size_type
unsigned int size_type
Definition: JArray.hh:519
JIO::JWriter
Interface for binary output.
Definition: JSerialisable.hh:130
JTOOLS::JArray< 1, T >::const_reference
const typedef T & const_reference
Definition: JArray.hh:518
JTOOLS::JArray< 1, const T >::JArray
JArray(const JArray< M, const T > &array)
Copy constructor.
Definition: JArray.hh:1012
JTOOLS::JArray< N, const T >::const_reverse_iterator
std::reverse_iterator< const_iterator > const_reverse_iterator
Definition: JArray.hh:832
JTOOLS::JArray< 1, const T >::operator<<
friend JWriter & operator<<(JWriter &out, const JArray &buffer)
Write array to output.
Definition: JArray.hh:1083
JTOOLS::JArray< 1, T >::JArray
JArray(const JArray< M, const T > &array)
Copy constructor.
Definition: JArray.hh:548
JTOOLS::JArray::equals
bool equals(const JArray< N, T > &array) const
Check equality.
Definition: JArray.hh:398
JTOOLS::JArray::pointer
T * pointer
Definition: JArray.hh:43
JTOOLS::JArray::rend
const_reverse_iterator rend() const
get reverse iterator to begin of data
Definition: JArray.hh:197
JTOOLS::JArray::pop_front
JArray< N-1, T > pop_front() const
Make a copy in which the first element is removed.
Definition: JArray.hh:296
JTOOLS::JArray< N, const T >::size
static size_type size()
Get size of data.
Definition: JArray.hh:914
JTOOLS::JArray::const_iterator
const typedef T * const_iterator
Definition: JArray.hh:44
JTOOLS::JArray::argument_type
JLANG::JClass< T >::argument_type argument_type
Definition: JArray.hh:51
JTOOLS::JArray::reference
T & reference
Definition: JArray.hh:48
JTOOLS::JArray< 1, T >::rbegin
reverse_iterator rbegin()
get reverse iterator to begin of data
Definition: JArray.hh:610
JTOOLS::JArray< 1, T >::reverse_iterator
std::reverse_iterator< iterator > reverse_iterator
Definition: JArray.hh:516
JMath.hh
JTOOLS::JArray< 1, T >::const_reverse_iterator
std::reverse_iterator< const_iterator > const_reverse_iterator
Definition: JArray.hh:515
JTOOLS::JArray< 1, T >::end
iterator end()
get iterator to end of data
Definition: JArray.hh:603
JTOOLS::JArray::data
pointer data()
Get pointer to data.
Definition: JArray.hh:274
JTOOLS::JArray< N, const T >::end
const_iterator end() const
get iterator to end of data
Definition: JArray.hh:864
JTOOLS::JArray< 1, const T >::const_pointer
const typedef T * const_pointer
Definition: JArray.hh:986
JTOOLS::JArray< 1, T >::begin
const_iterator begin() const
get iterator to begin of data
Definition: JArray.hh:598
JTOOLS::JArray< 1, T >::begin
iterator begin()
get iterator to begin of data
Definition: JArray.hh:602
JTOOLS::JArray::assign
void assign(const JMultiKey< 1, const T > &key)
Assign one-dimensional key to array.
Definition: JArray.hh:491
JTOOLS::JArray::at
reference at(int index)
Get element at given index.
Definition: JArray.hh:249
JTOOLS::JArray< N, const T >::JArray
JArray(const JArray< M, const T > &array)
Copy constructor.
Definition: JArray.hh:856
JTOOLS::JArray< N, const T >::JArray
JArray(const JArray< M, T > &array)
Copy constructor.
Definition: JArray.hh:843
JTOOLS::JArray< 1, T >::add
JArray & add(const JArray &array)
Add array.
Definition: JArray.hh:720
JTOOLS::JArray::JArray
JArray(const JArray< N-1, T > &array, argument_type value)
Append constructor.
Definition: JArray.hh:67
JTOOLS::JArray< 1, T >::rbegin
const_reverse_iterator rbegin() const
get reverse iterator to begin of data
Definition: JArray.hh:606
JTOOLS::JArray< N, const T >::const_pointer
const typedef T * const_pointer
Definition: JArray.hh:830
JTOOLS::JArray::const_pointer
const typedef T * const_pointer
Definition: JArray.hh:42
JTOOLS::JArray< 1, T >::JArray
JArray()
Default constructor.
Definition: JArray.hh:526
JTOOLS::JArray< 1, T >::operator[]
const_reference operator[](int index) const
Get element at given index.
Definition: JArray.hh:620
JTOOLS::JArray< 1, T >::at
const_reference at(int index) const
Get element at given index.
Definition: JArray.hh:644
JTOOLS::JArray< 1, T >::end
const_iterator end() const
get iterator to end of data
Definition: JArray.hh:599
JTOOLS::JArray< 1, const T >::data
const_pointer data() const
Get pointer to data.
Definition: JArray.hh:1059
JTOOLS::JMultiKey
Forward declaration of template JMultiKey class.
Definition: JMultiKey.hh:29
JTOOLS::JArray< 1, const T >::rbegin
const_reverse_iterator rbegin() const
get reverse iterator to begin of data
Definition: JArray.hh:1023
JTOOLS::JArray< N, const T >::rend
const_reverse_iterator rend() const
get reverse iterator to end of data
Definition: JArray.hh:868
JTOOLS::JArray::add
JArray & add(const JArray &array)
Add array.
Definition: JArray.hh:334
JTOOLS::JArray::rbegin
const_reverse_iterator rbegin() const
get reverse iterator to begin of data
Definition: JArray.hh:196
JTOOLS::JArray< 1, T >::equals
bool equals(const JArray< N, T > &array) const
Check equality.
Definition: JArray.hh:776
JTOOLS::JArray< N, const T >::operator[]
const_reference operator[](int index) const
Get element at given index.
Definition: JArray.hh:877
JTOOLS::JArray< N, const T >::pop_front
JArray< N-1, const T > pop_front() const
Make a copy in which the first element is removed.
Definition: JArray.hh:925
JTOOLS::JArray< 1, T >::JArray
JArray(argument_type x)
Initialise constructor.
Definition: JArray.hh:559
JTOOLS::JArray::JArray
JArray()
Default constructor.
Definition: JArray.hh:57
JTOOLS::JArray< N, const T >::const_reference
const typedef T & const_reference
Definition: JArray.hh:833
JClass.hh
JTOOLS::JArray::end
const_iterator end() const
get iterator to end of data
Definition: JArray.hh:189
JTOOLS::JArray< 1, T >::rend
const_reverse_iterator rend() const
get reverse iterator to begin of data
Definition: JArray.hh:607
JTOOLS::JArray::sub
JArray & sub(const JArray &array)
Subtract array.
Definition: JArray.hh:350
JTOOLS::JArray::rend
reverse_iterator rend()
get reverse iterator to end of data
Definition: JArray.hh:201
JTOOLS::JArray::operator[]
reference operator[](int index)
Get element at given index.
Definition: JArray.hh:222
JTOOLS::JArray< N, const T >::at
const_reference at(int index) const
Get element at given index.
Definition: JArray.hh:889
JTOOLS::JArray< 1, T >::rend
reverse_iterator rend()
get reverse iterator to end of data
Definition: JArray.hh:611
JTOOLS
Auxiliary classes and methods for multi-dimensional interpolations and histograms.
Definition: JAbstractCollection.hh:9
JTOOLS::JArray::mul
JArray & mul(const double factor)
Scale array.
Definition: JArray.hh:366
JTOOLS::JArray< 1, const T >::const_reverse_iterator
std::reverse_iterator< const_iterator > const_reverse_iterator
Definition: JArray.hh:988
JTOOLS::JArray< N, const T >::begin
const_iterator begin() const
get iterator to begin of data
Definition: JArray.hh:863
JTOOLS::JArray::begin
iterator begin()
get iterator to begin of data
Definition: JArray.hh:192
JTOOLS::JArray< 1, T >::operator<<
friend JWriter & operator<<(JWriter &out, const JArray &buffer)
Write array to output.
Definition: JArray.hh:802
JTOOLS::JArray< 1, T >::size
static size_type size()
Get size of data.
Definition: JArray.hh:695
JTOOLS::JArray< 1, const T >::p
const_pointer p
Definition: JArray.hh:1090
JTOOLS::JArray< N, const T >::const_iterator
const typedef T * const_iterator
Definition: JArray.hh:831
JAssert.hh
JTOOLS::JArray< 1, T >::iterator
T * iterator
Definition: JArray.hh:514
JTOOLS::JArray< 1, T >::JArray
JArray(const T *p)
Constructor.
Definition: JArray.hh:570
JTOOLS::JArray< 1, const T >::JArray
JArray(const JArray< M, T > &array)
Copy constructor.
Definition: JArray.hh:999