ComaWhite
10th July 2008, 11:29
Hello. I have this class in pure C++.
#ifndef VALUEVECTOR_HPP_
#define VALUEVECTOR_HPP_
#include <iostream>
#include <vector>
#include <algorithm>
using std::cout;
using std::endl;
using std::vector;
using std::find;
#include "Object.hpp"
#include "ComaPtr.hpp"
#include "Value.hpp"
class ValueVector : public Object {
typedef ComaPtr<Value> type;
public:
ValueVector() {
}
ValueVector(Value* value) {
clearChildren();
addChildren(value);
}
ValueVector(unsigned length) {
clearChildren();
size(length);
}
ValueVector(const ValueVector& rhs) {
*this = rhs;
}
type& operator[](unsigned index) {
return m_children[index];
}
bool operator==(ValueVector& vv) {
if(size() != vv.size()) {
return false;
}
for(unsigned i = 0; i < size(); ++i) {
for(unsigned j = 0; j < vv.size(); ++j) {
if(m_children[i] != vv[i]){
return false;
}
}
}
return true;
}
bool operator!=(ValueVector& vv) {
if(size() != vv.size()) {
return true;
}
for(unsigned i = 0; i < size(); ++i) {
for(unsigned j = 0; j < vv.size(); ++j) {
if(m_children[i] != vv[i]){
return true;
}
}
}
return false;
}
void addChildren(type children) {
assert(find(m_children.begin(), m_children.end(), children) == m_children.end());
m_children.push_back(children);
}
unsigned capacity() const {
return m_children.capacity();
}
void capacity(unsigned length) {
m_children.reserve(length);
}
void clearChildren() {
m_children.clear();
}
void setChildren(unsigned index, type children) {
assert(index < size());
m_children[index] = children;
}
unsigned size() const {
return m_children.size();
}
void size(unsigned length) {
m_children.resize(length);
}
private:
vector<type> m_children;
};
typedef ComaPtr<ValueVector> ValueVectorPtr;
#endif /*VALUEVECTOR_HPP_*/
And I was googling around for like a Smart Pointer in Qt4.4 but I couldn't seem to come up with any answers except for QGuardedPtr<> but only seems to appear in Qt3 which I don't use.
ComaPtr<> is like boost::shared_ptr except my pointer class addRef and release which is all done in ComaPtr<> which only works on classes that inherit from my custom reference counting class Object. And was wondering. how do I set up QVector to hold an array of pointers of Value (example class). And automatically reference count it?
#ifndef VALUEVECTOR_HPP_
#define VALUEVECTOR_HPP_
#include <iostream>
#include <vector>
#include <algorithm>
using std::cout;
using std::endl;
using std::vector;
using std::find;
#include "Object.hpp"
#include "ComaPtr.hpp"
#include "Value.hpp"
class ValueVector : public Object {
typedef ComaPtr<Value> type;
public:
ValueVector() {
}
ValueVector(Value* value) {
clearChildren();
addChildren(value);
}
ValueVector(unsigned length) {
clearChildren();
size(length);
}
ValueVector(const ValueVector& rhs) {
*this = rhs;
}
type& operator[](unsigned index) {
return m_children[index];
}
bool operator==(ValueVector& vv) {
if(size() != vv.size()) {
return false;
}
for(unsigned i = 0; i < size(); ++i) {
for(unsigned j = 0; j < vv.size(); ++j) {
if(m_children[i] != vv[i]){
return false;
}
}
}
return true;
}
bool operator!=(ValueVector& vv) {
if(size() != vv.size()) {
return true;
}
for(unsigned i = 0; i < size(); ++i) {
for(unsigned j = 0; j < vv.size(); ++j) {
if(m_children[i] != vv[i]){
return true;
}
}
}
return false;
}
void addChildren(type children) {
assert(find(m_children.begin(), m_children.end(), children) == m_children.end());
m_children.push_back(children);
}
unsigned capacity() const {
return m_children.capacity();
}
void capacity(unsigned length) {
m_children.reserve(length);
}
void clearChildren() {
m_children.clear();
}
void setChildren(unsigned index, type children) {
assert(index < size());
m_children[index] = children;
}
unsigned size() const {
return m_children.size();
}
void size(unsigned length) {
m_children.resize(length);
}
private:
vector<type> m_children;
};
typedef ComaPtr<ValueVector> ValueVectorPtr;
#endif /*VALUEVECTOR_HPP_*/
And I was googling around for like a Smart Pointer in Qt4.4 but I couldn't seem to come up with any answers except for QGuardedPtr<> but only seems to appear in Qt3 which I don't use.
ComaPtr<> is like boost::shared_ptr except my pointer class addRef and release which is all done in ComaPtr<> which only works on classes that inherit from my custom reference counting class Object. And was wondering. how do I set up QVector to hold an array of pointers of Value (example class). And automatically reference count it?