BALL  1.4.79
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
PTE.h
Go to the documentation of this file.
1 // -*- Mode: C++; tab-width: 2; -*-
2 // vi: set ts=2:
3 //
4 // $Id: PTE.h,v 1.30.16.1 2007/03/25 21:23:42 oliver Exp $
5 //
6 
7 #ifndef BALL_KERNEL_PTE_H
8 #define BALL_KERNEL_PTE_H
9 
10 #ifndef BALL_COMMON_CREATE_H
11 # include <BALL/COMMON/create.h>
12 #endif
13 
14 #ifndef BALL_DATATYPE_STRING_H
15 # include <BALL/DATATYPE/string.h>
16 #endif
17 
18 #ifndef BALL_CONCEPT_PROCESSOR_H
19 # include <BALL/CONCEPT/processor.h>
20 #endif
21 
22 #define BALL_ELEMENT_NAME_DEFAULT "Unknown"
23 #define BALL_ELEMENT_SYMBOL_DEFAULT "?"
24 #define BALL_ELEMENT_GROUP_DEFAULT 0
25 #define BALL_ELEMENT_PERIOD_DEFAULT 0
26 #define BALL_ELEMENT_ATOMICNUMBER_DEFAULT 0
27 #define BALL_ELEMENT_ATOMICWEIGHT_DEFAULT 0
28 #define BALL_ELEMENT_ATOMICRADIUS_DEFAULT 0
29 #define BALL_ELEMENT_COVALENTRADIUS_DEFAULT 0
30 #define BALL_ELEMENT_VANDERWAALSRADIUS_DEFAULT 0
31 #define BALL_ELEMENT_ELECTRONEGATIVITY_DEFAULT 0
32 #define BALL_ELEMENT_IS_METAL_DEFAULT false
33 
34 
35 namespace BALL
36 {
50 
55  {
56  public:
57 
59 
60 
62  typedef short Group;
63 
66  typedef short Period;
67 
70  typedef short AtomicNumber;
71 
75  enum Name
76  {
77  ACTINIUM = 0,
80  ANTIMONY, STIBIUM = ANTIMONY,
87  BISMUTH, WISMUT = BISMUTH,
95  CARBON, CARBONEUM = CARBON,
100  COPPER, CUPRUM = COPPER,
113  GOLD, AURUM = GOLD,
118  HYDROGEN, HYDROGENIUM = HYDROGEN,
120  IODINE, JOD = IODINE,
122  IRON, FERRUM = IRON,
127  LEAD, PLUMBUM = LEAD,
131  MANGANESE, MANGAN = MANGANESE,
134  MERCURY, HYDRARGYRUM = MERCURY, MERCURIUM = MERCURY,
141  NITROGEN, NITROGENIUM = NITROGEN,
144  OXYGEN, OXYGENIUM = OXYGEN,
150  POTASSIUM, KALIUM = POTASSIUM,
164  SILICON, SILICIUM = SILICON,
165  SILVER, ARGENTUM = SILVER,
166  SODIUM, NATRIUM = SODIUM,
168  SULPHUR, SULFUR = SULPHUR,
176  TIN, STANNUM = TIN,
178  TUNGSTEN, WOLFRAM = TUNGSTEN,
187  ZINC, ZINCUM = ZINC,
189 
190  NUMBER_OF_ELEMENTS // 111
191  };
192 
196  enum Symbol
197  {
198  Ac = 0,
199  Al,
200  Am,
201  Sb,
202  Ar,
203  As,
204  At,
205  Ba,
206  Bk,
207  Be,
208  Bi,
209  Bh,
210  B,
211  Br,
212  Cd,
213  Cs,
214  Ca,
215  Cf,
216  C,
217  Ce,
218  Cl,
219  Cr,
220  Co,
221  Cu,
222  Cm,
223  Db,
224  Dy,
225  Es,
226  Er,
227  Eu,
228  Fm,
229  F,
230  Fr,
231  Gd,
232  Ga,
233  Ge,
234  Au,
235  Hf,
236  Hn,
237  He,
238  Ho,
239  H,
240  In,
241  I,
242  Ir,
243  Fe,
244  Jl,
245  Kr,
246  La,
247  Lr,
248  Pb,
249  Li,
250  Lu,
251  Mg,
252  Mn,
253  Mt,
254  Md,
255  Hg,
256  Mo,
257  Nd,
258  Ne,
259  Np,
260  Ni,
261  Nb,
262  N,
263  No,
264  Os,
265  O,
266  Pd,
267  P,
268  Pt,
269  Pu,
270  Po,
271  K,
272  Pr,
273  Pm,
274  Pa,
275  Ra,
276  Rn,
277  Re,
278  Rh,
279  Rb,
280  Ru,
281  Rf,
282  Sm,
283  Sc,
284  Se,
285  Si,
286  Ag,
287  Na,
288  Sr,
289  S,
290  Ta,
291  Tc,
292  Te,
293  Tb,
294  Tl,
295  Th,
296  Tm,
297  Sn,
298  Ti,
299  W,
303  U,
304  V,
305  Xe,
306  Yb,
307  Y,
308  Zn,
309  Zr
310  };
311 
315 
320  Element();
321 
324  Element(const Element& element);
325 
328  Element
329  (const String& name,
330  const String& symbol,
331  Group group,
332  Period period,
333  AtomicNumber atomic_umber,
334  float atomic_weight,
335  float atomic_radius,
336  float covalent_radius,
337  float van_der_waals_radius,
338  bool is_metal,
339  float electronegativity);
340 
343  virtual ~Element();
344 
349  virtual void clear();
350 
352 
355 
360  Element& operator = (const Element& element);
361 
363 
366 
370  void setName(const String& name);
371 
377  const String& getName() const;
378 
382  void setSymbol(const String& symbol);
383 
387  const String& getSymbol() const;
388 
392  void setGroup(Group group);
393 
397  Group getGroup() const;
398 
402  void setPeriod(Period period);
403 
407  Period getPeriod() const;
408 
412  void setAtomicNumber(AtomicNumber atomic_number);
413 
417  AtomicNumber getAtomicNumber() const;
418 
422  void setAtomicWeight(float atomic_weight);
423 
427  float getAtomicWeight() const;
428 
432  void setAtomicRadius(float atomic_radius);
433 
437  float getAtomicRadius() const;
438 
442  void setCovalentRadius(float covalent_radius);
443 
447  float getCovalentRadius() const;
448 
452  void setVanDerWaalsRadius(float van_der_waals_radius);
453 
457  float getVanDerWaalsRadius() const;
458 
462  void setElectronegativity(float electronegativity);
463 
467  float getElectronegativity() const;
468 
470 
473 
479  bool operator == (const Element& element) const;
480 
486  bool operator != (const Element& element) const;
487 
494  bool operator < (const Element& element) const;
495 
502  bool operator <= (const Element& element) const;
503 
510  bool operator >= (const Element& element) const;
511 
518  bool operator >(const Element& element) const;
519 
524  friend std::ostream& operator << (std::ostream& s, const Element& element);
525 
527 
530 
536  bool isUnknown() const;
537 
543  bool isMetal() const;
544 
546 
550  static Element UNKNOWN;
551 
552 
553  private:
554 
557  String name_;
558 
561  String symbol_;
562 
600  Group group_;
601 
604  Period period_;
605 
609  AtomicNumber atomic_number_;
610 
618  float atomic_weight_;
619 
622  float atomic_radius_;
623 
626  float covalent_radius_;
627 
630  float van_der_waals_radius_;
631 
634  bool is_metal_;
635 
638  float electronegativity_;
639  };
640 
641 
646  std::ostream& operator << (std::ostream& s, const Element& element);
647 
648 
652  {
653  public:
654 
656 
657 
660 
663  PTE_();
664 
667  PTE_(const PTE_& pse);
668 
671  virtual ~PTE_();
672 
675  virtual void clear();
676 
678 
681 
686  PTE_& operator = (const PTE_& /*pte*/);
687 
689 
692 
695  static Element& getElement(Position atomic_number);
696 
700  static Element& getElement(const String& symbol);
701 
703 
706 
711  bool operator == (const PTE_& pte) const;
712 
716  Element& operator [] (const String& symbol);
717 
721  const Element& operator [] (const String& symbol) const;
722 
726  Element& operator [] (Element::Name name);
727 
731  const Element& operator [] (Element::Name name) const;
732 
736  Element& operator [] (Element::Symbol symbol);
737 
741  const Element& operator [] (Element::Symbol symbol) const;
742 
746  Element& operator [] (Position position);
747 
751  const Element& operator [] (Position position) const;
752 
754 
757 
763  static bool apply(UnaryProcessor<Element>& applicator);
764 
766 
769  {
771  const char* symbol;
772 
775  };
776 
777  private:
778 
780  static Element element_[];
781 
783  static SymbolToElement symbol_to_element_[];
784 
786  static Element* atomic_number_to_element_[];
787  };
788 
789 
793  BALL_EXPORT extern PTE_ PTE;
794 
795 
796 
797 # ifndef BALL_NO_INLINE_FUNCTIONS
798 # include <BALL/KERNEL/PTE.iC>
799 # endif
800 } //namespace BALL
801 
802 
803 #endif // BALL_KERNEL_PTE_H
BALL_EXPORT PTE_ PTE
#define BALL_CREATE(name)
Definition: create.h:62
short AtomicNumber
Definition: PTE.h:70
BALL_EXPORT std::ostream & operator<<(std::ostream &os, const Exception::GeneralException &e)
BALL_EXPORT bool operator>(const String &s1, const String &s2)
short Period
Definition: PTE.h:66
short Group
Definition: PTE.h:62
static Element UNKNOWN
Definition: PTE.h:550
BALL_EXPORT bool operator!=(const String &s1, const String &s2)
const char * getName()
Definition: rtti.h:97
BALL_EXPORT bool operator>=(const String &s1, const String &s2)
BALL_EXPORT bool operator==(const String &s1, const String &s2)
BALL_EXPORT bool operator<=(const String &s1, const String &s2)
const char * symbol
Definition: PTE.h:771
#define BALL_EXPORT
Definition: COMMON/global.h:50
BALL_SIZE_TYPE Position
BALL_EXPORT bool operator<(const String &s1, const String &s2)