Switch to unified view

a b/src/rcldb/synfamily.cpp
1
/* Copyright (C) 2012 J.F.Dockes
2
 *   This program is free software; you can redistribute it and/or modify
3
 *   it under the terms of the GNU General Public License as published by
4
 *   the Free Software Foundation; either version 2 of the License, or
5
 *   (at your option) any later version.
6
 *
7
 *   This program is distributed in the hope that it will be useful,
8
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
9
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10
 *   GNU General Public License for more details.
11
 *
12
 *   You should have received a copy of the GNU General Public License
13
 *   along with this program; if not, write to the
14
 *   Free Software Foundation, Inc.,
15
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
16
 */
17
#ifndef TEST_SYNFAMILY
18
19
#include "autoconfig.h"
20
21
#include "debuglog.h"
22
#include "rcldb.h"
23
#include "rcldb_p.h"
24
#include "synfamily.h"
25
26
#include <iostream>
27
28
using namespace std;
29
30
namespace Rcl {
31
32
bool XapSynFamily::synExpand(const string& member, const string& term,
33
               vector<string>& result)
34
{
35
    string key = entryprefix(member) + term;
36
    string ermsg;
37
    try {
38
  for (Xapian::TermIterator xit = m_rdb.synonyms_begin(key);
39
       xit != m_rdb.synonyms_end(key); xit++) {
40
      result.push_back(*xit);
41
  }
42
    } XCATCHERROR(ermsg);
43
    if (!ermsg.empty()) {
44
  LOGERR(("synFamily::synExpand: error for member [%s] term [%s]\n",
45
      member.c_str(), term.c_str()));
46
  return false;
47
    }
48
#if 0
49
    string out;
50
    stringsToString(result, out);
51
    LOGDEB0(("XapSynFamily::synExpand:%s: [%s] -> %s\n", member.c_str(), 
52
       term.c_str(), out.c_str()));
53
#endif
54
    return true;
55
}
56
57
bool XapSynFamily::getMembers(vector<string>& members)
58
{
59
    string key = memberskey();
60
    string ermsg;
61
    try {
62
  for (Xapian::TermIterator xit = m_rdb.synonyms_begin(key);
63
       xit != m_rdb.synonyms_end(key); xit++) {
64
      members.push_back(*xit);
65
  }
66
    } XCATCHERROR(ermsg);
67
    if (!ermsg.empty()) {
68
  LOGERR(("XapSynFamily::getMembers: xapian error %s\n", ermsg.c_str()));
69
  return false;
70
    }
71
    return true;
72
}
73
74
bool XapSynFamily::listMap(const string& membername)
75
{
76
    string key = entryprefix(membername);
77
    string ermsg;
78
    try {
79
  for (Xapian::TermIterator kit = m_rdb.synonym_keys_begin(key);
80
       kit != m_rdb.synonym_keys_end(key); kit++) {
81
      cout << "[" << *kit << "] -> ";
82
      for (Xapian::TermIterator xit = m_rdb.synonyms_begin(*kit);
83
       xit != m_rdb.synonyms_end(*kit); xit++) {
84
      cout << *xit << " ";
85
      }
86
      cout << endl;
87
  }
88
    } XCATCHERROR(ermsg);
89
    if (!ermsg.empty()) {
90
  LOGERR(("XapSynFamily::listMap: xapian error %s\n", ermsg.c_str()));
91
  return false;
92
    }
93
    vector<string>members;
94
    getMembers(members);
95
    cout << "All family members: ";
96
    for (vector<string>::const_iterator it = members.begin();
97
   it != members.end(); it++) {
98
  cout << *it << " ";
99
    }
100
    cout << endl;
101
    return true;
102
}
103
104
bool XapWritableSynFamily::deleteMember(const string& membername)
105
{
106
    string key = entryprefix(membername);
107
108
    for (Xapian::TermIterator xit = m_wdb.synonym_keys_begin(key);
109
   xit != m_wdb.synonym_keys_end(key); xit++) {
110
  m_wdb.clear_synonyms(*xit);
111
    }
112
    m_wdb.remove_synonym(memberskey(), membername);
113
    return true;
114
}
115
116
bool XapWritableSynFamily::createMember(const string& membername)
117
{
118
    string ermsg;
119
    try {
120
  m_wdb.add_synonym(memberskey(), membername);
121
    } XCATCHERROR(ermsg);
122
    if (!ermsg.empty()) {
123
  LOGERR(("XapSynFamily::createMember: xapian error %s\n", ermsg.c_str()));
124
  return false;
125
    }
126
    return true;
127
}
128
129
bool XapWritableSynFamily::addSynonyms(const string& membername, 
130
                     const string& term, 
131
                     const vector<string>& trans)
132
{
133
    string key = entryprefix(membername) + term;
134
    string ermsg;
135
    try {
136
  for (vector<string>::const_iterator it = trans.begin();
137
       it != trans.end(); it++) {
138
      m_wdb.add_synonym(key, *it);
139
  }
140
    } XCATCHERROR(ermsg);
141
    if (!ermsg.empty()) {
142
  LOGERR(("XapSynFamily::addSynonyms: xapian error %s\n", ermsg.c_str()));
143
  return false;
144
    }
145
    return true;
146
}
147
148
}
149
150
#else  // TEST_SYNFAMILY 
151
#endif // TEST_SYNFAMILY