Home | Develop | Download | Contact
Namespaces | Estructuras de datos
Clase Pds::BinaryTreeNode

Clase que implementa una estructura de datos que contem um valor y dos direcciones de memoria a otra estructura de datos del mismo tipo. Más...

Namespaces

namespace  Pds
 Nombre de espacio para Pds (Procesamiento Digital de Senales)
 

Estructuras de datos

class  Pds::BinaryTreeNode< Datum >
 La clase tipo Pds::BinaryTreeNode. Esta clase genera una estructura de datos que contem um valor y dos direcciones de memoria a otra estructura de datos del mismo tipo. Para usar incluir Pds/BinaryTreeNode. Más...
 

Varios tipos de constructores

Crean una objeto Pds::BinaryTreeNode

 Pds::BinaryTreeNode< Datum >::BinaryTreeNode (void)
 Crea un objeto de tipo Pds::BinaryTreeNode vacio. Más...
 
 Pds::BinaryTreeNode< Datum >::BinaryTreeNode (const Datum &Value)
 Crea un objeto de tipo Pds::BinaryTreeNode sin descendientes. Más...
 
 Pds::BinaryTreeNode< Datum >::BinaryTreeNode (const Datum &Value, Pds::BinaryTreeNode< Datum > *LeftNodePtr, Pds::BinaryTreeNode< Datum > *RightNodePtr)
 Crea un objeto de tipo Pds::BinaryTreeNode con descendientes. Más...
 
 Pds::BinaryTreeNode< Datum >::BinaryTreeNode (const Datum &Value, const Pds::BinaryTreeNode< Datum > &LeftNode, const Pds::BinaryTreeNode< Datum > &RightNode)
 Crea un objeto de tipo Pds::BinaryTreeNode con descendientes copiando datos desde otros nodos. Más...
 
 Pds::BinaryTreeNode< Datum >::BinaryTreeNode (const Pds::BinaryTreeNode< Datum > &B)
 Crea un objeto de tipo Pds::BinaryTreeNode copiando datos desde otra. Más...
 
 Pds::BinaryTreeNode< Datum >::~BinaryTreeNode ()
 

Memoria Pds::BinaryTreeNode

Pds::BinaryTreeNode< Datum > & Pds::BinaryTreeNode< Datum >::operator= (const Pds::BinaryTreeNode< Datum > &B)
 Copia en si mismo (A), un objeto B. Este operador es similar al método Copy(). Más...
 
bool Pds::BinaryTreeNode< Datum >::Copy (const Pds::BinaryTreeNode< Datum > &B)
 Copia en si mismo (A), el contenido de un objeto B. Este método es similar a usar el operador = . Más...
 
void Pds::BinaryTreeNode< Datum >::MakeEmpty (void)
 Limpia los datos internos. Despues de limpiar this->IsEmpty() es igual a true. Más...
 

Estado

bool Pds::BinaryTreeNode< Datum >::IsEmpty (void) const
 Verifica si el nodo es nulo. Más...
 
bool Pds::BinaryTreeNode< Datum >::HasChild0 (void) const
 Verifica si el nodo de la izquierda es nulo. Más...
 
bool Pds::BinaryTreeNode< Datum >::HasChild1 (void) const
 Verifica si el nodo de la derecha es nulo. Más...
 

Get values

Datum Pds::BinaryTreeNode< Datum >::GetVal (void) const
 Devuelve el contenido del nodo Pds::BinaryTreeNode. Más...
 
const Pds::BinaryTreeNode< Datum > * Pds::BinaryTreeNode< Datum >::GetChild0 (void) const
 Retorna la direccion del hijo relativo a 0 (izquierda). Más...
 
const Pds::BinaryTreeNode< Datum > * Pds::BinaryTreeNode< Datum >::GetChild1 (void) const
 Retorna la direccion del hijo relativo a 1 (derecha). Más...
 

Mostrando datos

void Pds::BinaryTreeNode< Datum >::Print (const std::string &str="") const
 Muestra en pantalla el Datum del Pds::BinaryTreeNode y de todos sus descendientes. El valor Datum debe poder ser agregado a std::cout. Más...
 
void Pds::BinaryTreeNode< Datum >::PrintNode (const std::string &str, const std::string &enddata="") const
 Muestra en pantalla los datos dentro del actual Pds::BinaryTreeNode. El elemento debe poder ser agregado a std::cout. Más...
 

Exportando Dot File

void Pds::BinaryTreeNode< Datum >::ExportDotInStreamFile (std::ofstream &streamfile, std::string(*FuncDatumToString)(const Datum &)) const
 Salva en formato .dot el objeto de tipo Pds::BinaryTreeNode. Más...
 
bool Pds::BinaryTreeNode< Datum >::ExportDotFile (const std::string &filename, std::string(*FuncDatumToString)(const Datum &)) const
 Salva en formato .dot el objeto de tipo Pds::BinaryTreeNode. Más...
 

Exportando Xml File

bool Pds::BinaryTreeNode< Datum >::ExportXmlToStringStream (std::stringstream &sstream, std::string(*FuncDatumToXmlString)(const Datum &)) const
 Escribe en un std::stringstream en formato Xml el contenido de todo el arbol desde el Pds::BinaryTreeNode. Más...
 
bool Pds::BinaryTreeNode< Datum >::ExportXmlToStream (std::ofstream &myfile, std::string(*FuncDatumToXmlString)(const Datum &)) const
 Escribe en un std::ofstream en formato Xml el contenido de todo el arbol desde el Pds::BinaryTreeNode. Más...
 
std::string Pds::BinaryTreeNode< Datum >::ExportXmlToString (std::string(*FuncDatumToXmlString)(const Datum &)) const
 Escribe en un std::string en formato Xml el contenido de todo el arbol desde el Pds::BinaryTreeNode. Más...
 
bool Pds::BinaryTreeNode< Datum >::ImportXmlFromString (const std::string &str, Datum(*FuncXmlStringToDatum)(const std::string &))
 Lee desde un std::string en formato Xml el contenido de todo el arbol desde el Pds::BinaryTreeNode. Más...
 

Descripción detallada

Clase que implementa una estructura de datos que contem um valor y dos direcciones de memoria a otra estructura de datos del mismo tipo.

#include <Pds/BinaryTreeNode>
Pds::BinaryTreeNode<SomeType>

Documentación de las funciones

◆ BinaryTreeNode() [1/5]

template<typename Datum >
Pds::BinaryTreeNode< Datum >::BinaryTreeNode ( void  )

Crea un objeto de tipo Pds::BinaryTreeNode vacio.

Definición en la línea 435 del archivo BinaryTreeNode.hpp.

436{
437 this->P=NULL;
438 this->LeftNode=NULL;
439 this->RightNode=NULL;
440
441 return;
442}
Pds::BinaryTreeNode< Datum > * LeftNode
Pds::BinaryTreeNode< Datum > * RightNode

◆ BinaryTreeNode() [2/5]

template<typename Datum >
Pds::BinaryTreeNode< Datum >::BinaryTreeNode ( const Datum &  Value)

Crea un objeto de tipo Pds::BinaryTreeNode sin descendientes.

Parámetros
[in]ValueElemento del nodo.

Definición en la línea 445 del archivo BinaryTreeNode.hpp.

446{
447 this->P=new Datum(Value);
448 this->LeftNode=NULL;
449 this->RightNode=NULL;
450
451 return;
452}

◆ BinaryTreeNode() [3/5]

template<typename Datum >
Pds::BinaryTreeNode< Datum >::BinaryTreeNode ( const Datum &  Value,
Pds::BinaryTreeNode< Datum > *  LeftNodePtr,
Pds::BinaryTreeNode< Datum > *  RightNodePtr 
)

Crea un objeto de tipo Pds::BinaryTreeNode con descendientes.

Atención
LeftNodePtr y RightNodePtr deben ser NULL o obligatoriamente creados con new.
Parámetros
[in]ValueElemento del nodo.
[in]LeftNodePtrDirección a copiar en la rama de la izquierda, rama 0. La dirección debe ser obligatoriamente creada con new dado que será destruido con delete.
[in]RightNodePtrDirección a copiar en la rama de la derecha, rama 1. La dirección debe ser obligatoriamente creada con new dado que será destruido con delete.

Definición en la línea 456 del archivo BinaryTreeNode.hpp.

459{
460 this->P=new Datum(Value);
461 this->LeftNode=LeftNodePtr;
462 this->RightNode=RightNodePtr;
463 return;
464}

◆ BinaryTreeNode() [4/5]

template<typename Datum >
Pds::BinaryTreeNode< Datum >::BinaryTreeNode ( const Datum &  Value,
const Pds::BinaryTreeNode< Datum > &  LeftNode,
const Pds::BinaryTreeNode< Datum > &  RightNode 
)

Crea un objeto de tipo Pds::BinaryTreeNode con descendientes copiando datos desde otros nodos.

Parámetros
[in]ValueElemento del nodo.
[in]LeftNodeEl nodo a copiar en la rama de la izquierda, rama 0.
[in]RightNodeEl nodo a copiar en la rama de la derecha, rama 1.

Definición en la línea 469 del archivo BinaryTreeNode.hpp.

472{
473 this->P=new Datum(Value);
474
475 if(LeftNode.IsEmpty())
476 this->LeftNode =NULL;
477 else
478 this->LeftNode =new Pds::BinaryTreeNode<Datum>(LeftNode);
479
480 if(RightNode.IsEmpty())
481 this->RightNode =NULL;
482 else
483 this->RightNode=new Pds::BinaryTreeNode<Datum>(RightNode);
484
485 return;
486}
La clase tipo Pds::BinaryTreeNode. Esta clase genera una estructura de datos que contem um valor y do...

Hace referencia a Pds::BinaryTreeNode< Datum >::IsEmpty().

Gráfico de llamadas para esta función:

◆ BinaryTreeNode() [5/5]

template<typename Datum >
Pds::BinaryTreeNode< Datum >::BinaryTreeNode ( const Pds::BinaryTreeNode< Datum > &  B)

Crea un objeto de tipo Pds::BinaryTreeNode copiando datos desde otra.

Parámetros
[in]BBinaryTreeNode a copiar.

Definición en la línea 490 del archivo BinaryTreeNode.hpp.

491{
492 this->P=NULL;
493 this->LeftNode=NULL;
494 this->RightNode=NULL;
495
496 this->Copy(Node);
497
498 return;
499}
bool Copy(const Pds::BinaryTreeNode< Datum > &B)
Copia en si mismo (A), el contenido de un objeto B. Este método es similar a usar el operador = .

◆ operator=()

template<typename Datum >
Pds::BinaryTreeNode< Datum > & Pds::BinaryTreeNode< Datum >::operator= ( const Pds::BinaryTreeNode< Datum > &  B)

Copia en si mismo (A), un objeto B. Este operador es similar al método Copy().

\[ A \leftarrow B \]

Cuando acontece:

Cuando NO acontece:

Parámetros
[in]BEl objeto a copiar
Devuelve
Retorna el operador de la izquierda (acumulador) con el resultado, o un objeto vacío en caso de error.
Ver también
Copy

Definición en la línea 510 del archivo BinaryTreeNode.hpp.

511{
512 if(false==this->Copy(A))
513 this->MakeEmpty();
514
515 //std::cout<<"used copy assignment\n";
516 return *this;
517}
void MakeEmpty(void)
Limpia los datos internos. Despues de limpiar this->IsEmpty() es igual a true.

◆ Copy()

template<typename Datum >
bool Pds::BinaryTreeNode< Datum >::Copy ( const Pds::BinaryTreeNode< Datum > &  B)

Copia en si mismo (A), el contenido de un objeto B. Este método es similar a usar el operador = .

\[ A \leftarrow B \]

Parámetros
[in]BEl objeto a copiar
Devuelve
Retorna true si todo fue bien o false si no. Si se retorna false el receptor no altera su contenido.
Ver también
Copy

Definición en la línea 520 del archivo BinaryTreeNode.hpp.

521{
522 if(this!=&Node) //Comprueba que no se esté intentando igualar un objeto a sí mismo
523 {
524 if(Node.IsEmpty())
525 {
526 this->MakeEmpty();
527 return true;
528 }
529
530 this->P=new Datum(*Node.P);
531 if( this->P==NULL )
532 {
533 this->MakeEmpty();
534 return false;
535 }
536
537 if(Node.LeftNode!=NULL) this->LeftNode =new Pds::BinaryTreeNode<Datum>(*Node.LeftNode);
538 if(Node.RightNode!=NULL) this->RightNode=new Pds::BinaryTreeNode<Datum>(*Node.RightNode);
539
540 if( (this->LeftNode==NULL)&&(Node.LeftNode!=NULL) )
541 {
542 this->MakeEmpty();
543 return false;
544 }
545
546 if( (this->RightNode==NULL)&&(Node.RightNode!=NULL) )
547 {
548 this->MakeEmpty();
549 return false;
550 }
551 }
552
553 return true;
554}

Hace referencia a Pds::BinaryTreeNode< Datum >::IsEmpty(), Pds::BinaryTreeNode< Datum >::LeftNode, Pds::BinaryTreeNode< Datum >::P y Pds::BinaryTreeNode< Datum >::RightNode.

Gráfico de llamadas para esta función:

◆ MakeEmpty()

template<typename Datum >
void Pds::BinaryTreeNode< Datum >::MakeEmpty ( void  )

Limpia los datos internos. Despues de limpiar this->IsEmpty() es igual a true.

Definición en la línea 558 del archivo BinaryTreeNode.hpp.

559{
560 if(this->P!=NULL)
561 {
562 delete this->P;
563 this->P=NULL;
564 }
565
566 if(this->LeftNode!=NULL)
567 {
568 delete this->LeftNode;
569 this->LeftNode=NULL;
570 }
571
572 if(this->RightNode!=NULL)
573 {
574 delete this->RightNode;
575 this->RightNode=NULL;
576 }
577}

◆ IsEmpty()

template<typename Datum >
bool Pds::BinaryTreeNode< Datum >::IsEmpty ( void  ) const

Verifica si el nodo es nulo.

Devuelve
Retorna true si es nula e false si no.

Definición en la línea 646 del archivo BinaryTreeNode.hpp.

647{
648 if(this->P==NULL) return true;
649
650 return false;
651}

Referenciado por Pds::BinaryTreeNode< Datum >::BinaryTreeNode() y Pds::BinaryTreeNode< Datum >::Copy().

◆ HasChild0()

template<typename Datum >
bool Pds::BinaryTreeNode< Datum >::HasChild0 ( void  ) const

Verifica si el nodo de la izquierda es nulo.

Devuelve
Retorna true si es nula e false si no.

Definición en la línea 654 del archivo BinaryTreeNode.hpp.

655{
656 if(this->LeftNode!=NULL) return true;
657
658 return false;
659}

◆ HasChild1()

template<typename Datum >
bool Pds::BinaryTreeNode< Datum >::HasChild1 ( void  ) const

Verifica si el nodo de la derecha es nulo.

Devuelve
Retorna true si es nula e false si no.

Definición en la línea 662 del archivo BinaryTreeNode.hpp.

663{
664 if(this->RightNode!=NULL) return true;
665
666 return false;
667}

◆ GetVal()

template<typename Datum >
Datum Pds::BinaryTreeNode< Datum >::GetVal ( void  ) const

Devuelve el contenido del nodo Pds::BinaryTreeNode.

Devuelve
Devuelve el contenido del nodo Pds::BinaryTreeNode.

Definición en la línea 624 del archivo BinaryTreeNode.hpp.

625{
626 Datum ERROR;
627 if(this->P==NULL) return ERROR;
628
629 return *(this->P);
630}

◆ GetChild0()

template<typename Datum >
const Pds::BinaryTreeNode< Datum > * Pds::BinaryTreeNode< Datum >::GetChild0 ( void  ) const

Retorna la direccion del hijo relativo a 0 (izquierda).

Atención
Tenga cuidado si desea modificar el contenido del dato del puntero.
Devuelve
Retorna la direccion del hijo relativo a 0. O NULL si no existe.

Definición en la línea 633 del archivo BinaryTreeNode.hpp.

634{
635 return this->LeftNode;
636}

◆ GetChild1()

template<typename Datum >
const Pds::BinaryTreeNode< Datum > * Pds::BinaryTreeNode< Datum >::GetChild1 ( void  ) const

Retorna la direccion del hijo relativo a 1 (derecha).

Atención
Tenga cuidado si desea modificar el contenido del dato del puntero.
Devuelve
Retorna la direccion del hijo relativo a 1. O NULL si no existe.

Definición en la línea 639 del archivo BinaryTreeNode.hpp.

640{
641 return this->RightNode;
642}

◆ Print()

template<typename Datum >
void Pds::BinaryTreeNode< Datum >::Print ( const std::string &  str = "") const

Muestra en pantalla el Datum del Pds::BinaryTreeNode y de todos sus descendientes. El valor Datum debe poder ser agregado a std::cout.

Parámetros
[in]strTexto de raiz de nombre de nodo.

Definición en la línea 581 del archivo BinaryTreeNode.hpp.

582{
583 std::cout<<str;
584
585 if(this->IsEmpty()) return;
586
587 std::cout<<"\n"<<*(this->P);
588
589 if(this->LeftNode!=NULL)
590 {
591 std::cout<<"CALL0\n";
592 this->LeftNode->Print(str+std::to_string(0));
593 }
594 else std::cout<<"NULL0\n";
595
596 if(this->RightNode!=NULL)
597 {
598 std::cout<<"CALL1\n";
599 this->RightNode->Print(str+std::to_string(1));
600 }
601 else std::cout<<"NULL1\n";
602
603 std::cout<<"END\n";
604}
bool IsEmpty(void) const
Verifica si el nodo es nulo.

Hace referencia a Pds::BinaryTreeNode< Datum >::Print().

Referenciado por Pds::BinaryTreeNode< Datum >::Print().

Gráfico de llamadas para esta función:

◆ PrintNode()

template<typename Datum >
void Pds::BinaryTreeNode< Datum >::PrintNode ( const std::string &  str,
const std::string &  enddata = "" 
) const

Muestra en pantalla los datos dentro del actual Pds::BinaryTreeNode. El elemento debe poder ser agregado a std::cout.

Parámetros
[in]strTexto a mostrar antes de imprimir el contenido.
[in]enddataTexto a mostrar al final de cada dato e antes de las direcciones.

Definición en la línea 607 del archivo BinaryTreeNode.hpp.

608{
609 std::cout<<str;
610 if(this->P!=NULL)
611 {
612 std::cout<<*(this->P);
613 }
614
615 std::cout<<enddata;
616
617 std::cout<<this->LeftNode<<"\n";
618
619 std::cout<<this->RightNode<<"\n";
620}

◆ ExportDotInStreamFile()

template<typename Datum >
void Pds::BinaryTreeNode< Datum >::ExportDotInStreamFile ( std::ofstream &  streamfile,
std::string(*)(const Datum &)  FuncDatumToString 
) const

Salva en formato .dot el objeto de tipo Pds::BinaryTreeNode.

Parámetros
[in]streamfileNombre del stream al archivo donde se escribirá el arbol en formato .dot.
[in]FuncDatumToStringFunción que convierte Datum en un std::string.

Definición en la línea 671 del archivo BinaryTreeNode.hpp.

674{
675 if(this->IsEmpty()) return;
676
677 std::string STRING=FuncDatumToString(*(this->P));
678
679 myfile <<"N"<<(unsigned long)this<<"\t[ label =\""<<STRING<<"\"];\n";
680
681 if(this->LeftNode!=NULL) myfile <<"N"<<(unsigned long)this
682 <<"\t->\tN"<<(unsigned long)this->LeftNode
683 <<"\t[label = \"0\"];\n";
684
685 if(this->RightNode!=NULL) myfile <<"N"<<(unsigned long)this
686 <<"\t->\tN"<<(unsigned long)this->RightNode
687 <<"\t[label = \"1\"];\n";
688
689
690 if(this->LeftNode!=NULL) this->LeftNode->ExportDotInStreamFile(myfile,FuncDatumToString);
691 if(this->RightNode!=NULL) this->RightNode->ExportDotInStreamFile(myfile,FuncDatumToString);
692
693 return;
694}

Hace referencia a Pds::BinaryTreeNode< Datum >::ExportDotInStreamFile().

Referenciado por Pds::BinaryTreeNode< Datum >::ExportDotInStreamFile().

Gráfico de llamadas para esta función:

◆ ExportDotFile()

template<typename Datum >
bool Pds::BinaryTreeNode< Datum >::ExportDotFile ( const std::string &  filename,
std::string(*)(const Datum &)  FuncDatumToString 
) const

Salva en formato .dot el objeto de tipo Pds::BinaryTreeNode.

Parámetros
[in]filenameNombre de archivo donde se escribirá el arbol en formato .dot.
[in]FuncDatumToStringFunción que convierte Datum en un std::string.
Devuelve
Retorna true si todo fue bien o false si no.

Definición en la línea 697 del archivo BinaryTreeNode.hpp.

700{
701 std::ofstream myfile;
702 myfile.open(filename);
703 if (myfile.is_open())
704 {
705 myfile <<"// dot -Tpng -o "<<filename<<".png "<<filename<<"\n";
706 myfile <<"digraph G {\n";
707 this->ExportDotInStreamFile(myfile,FuncDatumToString);
708 myfile <<"}\n";
709
710 myfile.close();
711
712 return true;
713 }
714
715 return false;
716}
void ExportDotInStreamFile(std::ofstream &streamfile, std::string(*FuncDatumToString)(const Datum &)) const
Salva en formato .dot el objeto de tipo Pds::BinaryTreeNode.

◆ ExportXmlToStringStream()

template<typename Datum >
bool Pds::BinaryTreeNode< Datum >::ExportXmlToStringStream ( std::stringstream &  sstream,
std::string(*)(const Datum &)  FuncDatumToXmlString 
) const

Escribe en un std::stringstream en formato Xml el contenido de todo el arbol desde el Pds::BinaryTreeNode.

Por exemplo se escribirá:

<BinaryTreeNode>
<Datum>
...
</Datum>
<LeftNode>
<BinaryTreeNode>
...
</BinaryTreeNode>
</LeftNode>
<RightNode>
<BinaryTreeNode>
...
</BinaryTreeNode>
</RightNode>
</BinaryTreeNode>
Parámetros
[in]sstreamStream donde se escribirán los datos.
[in]FuncDatumToXmlStringFunción que convierte Datum en un Xml std::string.
Devuelve
Retorna true si todo fue bien o false en caso de error.

Definición en la línea 720 del archivo BinaryTreeNode.hpp.

723{
724 sstream<<"<"<<Pds::Ra::Tag::BinaryTreeNode<<">\n";
725
726 if(this->IsEmpty()==false)
727 {
728 sstream<<"<Datum>\n";
729 sstream<<FuncDatumToXmlString(*this->P);
730 sstream<<"</Datum>\n";
731
732 sstream<<"<LeftNode>\n";
733 if(this->LeftNode!=NULL)
734 {
735 this->LeftNode->ExportXmlToStringStream(sstream,FuncDatumToXmlString);
736 }
737 sstream<<"</LeftNode>\n";
738
739 sstream<<"<RightNode>\n";
740 if(this->RightNode!=NULL)
741 {
742 this->RightNode->ExportXmlToStringStream(sstream,FuncDatumToXmlString);
743 }
744 sstream<<"</RightNode>\n";
745 }
746
747 sstream<<"</"<<Pds::Ra::Tag::BinaryTreeNode<<">\n";
748
749 return true;
750}
const std::string BinaryTreeNode
Tag de un objeto de tipo Pds::Ra::Tag::BinaryTreeNode.
Definition: RaDefines.hpp:397

Hace referencia a Pds::Ra::Tag::BinaryTreeNode y Pds::BinaryTreeNode< Datum >::ExportXmlToStringStream().

Referenciado por Pds::BinaryTreeNode< Datum >::ExportXmlToStringStream().

Gráfico de llamadas para esta función:

◆ ExportXmlToStream()

template<typename Datum >
bool Pds::BinaryTreeNode< Datum >::ExportXmlToStream ( std::ofstream &  myfile,
std::string(*)(const Datum &)  FuncDatumToXmlString 
) const

Escribe en un std::ofstream en formato Xml el contenido de todo el arbol desde el Pds::BinaryTreeNode.

Por exemplo se escribirá:

<BinaryTreeNode>
<Datum>
...
</Datum>
<LeftNode>
<BinaryTreeNode>
...
</BinaryTreeNode>
</LeftNode>
<RightNode>
<BinaryTreeNode>
...
</BinaryTreeNode>
</RightNode>
</BinaryTreeNode>
Parámetros
[in]myfileStream donde se escribirán los datos.
[in]FuncDatumToXmlStringFunción que convierte Datum en un Xml std::string.
Devuelve
Retorna true si todo fue bien o false en caso de error.
Ejemplos
example_binarytreenode.cpp.

Definición en la línea 753 del archivo BinaryTreeNode.hpp.

756{
757 if(myfile.is_open()==false) return false;
758
759 std::stringstream ss;
760 this->ExportXmlToStringStream(ss,FuncDatumToXmlString);
761 myfile<<ss.str();
762
763 return true;
764}
bool ExportXmlToStringStream(std::stringstream &sstream, std::string(*FuncDatumToXmlString)(const Datum &)) const
Escribe en un std::stringstream en formato Xml el contenido de todo el arbol desde el Pds::BinaryTree...

◆ ExportXmlToString()

template<typename Datum >
std::string Pds::BinaryTreeNode< Datum >::ExportXmlToString ( std::string(*)(const Datum &)  FuncDatumToXmlString) const

Escribe en un std::string en formato Xml el contenido de todo el arbol desde el Pds::BinaryTreeNode.

Por exemplo se escribirá:

<BinaryTreeNode>
<Datum>
...
</Datum>
<LeftNode>
<BinaryTreeNode>
...
</BinaryTreeNode>
</LeftNode>
<RightNode>
<BinaryTreeNode>
...
</BinaryTreeNode>
</RightNode>
</BinaryTreeNode>
Parámetros
[in]FuncDatumToXmlStringFunción que convierte Datum en un Xml std::string.
Devuelve
Retorna un std::string en formato Xml el contenido de todo el arbol desde el Pds::BinaryTreeNode.

Definición en la línea 767 del archivo BinaryTreeNode.hpp.

769{
770 if(this->IsEmpty()) return "";
771
772 std::stringstream ss;
773 this->ExportXmlToStringStream(ss,FuncDatumToXmlString);
774
775 return ss.str();
776}

◆ ImportXmlFromString()

template<typename Datum >
bool Pds::BinaryTreeNode< Datum >::ImportXmlFromString ( const std::string &  str,
Datum(*)(const std::string &)  FuncXmlStringToDatum 
)

Lee desde un std::string en formato Xml el contenido de todo el arbol desde el Pds::BinaryTreeNode.

Por exemplo se lee desde:

<BinaryTreeNode>
<Datum>
...
</Datum>
<LeftNode>
<BinaryTreeNode>
...
</BinaryTreeNode>
</LeftNode>
<RightNode>
<BinaryTreeNode>
...
</BinaryTreeNode>
</RightNode>
</BinaryTreeNode>

Este formato de almacenamiento de datos proviene de usar ExportXmlToString().

Parámetros
[in]strEl std::string donde se leerán los datos. .
[in]FuncXmlStringToDatumFunción que convierte un Xml std::string en Datum.
Devuelve
Retorna true si todo fue bien o false en caso de error.
Ejemplos
example_binarytreenode.cpp.

Definición en la línea 780 del archivo BinaryTreeNode.hpp.

783{
784 unsigned int n;
785 this->MakeEmpty();
786
787 unsigned int L=2*Pds::Ra::Tag::BinaryTreeNode.size()+5;
788
789 if(str.length()<=L) return false;
790
791 std::string StrInNode;
792 StrInNode=Pds::Ra::FirstSubInString(str,
795 );
796 StrInNode=Pds::Ra::Trim(StrInNode);
797
798 if(StrInNode.size()==0) return false;
799
800 std::vector<std::string> dat;
801 std::vector<std::string> tag;
802 dat=Pds::Ra::SubsXmlInString(StrInNode,false,tag);
803
804 std::string StrInDatum="";
805 std::string StrInLeftNode="";
806 std::string StrInRightNode="";
807
808 for(n=0;n<tag.size();n++)
809 {
810 if(tag[n].compare("Datum")==0)
811 {
812 StrInDatum=dat[n];
813 }
814 else if(tag[n].compare("LeftNode")==0)
815 {
816 StrInLeftNode=dat[n];
817 }
818 else if(tag[n].compare("RightNode")==0)
819 {
820 StrInRightNode=dat[n];
821 }
822 }
823
824 if(StrInDatum.size()==0) return false;
825
826 this->P= new Datum();
827 *(this->P)=FuncXmlStringToDatum(StrInDatum);
828
829 if(StrInLeftNode.size()>L)
830 {
832 this->LeftNode->ImportXmlFromString(StrInLeftNode,FuncXmlStringToDatum);
833 }
834
835 if(StrInRightNode.size()>L)
836 {
838 this->RightNode->ImportXmlFromString(StrInRightNode,FuncXmlStringToDatum);
839 }
840
841
842 return true;
843}
std::string Trim(const std::string &str)
Esta función retorna una cadena que elimina al inicio y al final algunos caracteres si estos son cara...
std::string FirstSubInString(const std::string &str, const std::string &DelL, const std::string &DelR, bool Full=false)
Retorna la primera cadena de texto dentro de un par de delimitadores.
std::vector< std::string > SubsXmlInString(const std::string &str, bool Full, std::vector< std::string > &Tag)
Busca etiquetas tag entre '<' y '>' de modo de que se busca la forma <tag> dato </tag>....

Hace referencia a Pds::Ra::Tag::BinaryTreeNode, Pds::Ra::FirstSubInString(), Pds::BinaryTreeNode< Datum >::ImportXmlFromString(), Pds::Ra::SubsXmlInString() y Pds::Ra::Trim().

Referenciado por Pds::BinaryTreeNode< Datum >::ImportXmlFromString().

Gráfico de llamadas para esta función:

◆ ~BinaryTreeNode()

template<typename Datum >
Pds::BinaryTreeNode< Datum >::~BinaryTreeNode ( void  )

Definición en la línea 502 del archivo BinaryTreeNode.hpp.

503{
504 this->MakeEmpty();
505}

Enlaces de interés

HomePage Bazaar Download Bug report Ayuda Developer Feed