source: src/Potentials/RegistrySerializer_EmpiricalPotential.cpp@ 52b5ca

CombiningParticlePotentialParsing
Last change on this file since 52b5ca was ff4fff9, checked in by Frederik Heber <heber@…>, 9 years ago

RegistrySerializer now places potentials into certain sections.

  • Property mode set to 100644
File size: 2.9 KB
Line 
1/*
2 * Project: MoleCuilder
3 * Description: creates and alters molecular systems
4 * Copyright (C) 2016 Frederik Heber. All rights reserved.
5 * Please see the COPYING file or "Copyright notice" in builder.cpp for details.
6 *
7 *
8 * This file is part of MoleCuilder.
9 *
10 * MoleCuilder is free software: you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation, either version 2 of the License, or
13 * (at your option) any later version.
14 *
15 * MoleCuilder is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with MoleCuilder. If not, see <http://www.gnu.org/licenses/>.
22 */
23
24/*
25 * RegistrySerializer_EmpiricalPotential.cpp
26 *
27 * Created on: Mar 09, 2016
28 * Author: heber
29 */
30
31// include config.h
32#ifdef HAVE_CONFIG_H
33#include <config.h>
34#endif
35
36#include "CodePatterns/MemDebug.hpp"
37
38#include "RegistrySerializer_impl.hpp"
39
40#include <iostream>
41#include <map>
42
43#include "CodePatterns/Assert.hpp"
44#include "CodePatterns/Log.hpp"
45
46#include "Potentials/EmpiricalPotential.hpp"
47#include "Potentials/TremoloPotentialTypes.hpp"
48
49template <>
50void RegistrySerializer<EmpiricalPotential>::operator()()
51{
52 typedef TremoloPotentialTypes::type_t type_t;
53 typedef std::multimap<type_t, const EmpiricalPotential *> associateditems_t;
54 associateditems_t sortedmap;
55 if (instance.getBeginIter() == instance.getEndIter())
56 return;
57
58 // we first have to sort the potentials into the different category types.
59 for (Registry<EmpiricalPotential>::const_iterator iter = instance.getBeginIter();
60 iter != instance.getEndIter(); ++iter)
61 {
62 const EmpiricalPotential * item = iter->second;
63 const type_t &nameoftype = TremoloPotentialTypes::getTypeFromTokenName(item->getToken());
64 LOG(1, "INFO: " << name << " belongs to " << nameoftype << ".");
65 sortedmap.insert( std::make_pair(nameoftype, item) );
66 }
67 ASSERT (!sortedmap.empty(),
68 "RegistrySerializer<EmpiricalPotential>::operator()");
69
70 // then we serialize per potential type
71 type_t currentnameoftype = sortedmap.begin()->first;
72 to_serialize << currentnameoftype << " {" << std::endl;
73 for(associateditems_t::const_iterator iter = sortedmap.begin();
74 iter != sortedmap.end(); ++iter) {
75 if (currentnameoftype != iter->first) {
76 // end current and open new section
77 to_serialize << "}" << std::endl;
78 currentnameoftype = iter->first;
79 to_serialize << currentnameoftype << " {" << std::endl;
80 }
81 const EmpiricalPotential * item = iter->second;
82 item->stream_to(to_serialize);
83 to_serialize << std::endl;
84 }
85 to_serialize << "}" << std::endl;
86}
Note: See TracBrowser for help on using the repository browser.