PGROUTING  3.2
pgr_alloc.hpp
Go to the documentation of this file.
1 /*PGR-GNU*****************************************************************
2 File: pgr_palloc.hpp
3 
4 Copyright (c) 2015 Celia Virginia Vergara Castillo
6 
7 ------
8 
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
13 
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18 
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
22 
23  ********************************************************************PGR-GNU*/
24 
27 #ifndef INCLUDE_CPP_COMMON_PGR_ALLOC_HPP_
28 #define INCLUDE_CPP_COMMON_PGR_ALLOC_HPP_
29 #pragma once
30 
31 
32 #include <string>
33 
34 extern "C" {
35 
36 extern
37 void* SPI_palloc(size_t size);
38 
39 extern void *
40 SPI_repalloc(void *pointer, size_t size);
41 
42 extern void
43 SPI_pfree(void *pointer);
44 
45 }
46 
47 
64 template <typename T>
65 T*
66 pgr_alloc(std::size_t size, T* ptr) {
67  if (!ptr) {
68  ptr = static_cast<T*>(SPI_palloc(size * sizeof(T)));
69  } else {
70  ptr = static_cast<T*>(SPI_repalloc(ptr, size * sizeof(T)));
71  }
72  return ptr;
73 }
74 
75 template <typename T>
76 T*
77 pgr_free(T* ptr) {
78  if (ptr) {
79  SPI_pfree(ptr);
80  }
81  return nullptr;
82 }
83 
84 char *
85 pgr_msg(const std::string &msg);
86 
87 #endif // INCLUDE_CPP_COMMON_PGR_ALLOC_HPP_
pgr_alloc
T * pgr_alloc(std::size_t size, T *ptr)
allocates memory
Definition: pgr_alloc.hpp:66
SPI_repalloc
void * SPI_repalloc(void *pointer, size_t size)
pgr_msg
char * pgr_msg(const std::string &msg)
Definition: pgr_alloc.cpp:30
SPI_pfree
void SPI_pfree(void *pointer)
pgr_free
T * pgr_free(T *ptr)
Definition: pgr_alloc.hpp:77
SPI_palloc
void * SPI_palloc(size_t size)