Assists music production by grouping standalone programs into sessions. Community version of "Non Session Manager".
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

105 lines
3.5KB

  1. /*******************************************************************************/
  2. /* Copyright (C) 2008 Jonathan Moore Liles */
  3. /* */
  4. /* This program is free software; you can redistribute it and/or modify it */
  5. /* under the terms of the GNU General Public License as published by the */
  6. /* Free Software Foundation; either version 2 of the License, or (at your */
  7. /* option) any later version. */
  8. /* */
  9. /* This program is distributed in the hope that it will be useful, but WITHOUT */
  10. /* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
  11. /* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for */
  12. /* more details. */
  13. /* */
  14. /* You should have received a copy of the GNU General Public License along */
  15. /* with This program; see the file COPYING. If not,write to the Free Software */
  16. /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
  17. /*******************************************************************************/
  18. #pragma once
  19. #include "Loggable.H"
  20. #include "types.h"
  21. class Log_Entry
  22. {
  23. // vector <Pair> _sa;
  24. char **_sa;
  25. int _i;
  26. /* not permitted */
  27. Log_Entry ( const Log_Entry &rhs );
  28. Log_Entry & operator= ( const Log_Entry &rhs );
  29. static char ** parse_alist ( const char *s );
  30. static bool log_diff ( char **sa1, char **sa2 );
  31. public:
  32. Log_Entry ( );
  33. Log_Entry ( char **sa );
  34. Log_Entry ( const char *s );
  35. ~Log_Entry ( );
  36. /****************/
  37. /* Construction */
  38. /****************/
  39. void grow ( );
  40. #define ADD( type, format, exp ) \
  41. void add ( const char *name, type v ) \
  42. { \
  43. grow(); \
  44. (void)asprintf( &_sa[ _i ], "%s " format, name, (exp) ); \
  45. strtok( _sa[ _i++ ], " " ); \
  46. }
  47. void add_raw ( const char *name, const char *v )
  48. {
  49. grow();
  50. (void)asprintf( &_sa[ _i ], "%s %s", name, v );
  51. strtok( _sa[ _i++ ], " " );
  52. }
  53. /***************/
  54. /* Examination */
  55. /***************/
  56. static bool diff ( Log_Entry *e1, Log_Entry *e2 );
  57. int size ( void ) const;
  58. void get ( int n, const char **name, const char **value ) const;
  59. char **sa ( void );
  60. char *print ( void ) const;
  61. /* #define ADD ( type, format, exp ) \ */
  62. /* void add ( const char *name, type v ) \ */
  63. /* { \ */
  64. /* char pat[ 256 ]; \ */
  65. /* Pair p; \ */
  66. /* p.name = strdup( name ); \ */
  67. /* snprintf( pat, sizeof( pat ), format, exp ); \ */
  68. /* p.value = strdup( pat ); \ */
  69. /* _sa.push( p ); \ */
  70. /* } \ */
  71. void remove ( const char *s );
  72. ADD( int, "%d", v );
  73. ADD( nframes_t, "%lu", (unsigned long)v );
  74. ADD( unsigned long, "%lu", v );
  75. ADD( const char *, "\"%s\"", v ? Loggable::escape( v ) : "" );
  76. ADD( Loggable * , "0x%X", v ? v->id() : 0 );
  77. ADD( float, "%f", v );
  78. ADD( double, "%f", v );
  79. #undef ADD
  80. };