BALL  1.4.2
 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
325  (const String& name,
326  const String& symbol,
327  Group group,
328  Period period,
329  AtomicNumber atomic_umber,
330  float atomic_weight,
331  float atomic_radius,
332  float covalent_radius,
333  float van_der_waals_radius,
334  bool is_metal,
335  float electronegativity);
336 
339  virtual ~Element();
340 
345  virtual void clear();
346 
348 
351 
353 
356 
360  void setName(const String& name);
361 
367  const String& getName() const;
368 
372  void setSymbol(const String& symbol);
373 
377  const String& getSymbol() const;
378 
382  void setGroup(Group group);
383 
387  Group getGroup() const;
388 
392  void setPeriod(Period period);
393 
397  Period getPeriod() const;
398 
402  void setAtomicNumber(AtomicNumber atomic_number);
403 
407  AtomicNumber getAtomicNumber() const;
408 
412  void setAtomicWeight(float atomic_weight);
413 
417  float getAtomicWeight() const;
418 
422  void setAtomicRadius(float atomic_radius);
423 
427  float getAtomicRadius() const;
428 
432  void setCovalentRadius(float covalent_radius);
433 
437  float getCovalentRadius() const;
438 
442  void setVanDerWaalsRadius(float van_der_waals_radius);
443 
447  float getVanDerWaalsRadius() const;
448 
452  void setElectronegativity(float electronegativity);
453 
457  float getElectronegativity() const;
458 
460 
463 
469  bool operator == (const Element& element) const;
470 
476  bool operator != (const Element& element) const;
477 
484  bool operator < (const Element& element) const;
485 
492  bool operator <= (const Element& element) const;
493 
500  bool operator >= (const Element& element) const;
501 
508  bool operator >(const Element& element) const;
509 
514  friend std::ostream& operator << (std::ostream& s, const Element& element);
515 
517 
520 
526  bool isUnknown() const;
527 
533  bool isMetal() const;
534 
536 
540  static Element UNKNOWN;
541 
542 
543  private:
544 
548 
552 
591 
595 
600 
609 
613 
617 
621 
624  bool is_metal_;
625 
629  };
630 
631 
636  std::ostream& operator << (std::ostream& s, const Element& element);
637 
638 
642  {
643  public:
644 
646 
647 
650 
653  PTE_();
654 
657  PTE_(const PTE_& pse);
658 
661  virtual ~PTE_();
662 
665  virtual void clear();
666 
668 
671 
676  PTE_& operator = (const PTE_& /*pte*/);
677 
679 
682 
685  static Element& getElement(Position atomic_number);
686 
690  static Element& getElement(const String& symbol);
691 
693 
696 
701  bool operator == (const PTE_& pte) const;
702 
706  Element& operator [] (const String& symbol);
707 
711  const Element& operator [] (const String& symbol) const;
712 
716  Element& operator [] (Element::Name name);
717 
721  const Element& operator [] (Element::Name name) const;
722 
726  Element& operator [] (Element::Symbol symbol);
727 
731  const Element& operator [] (Element::Symbol symbol) const;
732 
736  Element& operator [] (Position position);
737 
741  const Element& operator [] (Position position) const;
742 
744 
747 
753  static bool apply(UnaryProcessor<Element>& applicator);
754 
756 
759  {
761  const char* symbol;
762 
765  };
766 
767  private:
768 
770  static Element element_[];
771 
773  static SymbolToElement symbol_to_element_[];
774 
776  static Element* atomic_number_to_element_[];
777  };
778 
779 
783  BALL_EXPORT extern PTE_ PTE;
784 
785 
786 
787 # ifndef BALL_NO_INLINE_FUNCTIONS
788 # include <BALL/KERNEL/PTE.iC>
789 # endif
790 } //namespace BALL
791 
792 
793 #endif // BALL_KERNEL_PTE_H