Biblioteca C++ de Lucho

Este es un proyecto que nació hacia el año 2001, durante mi curso de Estructuras de Datos y Algoritmos. Es un conjunto de bibliotecas, clases y estructuras en C++, para estandaizar el desarrollo de mis programas, usando un conjunto homogéneo de utilidades (aparte de las bibliotecas STL y WxWidgets).

El proyecto fue más que nada de uso personal hasta 2003, en que dejé el lenguaje C++ para preocuparme de otros lenguajes como PHP y Javascript. Sin embargo, cuando desde 2009 decidí regresar a C++ y me encontré con muchos cambios|Apache Wiki:C++|fetchname="tooltip"|doa| que prácticamente llevan a un nuevo lenguaje, decidí reimplementar las partes más básicas de la biblioteca y liberarlas.

La biblioteca en sí se compone de tres partes: snippets y fragmentos de código misceláneos que componen mi toolbox (como la implementación de popen2 que está en Public Domain), envoltorios y encapsuladores como map_keys_iterator), y tres bibliotecas mayores de amplio espectro que he creado: Natural, exec y basenum.

La biblioteca estará disponible para descarga, por el momento estoy afinando la interface y generando una documentación en HTML gracias a Doxygen. Si encuentro la manera de convertir esa documentación a DokuWiki, será genial.

  • Natural.
  • basenum.
  • slstring (string literals wrapper).
  • q2i (complex i/o streams manipulator)

Estructura

Lucho++”, como es el nombre de la biblioteca, es en realidad un conjunto de paquetes, que cubren cuatro funcionalidades específicas:

  • el paquete estructuras 1) que contiene definiciones, clases y protocolos implementando varios de los conceptos del mis cursos de estructuras de datos y complejidad computacional, como: pilas, colas, listas auto-ordenadas, gestión de intervalos, bimapas, etc…; radicando la principal diferencia de otras bibliotecas genéricas como STL o Boost, en que estructuras hace un uso básico de plantillas y programación genérica, para proveer una implementación simple sin pasar a las complicaciones de notación y de iteradores en las que caen las plantillas de la STL.
  • el paquete matematica que contiene definiciones que tuve que implementar para estandarizar el desarrollo cuando se usan funciones matemáticas y macros que cambian de compilador en compilador (como max/min, o las implementaciones de pow) y para entregar un enfoque de clases a algunos conceptos que no están apropiadamente abordados en otras bibliotecas genéricas, como: implementación de fracciones, notación de ángulos, E/S de números grandes, contadores auto-gestionados y funciones de matemáticas discretas.
  • el paquete iomanip, que contiene cuatro vistas de clase para algunas operaciones de E/S cuya finalidad era proveer compatibilidad con la E/S de lenguajes como BASIC, que tratan de forma diferente las cadenas de texto y los delimitadores de campos; además de proveer una generalización de E/S para recibir pulsaciones simples de teclas y modificadores en sistemas conformantes a POSIX.
  • el paquete tiempo, que contiene estructuras y enfoque de clase para la representación def fechas y horas; inicialmente un wrapper sobre la estructura estándar struct tm, luego evolucionó para convertirse en un sistema de representación práctivo y liviano, independiente de las nacionalizaciones (locales), y lo más conforme posible al estándar ISO 8601 para representación de fechas, horas e intervalos de tiempo, además de promover la eficiencia usando sólo aritmética de enteros.

Todo esto ha sido programado inicialmente en C++ estándar del 2003 (ANSI/IEEC), y ha ido poco a poco progresando para conformar a los enfoques del estándar C++0X (2002-200X).

Dependencias

  • Compiladores de C++ soportados:
    • gcc 4.2 o superior con TR1 configurado (o alternativamente Boost.TR1).
    • Intel C++ Compiler 11 (Linux).

Opcionales:

  • Los siguientes componentes de Boost:
    • Boost.TR1.
    • Boost.Tribool
    • Boost.Foreach

Descarga

Documentación

La documentación está disponible como un paquete separado (lpp-docs), disponible en dos formatos: HTML y manpages, generados con DOxygen.

Revisión Más Reciente

Enero de 2007

1)
un alias es edya