www.pudn.com > bp_cpp.zip > vector.cpp


/* 
 * public/ann/vector.cpp 
 * 2004-05-01 by ShanLanshan 
 */ 
#include  
#include  
#include "public/ann/annbase.h" 
#include "public/ann/vector.h" 
 
namespace ann { 
	AnnVector::AnnVector(): m_element(NULL), m_size(-1), m_space_size(-1), m_flag(0UL) 
	{} 
 
	AnnVector::~AnnVector() 
	{ 
		if (m_flag & FLAG_SUB_VECTOR) 
			return; 
 
		if (m_element == NULL) 
			return; 
 
		free(m_element); 
		//m_element = NULL; 
	} 
 
	void AnnVector::set_size(ann_int size) 
	{ 
		assert(size > -1); 
 
		if (size > m_space_size) { 
			ann_int space_size; 
			if (m_flag & FLAG_SUB_VECTOR) 
				return; 
			space_size = size == 0 ? 1 : size; 
			m_element = reinterpret_cast 
				(realloc(m_element, sizeof(ann_float) * space_size)); 
			assert(m_element != NULL); 
			m_space_size = space_size; 
		} 
 
		m_size = size; 
	} 
 
	IAnnVector* AnnVector::get_sub_vector(int off, int len, IAnnVector *vec) 
	{ 
		assert(off > -1); 
		assert(off + len <= m_size); 
		assert(vec != NULL); 
		assert(m_element != NULL); 
		 
		AnnVector *av;	// HA! AV 
		av = dynamic_cast (vec); 
		assert(av != NULL); 
 
		av->m_element = m_element + off; 
		av->m_flag |= FLAG_SUB_VECTOR; 
		av->m_size = len; 
		av->m_space_size = m_space_size - off; 
 
		return av; 
	} 
 
	ann_int AnnVector::get_size() 
	{ 
		return m_size; 
	} 
 
	ann_float AnnVector::get_element(int n) 
	{ 
		assert(n > -1); 
		assert(n < m_size); 
		assert(m_element != NULL); 
 
		return m_element[n]; 
	} 
 
	void AnnVector::set_element(int n, ann_float v) 
	{ 
		assert(n > -1); 
		assert(n < m_size); 
		assert(m_element != NULL); 
 
		m_element[n] = v; 
	} 
 
	void AnnVector::get_element(int i, ann_float a[], int n) 
	{ 
		assert(i > -1); 
		assert(n > -1); 
		assert(i + n <= m_size); 
		assert(a != NULL); 
		assert(m_element != NULL); 
		 
		memcpy(a, m_element + i, sizeof(m_element[0]) * n); 
	} 
 
	void AnnVector::set_element(int i, ann_float a[], int n) 
	{ 
		assert(i > -1); 
		assert(n > -1); 
		assert(i + n <= m_size); 
		assert(a != NULL); 
		assert(m_element != NULL); 
 
		memcpy(m_element + i, a, sizeof(m_element[0]) * n); 
	} 
 
	ann_float *AnnVector::get_buffer() 
	{ 
		assert(m_element != NULL); 
		return m_element; 
	} 
 
	void AnnVector::release_buffer() 
	{ 
	} 
 
	IAnnVector& AnnVector::operator=(IAnnVector &av) 
	{ 
		int n; 
 
		n = av.get_size(); 
		set_size(n); 
 
		for (int i=0; i (this)); 
	} 
 
	bool AnnVector::operator == (IAnnVector &av) 
	{ 
		int n; 
 
		n = av.get_size(); 
		set_size(n); 
 
		for (int i=0; i> (ostream &os) 
	{ 
		assert(os.good()); 
		 
		int n = get_size(); 
 
		os << "SIZE " << n << " VALUE "; 
		for (int i=0; i> tmp >> sizes >> tmp; 
		 
		int n = atoi(sizes); 
		set_size(n); 
 
		ann_float v; 
		for (int i=0; i> v; 
			set_element(i, v); 
		} 
 
		return is; 
	} 
 
};	//	namespace ann