// -*- C++ -*-
+/**
+ * \file math_atom.h
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author André Pönitz
+ *
+ * Full author contact details are available in file CREDITS.
+ */
#ifndef MATH_ATOM_H
#define MATH_ATOM_H
-#ifdef __GNUG__
-#pragma interface
-#endif
-/**
+/**
+Wrapper for MathInset * with copy-semantics
+
+--
+
The 'atom' is the major blob in math typesetting. And 'atom' consists
of a nucleus, an optional superscript, and an optional subscript.
Exactly where the subscript and superscript are drawn depends on the
-size, and type, of the nucleus they are attached to.
+size, and type, of the nucleus they are attached to.
Jules
hackish. We use MathAtom only as a wrapper around MathInset * with value
semantics.
+The MathAtom owns the MathInset * and is responsible for proper cloning and
+destruction. Every MathInset * should be put into a MathAtom after its
+creation as soon as possible.
+
Andre'
*/
+class InsetBase;
class MathInset;
class MathAtom {
-public:
- ///
+public:
+ /// default constructor, object is useless, but we need it to put it into
+ // std::containers
MathAtom();
- ///
+ /// the "real constructor"
+ explicit MathAtom(InsetBase * p);
+ /// copy constructor, invokes nucleus_->clone()
MathAtom(MathAtom const &);
- ///
- explicit MathAtom(MathInset * p);
- ///
- virtual ~MathAtom();
- ///
+ /// we really need to clean up
+ ~MathAtom();
+ /// assignment invokes nucleus_->clone()
void operator=(MathAtom const &);
- ///
- MathInset * nucleus() const;
- ///
- MathInset * operator->() const;
+ /// access to the inset (checked with gprof)
+ MathInset * nucleus() { return nucleus_; }
+ /// access to the inset
+ MathInset const * operator->() const { return nucleus_; }
+
+ /// width cache. Not nice...
+ mutable int width_;
private:
///
MathInset * nucleus_;
-
- /// raw copy
- void copy(MathAtom const & p);
- /// raw destruction
- void done();
};
#endif