summaryrefslogtreecommitdiffstats
path: root/noatun-plugins/oblique/kdbt.h
blob: acaae5719b1dad08e54bc405594777e7c1c295fe (plain)
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
// Author: Eray Ozkural (exa) <erayo@cs.bilkent.edu.tr>, (c) 2002
//
// Copyright: GNU LGPL: http://www.gnu.org/licenses/lgpl.html


#ifndef KDbt_Interface
#define KDbt_Interface

#include <db_cxx.h>
#include <qdatastream.h>
#include <qbuffer.h>
#include "kbuffer.h"

/**A generic wrapper for "database thang" class that abstracts binary streaming operations.
  *@author Eray Ozkural (exa)
  */

template <typename T>
class KDbt : public Dbt {
public:
  /* assume streaming operators on QDataStream
  QDataStream & operator>> ( QDataStream& >>, T &);
  QDataStream & operator<< ( QDataStream& >>, T &);
  */
  KDbt() {
  }
  /** construct a Dbt from obj */
  KDbt(const T& obj) {
    set(obj);
  }
//  operator Dbt() {
//    return Dbt(thang.data(), thang.size());
//  }
  /** set "thang" to the contents of obj */
  void set(const T& obj) {
//    KBuffer buffer(thang);
    QDataStream ds(&thang);
    ds << obj;
//    std::cerr << "thang size " << thang.size() << endl;
//    buffer.close();
//    set_data(thang.data());
//    set_size(buffer.size());
    set_data(thang.data());
    set_size(thang.size());
  }
  void get(T& obj) {
    QByteArray buffer;
    buffer.setRawData((char*)get_data(),get_size());
    QDataStream ds(buffer,IO_ReadWrite);
    ds >> obj;
    buffer.resetRawData((char*)get_data(),get_size());
  }
private:
  /** Internal data */
//  QByteArray thang;
  KBuffer thang;
};

#endif