Macaulay2 Engine
Loading...
Searching...
No Matches
util.hpp
Go to the documentation of this file.
1// Copyright 2014-2016 Michael E. Stillman
2#pragma once
3
29
30#include <string> // for string, basic_string
31#include <vector> // for vector
32#include <iostream> // for ostream
33
34#include "interface/m2-mem.h" // for getmemarraytype
35#include "interface/m2-types.h" // for M2_* types
36
40
41inline M2_string string_std_to_M2(const std::string& s)
42{
43 // The function M2_tostringn does not modify s.data()...
44 return M2_tostringn(const_cast<char*>(s.data()), static_cast<int>(s.size()));
45}
46
47inline std::string string_M2_to_std(const M2_string s)
48{
49 return std::string((char*)s->array, s->len);
50}
51
52inline void M2_ArrayString_to_stdvector(M2_ArrayString strs,
53 std::vector<std::string>& result)
54{
55 result.reserve(strs->len);
56 for (auto i = 0; i < strs->len; i++)
57 result.push_back(string_M2_to_std(strs->array[i]));
58}
59
60inline std::vector<std::string> M2_ArrayString_to_stdvector(M2_ArrayString strs)
61{
62 std::vector<std::string> result;
64 return result;
65}
66
67inline M2_ArrayString stdvector_to_M2_ArrayString(
68 const std::vector<std::string>& strs)
69{
70 // needed since M2_ArrayString len field is int
71 auto len = static_cast<int>(strs.size());
72 M2_ArrayString a = getmemarraytype(M2_ArrayString, len);
73 for (auto i = 0; i < len; i++) a->array[i] = M2_tostring(strs[i].c_str());
74 a->len = len;
75 return a;
76}
77
78template <typename T>
79inline M2_arrayint stdvector_to_M2_arrayint(const std::vector<T>& v)
80{
81 M2_arrayint result = M2_makearrayint(static_cast<int>(v.size()));
82 for (auto i = 0; i < v.size(); i++) result->array[i] = static_cast<int>(v[i]);
83 return result;
84}
85
86// TODO: can this be combined with the above?
87template <typename T>
89{
90 M2_arrayint result = M2_makearrayint(static_cast<int>(v.size()));
91 for (auto i = 0; i < v.size(); i++) result->array[i] = static_cast<int>(v[i]);
92 return result;
93}
94
95template <typename T>
96inline std::vector<T> M2_arrayint_to_stdvector(M2_arrayint arr)
97{
98 std::vector<T> result;
99 result.reserve(arr->len);
100 for (auto i = 0; i < arr->len; i++) result.emplace_back(arr->array[i]);
101 return result;
102}
103
104template <typename T>
105inline std::ostream& operator<<(std::ostream& o, const std::vector<T>& ts)
106{
107 o << "[";
108 for (auto a : ts)
109 o << a << " ";
110 o << "]";
111 return o;
112}
113
114// Local Variables:
115// compile-command: "make -C $M2BUILDDIR/Macaulay2/e "
116// indent-tabs-mode: nil
117// End:
void size_t s
Definition m2-mem.cpp:271
VALGRIND_MAKE_MEM_DEFINED & result(result)
#define getmemarraytype(S, len)
Definition m2-mem.h:142
Engine-wide GC allocator surface (getmem / getmem_atomic) and debug-allocation trap.
M2_string M2_tostringn(char *s, int n)
Definition m2-types.cpp:40
M2_string M2_tostring(const char *s)
Definition m2-types.cpp:31
M2_arrayint M2_makearrayint(int n)
Definition m2-types.cpp:6
Engine-to-interpreter type vocabulary across the C++ / .dd boundary.
typename std::vector< T, gc_allocator< T > > gc_vector
a version of the STL vector, which allocates its backing memory with gc.
Definition newdelete.hpp:76
M2_string string_std_to_M2(const std::string &s)
Definition util.hpp:41
M2_arrayint stdvector_to_M2_arrayint(const std::vector< T > &v)
Definition util.hpp:79
std::ostream & operator<<(std::ostream &o, const std::vector< T > &ts)
Definition util.hpp:105
void M2_ArrayString_to_stdvector(M2_ArrayString strs, std::vector< std::string > &result)
Definition util.hpp:52
std::string string_M2_to_std(const M2_string s)
Definition util.hpp:47
M2_ArrayString stdvector_to_M2_ArrayString(const std::vector< std::string > &strs)
Definition util.hpp:67
std::vector< T > M2_arrayint_to_stdvector(M2_arrayint arr)
Definition util.hpp:96