source: trunk/IPs/systemC/processor/Morpheo/Behavioural/include/XMLLightVector.h @ 88

Last change on this file since 88 was 88, checked in by rosiere, 16 years ago

Almost complete design
with Test and test platform

  • Property svn:keywords set to Id
File size: 2.9 KB
Line 
1#ifndef _XMLLIGHT_VECTOR_
2#define _XMLLIGHT_VECTOR_
3
4#include "Behavioural/include/XMLLightFunctors.h"
5#include <vector>
6#include <algorithm>
7#include <iostream>
8
9using std::basic_ostream;
10using std::basic_ios;
11using std::endl;
12
13namespace morpheo {
14        namespace XMLUtils {
15       
16        //********************************************Class Declaration***************************************//
17       
18                // an helper class to handle XMLLight * vector
19                template < typename XMLLightImpl>
20                class XMLLightVector : public std::vector<XMLLightImpl *> {
21                public : 
22                        inline explicit XMLLightVector(void); 
23                        inline ~XMLLightVector(void); 
24                       
25                        XMLLightVector(const XMLLightVector & xmlLightVectorCopied); 
26                        XMLLightVector & operator= ( const XMLLightVector & copy ); 
27
28                        // must be defined inside template class declaration
29                        template < typename charT, typename traits> friend
30                        basic_ostream<charT, traits> & operator<< 
31                        ( basic_ostream<charT, traits> & os , const XMLLightVector<XMLLightImpl> & vect) {
32                                if ( vect.size() == 0 ) {
33                                        os << "There's no Child Nodes " << endl ; 
34                                } else {
35                                        for (  unsigned int i = 0 ; i < vect.size() ; ++i ) {
36                                                os <<"Nodes "<< i << ": \n\t" <<  vect[i] ->getInternalString()  << endl; 
37                                        }
38                                }
39                                return os;   
40                        }
41                       
42                };
43               
44        //******************************************Inline implementation************************************//
45
46                template< typename T > class XMLLightDeleter;
47
48                template < typename XMLLightImpl > 
49                XMLLightVector<XMLLightImpl>::XMLLightVector() {
50                }                               
51       
52                template < typename  XMLLightImpl >
53                XMLLightVector< XMLLightImpl>::~XMLLightVector(void) {
54                        transform ( this -> begin(), this -> end(), this -> begin(), XMLLightDeleter<XMLLightImpl>() );
55                }
56
57        //**************************************** template implementation*******************************//
58
59                template < typename XMLLightImpl >
60                XMLLightVector<XMLLightImpl>::XMLLightVector(const XMLLightVector<XMLLightImpl> & copy ) {
61                        for ( unsigned int i = 0 ; i < copy.size() ; ++i ) {
62                                this -> push_back(copy[i]);
63                                copy[i] -> attach(); 
64                        }
65                }       
66
67                template < typename XMLLightImpl >
68                XMLLightVector<XMLLightImpl> & XMLLightVector<XMLLightImpl>::operator= ( const XMLLightVector<XMLLightImpl> & vector ) {
69                        if ( &vector != this ) {
70                                unsigned int this_size = this -> size();
71                                unsigned int copy_max_size = vector.size();
72                                unsigned int max_size = copy_max_size < this_size ? this_size : copy_max_size;
73                                for ( unsigned int i = 0 ; i < max_size ; ++i ) {
74                                        if (  this_size ) {
75                                                (*this)[i] -> detach();
76                                        }
77                                        if ( i < copy_max_size ) {
78                                                if ( this_size == 0 ) {
79                                                        this -> push_back(vector[i]);
80                                                } else {
81                                                        (*this)[i] = vector[i]; 
82                                                }
83                                                (*this)[i] -> attach();
84                                        } else {
85                                                (*this)[i] = NULL; 
86                                        }
87                                }
88                        }       
89                        return *this;
90                }
91
92        }// end of XMLUtils namespace
93} // end of morpheo namespace
94
95#endif // _XMLLIGHT_VECTOR_
Note: See TracBrowser for help on using the repository browser.