Tracer  v0.0.1
A platform independant stack trace generator
cPrinterContainer.cpp
Go to the documentation of this file.
1 /* Copyright (c) 2017, Daniel Mensinger
2  * All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are met:
6  * * Redistributions of source code must retain the above copyright
7  * notice, this list of conditions and the following disclaimer.
8  * * Redistributions in binary form must reproduce the above copyright
9  * notice, this list of conditions and the following disclaimer in the
10  * documentation and/or other materials provided with the distribution.
11  * * Neither the name of the Daniel Mensinger nor the
12  * names of its contributors may be used to endorse or promote products
13  * derived from this software without specific prior written permission.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18  * DISCLAIMED. IN NO EVENT SHALL Daniel Mensinger BE LIABLE FOR ANY
19  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  */
27 
28 #include "defines.hpp"
29 #include "tracer.h"
30 #include "tracerInternal.hpp"
31 #include <string.h>
32 
33 using namespace tracer;
34 using namespace std;
35 
36 extern "C" {
37 
39 tr_Printer_t *tr_getPrinter(void *printer) {
40  if (!printer)
41  return nullptr;
42 
43  tr_Printer_t *cont = new tr_Printer_t{PrinterContainer(static_cast<AbstractPrinter *>(printer))};
44  return cont;
45 }
46 
49 
52 
55 
58 
61  if (!pContainer)
62  return nullptr;
63 
64  return pContainer->obj.get();
65 }
66 
68 void tr_freePrinter(tr_Printer_t *pContainer) {
69  if (pContainer)
70  delete pContainer;
71 }
72 }
static PrinterContainer system()
Returns a container with a tracer::SystemInfoPrinter object.
static PrinterContainer file()
Returns a container with a tracer::FilePrinter object.
STL namespace.
Internal C wrapper structure.
tr_Printer_t * tr_getPrinter__file()
Wrapper for tracer::PrinterContainer::file.
tr_Printer_t * tr_getPrinter__plain()
Wrapper for tracer::PrinterContainer::plain.
AbstractPrinter * get()
Returns the printer.
tracer::PrinterContainer obj
PrinterContainer object.
tr_Printer_t * tr_getPrinter__system()
Wrapper for tracer::PrinterContainer::system.
tr_Printer_t * tr_getPrinter(void *printer)
Manages the Printer.
void * tr_PrinterContainer__get(tr_Printer_t *pContainer)
Wrapper for tracer::PrinterContainer::get.
static PrinterContainer plain()
Returns a container with a tracer::DefaultPrinter object.
A container for printers (like std::unique_ptr)
void tr_freePrinter(tr_Printer_t *pContainer)
Frees the Printer container.
tr_Printer_t * tr_getPrinter__fancy()
Wrapper for tracer::PrinterContainer::fancy.
static PrinterContainer fancy()
Returns a container with a tracer::FancyPrinter object.