File: MolCatalogEntry.cpp

package info (click to toggle)
rdkit 201203-3
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 37,840 kB
  • sloc: cpp: 93,902; python: 51,897; java: 5,192; ansic: 3,497; xml: 2,499; sql: 1,641; yacc: 1,518; lex: 1,076; makefile: 325; fortran: 183; sh: 153; cs: 51
file content (129 lines) | stat: -rw-r--r-- 3,065 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
// $Id: MolCatalogEntry.cpp 1528 2010-09-26 17:04:37Z glandrum $
//
//  Copyright (C) 2006-2008 Greg Landrum
//
//   @@ All Rights Reserved @@
//  This file is part of the RDKit.
//  The contents are covered by the terms of the BSD license
//  which is included in the file license.txt, found at the root
//  of the RDKit source tree.
//
#include "MolCatalogEntry.h"

#include <RDGeneral/types.h>
#include <RDGeneral/StreamOps.h>
#include <GraphMol/RDKitBase.h>
#include <GraphMol/MolPickler.h>
#include <iostream>
#include <sstream>
#include <boost/cstdint.hpp>


namespace RDKit {
  
  MolCatalogEntry::MolCatalogEntry(const ROMol *omol){
    PRECONDITION(omol,"bad mol");
    setBitId(-1); 
    dp_props = new Dict();
    d_descrip="";
    dp_mol = omol;
  }

  MolCatalogEntry::MolCatalogEntry(const MolCatalogEntry &other){
    setBitId(other.getBitId()); 
    d_descrip=other.d_descrip;
    dp_props=0;
    dp_mol=0;
    if(other.dp_props){
      dp_props = new Dict(*other.dp_props);
    }
    if(other.dp_mol){
      dp_mol = new ROMol(*other.dp_mol);
    }
  }

  MolCatalogEntry::~MolCatalogEntry() { 
    //std::cerr << "mce: " << dp_mol <<" " <<dp_props << std::endl;
    if(dp_mol){
      delete dp_mol;
      dp_mol=0;
    }
    if(dp_props){
      delete dp_props;
      dp_props=0;
    }
    //std::cerr << "<< done" << std::endl;
  }

  void MolCatalogEntry::setMol(const ROMol *omol){
    PRECONDITION(omol,"bad mol");
    if(dp_mol) delete dp_mol;
    dp_mol = omol;
  }

  void MolCatalogEntry::toStream(std::ostream &ss) const {
    PRECONDITION(dp_mol,"bad mol");
    MolPickler::pickleMol(*dp_mol,ss);

    boost::int32_t tmpInt;
    tmpInt = getBitId();
    streamWrite(ss,tmpInt);
      
    tmpInt = getOrder();
    streamWrite(ss,tmpInt);
      
    tmpInt = d_descrip.size();
    streamWrite(ss,tmpInt);
    ss.write(d_descrip.c_str(),tmpInt*sizeof(char));

  }    

  std::string MolCatalogEntry::Serialize() const {
    std::stringstream ss(std::ios_base::binary|std::ios_base::out|std::ios_base::in);
    toStream(ss);
    return ss.str();
  }

  void MolCatalogEntry::initFromStream(std::istream &ss){
    if(dp_mol){
      delete dp_mol;
      dp_mol=0;
    }
    if(dp_props){
      delete dp_props;
      dp_props=0;
    }

    // the molecule:
    dp_mol = new ROMol();
    MolPickler::molFromPickle(ss,*const_cast<ROMol *>(dp_mol));

    dp_props = new Dict();
    
    boost::int32_t tmpInt;
    // the bitId:
    streamRead(ss,tmpInt);
    setBitId(tmpInt);

    // the order:
    streamRead(ss,tmpInt);
    setOrder(tmpInt);

    // the description:
    streamRead(ss,tmpInt);
    char *tmpText=new char[tmpInt+1];
    ss.read(tmpText,tmpInt*sizeof(char));
    tmpText[tmpInt]=0;
    d_descrip = tmpText;
    delete [] tmpText;
  }

  void MolCatalogEntry::initFromString(const std::string &text){
    std::stringstream ss(std::ios_base::binary|std::ios_base::out|std::ios_base::in);
    // initialize the stream:
    ss.write(text.c_str(),text.length());
    // now start reading out values:
    initFromStream(ss);
  }
	
}