netgen-mesher 6.2.2506.post35.dev0__cp314-cp314-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- netgen/NgOCC.py +7 -0
- netgen/__init__.py +114 -0
- netgen/__init__.pyi +22 -0
- netgen/__main__.py +53 -0
- netgen/cmake/NetgenConfig.cmake +79 -0
- netgen/cmake/netgen-targets-release.cmake +69 -0
- netgen/cmake/netgen-targets.cmake +146 -0
- netgen/config/__init__.py +1 -0
- netgen/config/__init__.pyi +52 -0
- netgen/config/__main__.py +4 -0
- netgen/config/config.py +68 -0
- netgen/config/config.pyi +54 -0
- netgen/csg.py +25 -0
- netgen/geom2d.py +178 -0
- netgen/gui.py +82 -0
- netgen/include/core/archive.hpp +1256 -0
- netgen/include/core/array.hpp +1760 -0
- netgen/include/core/autodiff.hpp +1131 -0
- netgen/include/core/autodiffdiff.hpp +733 -0
- netgen/include/core/bitarray.hpp +240 -0
- netgen/include/core/concurrentqueue.h +3619 -0
- netgen/include/core/exception.hpp +145 -0
- netgen/include/core/flags.hpp +199 -0
- netgen/include/core/hashtable.hpp +1281 -0
- netgen/include/core/localheap.hpp +318 -0
- netgen/include/core/logging.hpp +117 -0
- netgen/include/core/memtracer.hpp +221 -0
- netgen/include/core/mpi4py_pycapi.h +245 -0
- netgen/include/core/mpi_wrapper.hpp +643 -0
- netgen/include/core/ng_mpi.hpp +94 -0
- netgen/include/core/ng_mpi_generated_declarations.hpp +155 -0
- netgen/include/core/ng_mpi_native.hpp +25 -0
- netgen/include/core/ngcore.hpp +32 -0
- netgen/include/core/ngcore_api.hpp +152 -0
- netgen/include/core/ngstream.hpp +115 -0
- netgen/include/core/paje_trace.hpp +279 -0
- netgen/include/core/profiler.hpp +382 -0
- netgen/include/core/python_ngcore.hpp +457 -0
- netgen/include/core/ranges.hpp +109 -0
- netgen/include/core/register_archive.hpp +100 -0
- netgen/include/core/signal.hpp +82 -0
- netgen/include/core/simd.hpp +160 -0
- netgen/include/core/simd_arm64.hpp +407 -0
- netgen/include/core/simd_avx.hpp +394 -0
- netgen/include/core/simd_avx512.hpp +285 -0
- netgen/include/core/simd_generic.hpp +1053 -0
- netgen/include/core/simd_math.hpp +178 -0
- netgen/include/core/simd_sse.hpp +289 -0
- netgen/include/core/statushandler.hpp +37 -0
- netgen/include/core/symboltable.hpp +153 -0
- netgen/include/core/table.hpp +810 -0
- netgen/include/core/taskmanager.hpp +1161 -0
- netgen/include/core/type_traits.hpp +65 -0
- netgen/include/core/utils.hpp +385 -0
- netgen/include/core/version.hpp +102 -0
- netgen/include/core/xbool.hpp +47 -0
- netgen/include/csg/algprim.hpp +563 -0
- netgen/include/csg/brick.hpp +150 -0
- netgen/include/csg/csg.hpp +43 -0
- netgen/include/csg/csgeom.hpp +389 -0
- netgen/include/csg/csgparser.hpp +101 -0
- netgen/include/csg/curve2d.hpp +67 -0
- netgen/include/csg/edgeflw.hpp +112 -0
- netgen/include/csg/explicitcurve2d.hpp +113 -0
- netgen/include/csg/extrusion.hpp +185 -0
- netgen/include/csg/gencyl.hpp +70 -0
- netgen/include/csg/geoml.hpp +16 -0
- netgen/include/csg/identify.hpp +213 -0
- netgen/include/csg/manifold.hpp +29 -0
- netgen/include/csg/meshsurf.hpp +46 -0
- netgen/include/csg/polyhedra.hpp +121 -0
- netgen/include/csg/revolution.hpp +180 -0
- netgen/include/csg/singularref.hpp +84 -0
- netgen/include/csg/solid.hpp +295 -0
- netgen/include/csg/specpoin.hpp +194 -0
- netgen/include/csg/spline3d.hpp +99 -0
- netgen/include/csg/splinesurface.hpp +85 -0
- netgen/include/csg/surface.hpp +394 -0
- netgen/include/csg/triapprox.hpp +63 -0
- netgen/include/csg/vscsg.hpp +34 -0
- netgen/include/general/autodiff.hpp +356 -0
- netgen/include/general/autoptr.hpp +39 -0
- netgen/include/general/gzstream.h +121 -0
- netgen/include/general/hashtabl.hpp +1692 -0
- netgen/include/general/myadt.hpp +48 -0
- netgen/include/general/mystring.hpp +226 -0
- netgen/include/general/netgenout.hpp +205 -0
- netgen/include/general/ngarray.hpp +797 -0
- netgen/include/general/ngbitarray.hpp +149 -0
- netgen/include/general/ngpython.hpp +74 -0
- netgen/include/general/optmem.hpp +44 -0
- netgen/include/general/parthreads.hpp +138 -0
- netgen/include/general/seti.hpp +50 -0
- netgen/include/general/sort.hpp +47 -0
- netgen/include/general/spbita2d.hpp +59 -0
- netgen/include/general/stack.hpp +114 -0
- netgen/include/general/table.hpp +280 -0
- netgen/include/general/template.hpp +509 -0
- netgen/include/geom2d/csg2d.hpp +750 -0
- netgen/include/geom2d/geometry2d.hpp +280 -0
- netgen/include/geom2d/spline2d.hpp +234 -0
- netgen/include/geom2d/vsgeom2d.hpp +28 -0
- netgen/include/gprim/adtree.hpp +1392 -0
- netgen/include/gprim/geom2d.hpp +858 -0
- netgen/include/gprim/geom3d.hpp +749 -0
- netgen/include/gprim/geomfuncs.hpp +212 -0
- netgen/include/gprim/geomobjects.hpp +544 -0
- netgen/include/gprim/geomops.hpp +404 -0
- netgen/include/gprim/geomtest3d.hpp +101 -0
- netgen/include/gprim/gprim.hpp +33 -0
- netgen/include/gprim/spline.hpp +778 -0
- netgen/include/gprim/splinegeometry.hpp +73 -0
- netgen/include/gprim/transform3d.hpp +216 -0
- netgen/include/include/acisgeom.hpp +3 -0
- netgen/include/include/csg.hpp +1 -0
- netgen/include/include/geometry2d.hpp +1 -0
- netgen/include/include/gprim.hpp +1 -0
- netgen/include/include/incopengl.hpp +62 -0
- netgen/include/include/inctcl.hpp +13 -0
- netgen/include/include/incvis.hpp +6 -0
- netgen/include/include/linalg.hpp +1 -0
- netgen/include/include/meshing.hpp +1 -0
- netgen/include/include/myadt.hpp +1 -0
- netgen/include/include/mydefs.hpp +70 -0
- netgen/include/include/mystdlib.h +59 -0
- netgen/include/include/netgen_config.hpp +27 -0
- netgen/include/include/netgen_version.hpp +9 -0
- netgen/include/include/nginterface_v2_impl.hpp +395 -0
- netgen/include/include/ngsimd.hpp +1 -0
- netgen/include/include/occgeom.hpp +1 -0
- netgen/include/include/opti.hpp +1 -0
- netgen/include/include/parallel.hpp +1 -0
- netgen/include/include/stlgeom.hpp +1 -0
- netgen/include/include/visual.hpp +1 -0
- netgen/include/interface/rw_medit.hpp +11 -0
- netgen/include/interface/writeuser.hpp +80 -0
- netgen/include/linalg/densemat.hpp +414 -0
- netgen/include/linalg/linalg.hpp +29 -0
- netgen/include/linalg/opti.hpp +142 -0
- netgen/include/linalg/polynomial.hpp +47 -0
- netgen/include/linalg/vector.hpp +217 -0
- netgen/include/meshing/adfront2.hpp +274 -0
- netgen/include/meshing/adfront3.hpp +332 -0
- netgen/include/meshing/basegeom.hpp +370 -0
- netgen/include/meshing/bcfunctions.hpp +53 -0
- netgen/include/meshing/bisect.hpp +72 -0
- netgen/include/meshing/boundarylayer.hpp +113 -0
- netgen/include/meshing/classifyhpel.hpp +1984 -0
- netgen/include/meshing/clusters.hpp +46 -0
- netgen/include/meshing/curvedelems.hpp +274 -0
- netgen/include/meshing/delaunay2d.hpp +73 -0
- netgen/include/meshing/fieldlines.hpp +103 -0
- netgen/include/meshing/findip.hpp +198 -0
- netgen/include/meshing/findip2.hpp +103 -0
- netgen/include/meshing/geomsearch.hpp +69 -0
- netgen/include/meshing/global.hpp +54 -0
- netgen/include/meshing/hpref_hex.hpp +330 -0
- netgen/include/meshing/hpref_prism.hpp +3405 -0
- netgen/include/meshing/hpref_pyramid.hpp +154 -0
- netgen/include/meshing/hpref_quad.hpp +2082 -0
- netgen/include/meshing/hpref_segm.hpp +122 -0
- netgen/include/meshing/hpref_tet.hpp +4230 -0
- netgen/include/meshing/hpref_trig.hpp +848 -0
- netgen/include/meshing/hprefinement.hpp +366 -0
- netgen/include/meshing/improve2.hpp +178 -0
- netgen/include/meshing/improve3.hpp +151 -0
- netgen/include/meshing/localh.hpp +223 -0
- netgen/include/meshing/meshclass.hpp +1076 -0
- netgen/include/meshing/meshfunc.hpp +47 -0
- netgen/include/meshing/meshing.hpp +63 -0
- netgen/include/meshing/meshing2.hpp +163 -0
- netgen/include/meshing/meshing3.hpp +123 -0
- netgen/include/meshing/meshtool.hpp +90 -0
- netgen/include/meshing/meshtype.hpp +1930 -0
- netgen/include/meshing/msghandler.hpp +62 -0
- netgen/include/meshing/paralleltop.hpp +172 -0
- netgen/include/meshing/python_mesh.hpp +206 -0
- netgen/include/meshing/ruler2.hpp +172 -0
- netgen/include/meshing/ruler3.hpp +211 -0
- netgen/include/meshing/soldata.hpp +141 -0
- netgen/include/meshing/specials.hpp +17 -0
- netgen/include/meshing/surfacegeom.hpp +73 -0
- netgen/include/meshing/topology.hpp +1003 -0
- netgen/include/meshing/validate.hpp +21 -0
- netgen/include/meshing/visual_interface.hpp +71 -0
- netgen/include/mydefs.hpp +70 -0
- netgen/include/nginterface.h +474 -0
- netgen/include/nginterface_v2.hpp +406 -0
- netgen/include/nglib.h +697 -0
- netgen/include/nglib_occ.h +50 -0
- netgen/include/occ/occ_edge.hpp +47 -0
- netgen/include/occ/occ_face.hpp +52 -0
- netgen/include/occ/occ_solid.hpp +23 -0
- netgen/include/occ/occ_utils.hpp +376 -0
- netgen/include/occ/occ_vertex.hpp +30 -0
- netgen/include/occ/occgeom.hpp +659 -0
- netgen/include/occ/occmeshsurf.hpp +168 -0
- netgen/include/occ/vsocc.hpp +33 -0
- netgen/include/pybind11/LICENSE +29 -0
- netgen/include/pybind11/attr.h +722 -0
- netgen/include/pybind11/buffer_info.h +208 -0
- netgen/include/pybind11/cast.h +2361 -0
- netgen/include/pybind11/chrono.h +228 -0
- netgen/include/pybind11/common.h +2 -0
- netgen/include/pybind11/complex.h +74 -0
- netgen/include/pybind11/conduit/README.txt +15 -0
- netgen/include/pybind11/conduit/pybind11_conduit_v1.h +116 -0
- netgen/include/pybind11/conduit/pybind11_platform_abi_id.h +87 -0
- netgen/include/pybind11/conduit/wrap_include_python_h.h +72 -0
- netgen/include/pybind11/critical_section.h +56 -0
- netgen/include/pybind11/detail/class.h +823 -0
- netgen/include/pybind11/detail/common.h +1348 -0
- netgen/include/pybind11/detail/cpp_conduit.h +75 -0
- netgen/include/pybind11/detail/descr.h +226 -0
- netgen/include/pybind11/detail/dynamic_raw_ptr_cast_if_possible.h +39 -0
- netgen/include/pybind11/detail/exception_translation.h +71 -0
- netgen/include/pybind11/detail/function_record_pyobject.h +191 -0
- netgen/include/pybind11/detail/init.h +538 -0
- netgen/include/pybind11/detail/internals.h +799 -0
- netgen/include/pybind11/detail/native_enum_data.h +209 -0
- netgen/include/pybind11/detail/pybind11_namespace_macros.h +82 -0
- netgen/include/pybind11/detail/struct_smart_holder.h +378 -0
- netgen/include/pybind11/detail/type_caster_base.h +1591 -0
- netgen/include/pybind11/detail/typeid.h +65 -0
- netgen/include/pybind11/detail/using_smart_holder.h +22 -0
- netgen/include/pybind11/detail/value_and_holder.h +90 -0
- netgen/include/pybind11/eigen/common.h +9 -0
- netgen/include/pybind11/eigen/matrix.h +723 -0
- netgen/include/pybind11/eigen/tensor.h +521 -0
- netgen/include/pybind11/eigen.h +12 -0
- netgen/include/pybind11/embed.h +320 -0
- netgen/include/pybind11/eval.h +161 -0
- netgen/include/pybind11/functional.h +147 -0
- netgen/include/pybind11/gil.h +199 -0
- netgen/include/pybind11/gil_safe_call_once.h +102 -0
- netgen/include/pybind11/gil_simple.h +37 -0
- netgen/include/pybind11/iostream.h +265 -0
- netgen/include/pybind11/native_enum.h +67 -0
- netgen/include/pybind11/numpy.h +2312 -0
- netgen/include/pybind11/operators.h +202 -0
- netgen/include/pybind11/options.h +92 -0
- netgen/include/pybind11/pybind11.h +3645 -0
- netgen/include/pybind11/pytypes.h +2680 -0
- netgen/include/pybind11/stl/filesystem.h +114 -0
- netgen/include/pybind11/stl.h +666 -0
- netgen/include/pybind11/stl_bind.h +858 -0
- netgen/include/pybind11/subinterpreter.h +299 -0
- netgen/include/pybind11/trampoline_self_life_support.h +65 -0
- netgen/include/pybind11/type_caster_pyobject_ptr.h +61 -0
- netgen/include/pybind11/typing.h +298 -0
- netgen/include/pybind11/warnings.h +75 -0
- netgen/include/stlgeom/meshstlsurface.hpp +67 -0
- netgen/include/stlgeom/stlgeom.hpp +491 -0
- netgen/include/stlgeom/stlline.hpp +193 -0
- netgen/include/stlgeom/stltool.hpp +331 -0
- netgen/include/stlgeom/stltopology.hpp +419 -0
- netgen/include/stlgeom/vsstl.hpp +58 -0
- netgen/include/visualization/meshdoc.hpp +42 -0
- netgen/include/visualization/mvdraw.hpp +325 -0
- netgen/include/visualization/vispar.hpp +128 -0
- netgen/include/visualization/visual.hpp +28 -0
- netgen/include/visualization/visual_api.hpp +10 -0
- netgen/include/visualization/vssolution.hpp +399 -0
- netgen/lib/libnggui.lib +0 -0
- netgen/lib/ngcore.lib +0 -0
- netgen/lib/nglib.lib +0 -0
- netgen/lib/togl.lib +0 -0
- netgen/libnggui.dll +0 -0
- netgen/libngguipy.lib +0 -0
- netgen/libngguipy.pyd +0 -0
- netgen/libngpy/_NgOCC.pyi +1545 -0
- netgen/libngpy/__init__.pyi +7 -0
- netgen/libngpy/_csg.pyi +259 -0
- netgen/libngpy/_geom2d.pyi +323 -0
- netgen/libngpy/_meshing.pyi +1111 -0
- netgen/libngpy/_stl.pyi +131 -0
- netgen/libngpy.lib +0 -0
- netgen/libngpy.pyd +0 -0
- netgen/meshing.py +65 -0
- netgen/ngcore.dll +0 -0
- netgen/nglib.dll +0 -0
- netgen/occ.py +52 -0
- netgen/read_gmsh.py +259 -0
- netgen/read_meshio.py +22 -0
- netgen/stl.py +2 -0
- netgen/togl.dll +0 -0
- netgen/version.py +2 -0
- netgen/webgui.py +529 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/boundarycondition.geo +16 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/boxcyl.geo +32 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/circle_on_cube.geo +27 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cone.geo +13 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cube.geo +16 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cubeandring.geo +55 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cubeandspheres.geo +21 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cubemcyl.geo +18 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cubemsphere.geo +19 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cylinder.geo +12 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cylsphere.geo +12 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/doc/ng4.pdf +0 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/ellipsoid.geo +8 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/ellipticcyl.geo +10 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/extrusion.geo +99 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/fichera.geo +24 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/frame.step +11683 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/hinge.stl +8486 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/lshape3d.geo +26 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/manyholes.geo +26 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/manyholes2.geo +26 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/matrix.geo +27 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/ortho.geo +11 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/part1.stl +2662 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/period.geo +33 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/py_tutorials/exportNeutral.py +26 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/py_tutorials/mesh.py +19 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/py_tutorials/shaft.geo +65 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/revolution.geo +18 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/screw.step +1694 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/sculpture.geo +13 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/shaft.geo +65 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/shell.geo +10 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/sphere.geo +8 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/sphereincube.geo +17 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/square.in2d +35 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/squarecircle.in2d +48 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/squarehole.in2d +47 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/torus.geo +8 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/trafo.geo +57 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/twobricks.geo +15 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/twocubes.geo +18 -0
- netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/twocyl.geo +16 -0
- netgen_mesher-6.2.2506.post35.dev0.dist-info/METADATA +15 -0
- netgen_mesher-6.2.2506.post35.dev0.dist-info/RECORD +340 -0
- netgen_mesher-6.2.2506.post35.dev0.dist-info/WHEEL +5 -0
- netgen_mesher-6.2.2506.post35.dev0.dist-info/entry_points.txt +2 -0
- netgen_mesher-6.2.2506.post35.dev0.dist-info/licenses/AUTHORS +1 -0
- netgen_mesher-6.2.2506.post35.dev0.dist-info/licenses/LICENSE +504 -0
- netgen_mesher-6.2.2506.post35.dev0.dist-info/top_level.txt +2 -0
- pyngcore/__init__.py +1 -0
- pyngcore/pyngcore.cp314-win_amd64.pyd +0 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
#ifndef FILE_BitArray
|
|
2
|
+
#define FILE_BitArray
|
|
3
|
+
|
|
4
|
+
/**************************************************************************/
|
|
5
|
+
/* File: bitarray.hpp */
|
|
6
|
+
/* Author: Joachim Schoeberl */
|
|
7
|
+
/* Date: 01. Jun. 95 */
|
|
8
|
+
/**************************************************************************/
|
|
9
|
+
|
|
10
|
+
#include <limits.h>
|
|
11
|
+
|
|
12
|
+
namespace netgen
|
|
13
|
+
{
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
data type NgBitArray
|
|
17
|
+
|
|
18
|
+
NgBitArray is a compressed array of Boolean information. By Set and Clear
|
|
19
|
+
the whole array or one bit can be set or reset, respectively.
|
|
20
|
+
Test returns the state of the occurring bit.
|
|
21
|
+
No range checking is done.
|
|
22
|
+
|
|
23
|
+
index ranges from 0 to size-1
|
|
24
|
+
*/
|
|
25
|
+
class NgBitArray
|
|
26
|
+
{
|
|
27
|
+
INDEX size;
|
|
28
|
+
unsigned char * data;
|
|
29
|
+
|
|
30
|
+
public:
|
|
31
|
+
|
|
32
|
+
// [[ deprecated ("use BitArray instead")]]
|
|
33
|
+
DLL_HEADER NgBitArray ();
|
|
34
|
+
///
|
|
35
|
+
// [[ deprecated ("use BitArray instead")]]
|
|
36
|
+
DLL_HEADER NgBitArray (INDEX asize);
|
|
37
|
+
///
|
|
38
|
+
DLL_HEADER ~NgBitArray ();
|
|
39
|
+
|
|
40
|
+
///
|
|
41
|
+
DLL_HEADER void SetSize (INDEX asize);
|
|
42
|
+
///
|
|
43
|
+
INDEX Size () const
|
|
44
|
+
{
|
|
45
|
+
return size;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
///
|
|
49
|
+
DLL_HEADER void Set ();
|
|
50
|
+
///
|
|
51
|
+
void Set (INDEX i)
|
|
52
|
+
{
|
|
53
|
+
data[Addr(i)] |= Mask(i);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
DLL_HEADER void Clear ();
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
void Clear (INDEX i)
|
|
60
|
+
{
|
|
61
|
+
data[Addr(i)] &= ~Mask(i);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
bool Test (INDEX i) const
|
|
65
|
+
{
|
|
66
|
+
return (data[i / CHAR_BIT] & (char(1) << (i % CHAR_BIT) ) ) ? true : false;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
///
|
|
70
|
+
void Invert ();
|
|
71
|
+
///
|
|
72
|
+
void And (const NgBitArray & ba2);
|
|
73
|
+
///
|
|
74
|
+
void Or (const NgBitArray & ba2);
|
|
75
|
+
private:
|
|
76
|
+
///
|
|
77
|
+
inline unsigned char Mask (INDEX i) const
|
|
78
|
+
{
|
|
79
|
+
return char(1) << (i % CHAR_BIT);
|
|
80
|
+
}
|
|
81
|
+
///
|
|
82
|
+
inline INDEX Addr (INDEX i) const
|
|
83
|
+
{
|
|
84
|
+
return (i / CHAR_BIT);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
///
|
|
88
|
+
NgBitArray & operator= (NgBitArray &);
|
|
89
|
+
///
|
|
90
|
+
NgBitArray (const NgBitArray &);
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
// print bitarray
|
|
96
|
+
inline ostream & operator<< (ostream & s, const NgBitArray & a)
|
|
97
|
+
{
|
|
98
|
+
for (int i = 1; i <= a.Size(); i++)
|
|
99
|
+
{
|
|
100
|
+
s << int (a.Test(i));
|
|
101
|
+
if (i % 40 == 0) s << "\n";
|
|
102
|
+
}
|
|
103
|
+
if (a.Size() % 40 != 0) s << "\n";
|
|
104
|
+
return s;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
/*
|
|
109
|
+
inline
|
|
110
|
+
INDEX NgBitArray :: Size () const
|
|
111
|
+
{
|
|
112
|
+
return size;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
inline
|
|
116
|
+
unsigned char NgBitArray :: Mask (INDEX i) const
|
|
117
|
+
{
|
|
118
|
+
return char(1) << (i % CHAR_BIT);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
inline
|
|
122
|
+
INDEX NgBitArray :: Addr (INDEX i) const
|
|
123
|
+
{
|
|
124
|
+
return (i / CHAR_BIT);
|
|
125
|
+
}
|
|
126
|
+
inline
|
|
127
|
+
void NgBitArray :: Set (INDEX i)
|
|
128
|
+
{
|
|
129
|
+
data[Addr(i)] |= Mask(i);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
inline
|
|
133
|
+
void NgBitArray :: Clear (INDEX i)
|
|
134
|
+
{
|
|
135
|
+
data[Addr(i)] &= ~Mask(i);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
inline
|
|
140
|
+
int NgBitArray :: Test (INDEX i) const
|
|
141
|
+
{
|
|
142
|
+
return (data[i / CHAR_BIT] & (char(1) << (i % CHAR_BIT) ) ) ? 1 : 0;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
*/
|
|
146
|
+
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
#endif
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
#ifdef NG_PYTHON
|
|
2
|
+
|
|
3
|
+
#include <core/python_ngcore.hpp>
|
|
4
|
+
|
|
5
|
+
#include <pybind11/operators.h>
|
|
6
|
+
#include <pybind11/numpy.h>
|
|
7
|
+
#include <pybind11/stl.h>
|
|
8
|
+
#include <iostream>
|
|
9
|
+
#include <sstream>
|
|
10
|
+
|
|
11
|
+
// using namespace ngcore;
|
|
12
|
+
|
|
13
|
+
template <typename T>
|
|
14
|
+
py::array MoveToNumpy(std::vector<T>& vec)
|
|
15
|
+
{
|
|
16
|
+
auto newvec = new std::vector<T>();
|
|
17
|
+
std::swap(*newvec, vec);
|
|
18
|
+
auto capsule = py::capsule(newvec, [](void *v) { delete reinterpret_cast<std::vector<T>*>(v); });
|
|
19
|
+
return py::array(newvec->size(), newvec->data(), capsule);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
namespace PYBIND11_NAMESPACE {
|
|
23
|
+
template<typename T>
|
|
24
|
+
bool CheckCast( py::handle obj ) {
|
|
25
|
+
try{
|
|
26
|
+
obj.cast<T>();
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
catch (py::cast_error &e) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
template <typename T>
|
|
36
|
+
struct extract
|
|
37
|
+
{
|
|
38
|
+
py::handle obj;
|
|
39
|
+
extract( py::handle aobj ) : obj(aobj) {}
|
|
40
|
+
|
|
41
|
+
bool check() { return CheckCast<T>(obj); }
|
|
42
|
+
T operator()() { return obj.cast<T>(); }
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
struct NGDummyArgument {};
|
|
47
|
+
|
|
48
|
+
inline void NOOP_Deleter(void *) { ; }
|
|
49
|
+
|
|
50
|
+
namespace netgen
|
|
51
|
+
{
|
|
52
|
+
|
|
53
|
+
//////////////////////////////////////////////////////////////////////
|
|
54
|
+
// Lambda to function pointer conversion
|
|
55
|
+
template <typename Function>
|
|
56
|
+
struct function_traits
|
|
57
|
+
: public function_traits<decltype(&Function::operator())> {};
|
|
58
|
+
|
|
59
|
+
template <typename ClassType, typename ReturnType, typename... Args>
|
|
60
|
+
struct function_traits<ReturnType(ClassType::*)(Args...) const> {
|
|
61
|
+
typedef ReturnType (*pointer)(Args...);
|
|
62
|
+
typedef ReturnType return_type;
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
template <typename Function>
|
|
66
|
+
typename function_traits<Function>::pointer
|
|
67
|
+
FunctionPointer (const Function& lambda) {
|
|
68
|
+
return static_cast<typename function_traits<Function>::pointer>(lambda);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
} // namespace netgen
|
|
72
|
+
|
|
73
|
+
#endif
|
|
74
|
+
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
#ifndef FILE_OPTMEM
|
|
2
|
+
#define FILE_OPTMEM
|
|
3
|
+
|
|
4
|
+
/**************************************************************************/
|
|
5
|
+
/* File: optmem.hh */
|
|
6
|
+
/* Author: Joachim Schoeberl */
|
|
7
|
+
/* Date: 04. Apr. 97 */
|
|
8
|
+
/**************************************************************************/
|
|
9
|
+
|
|
10
|
+
#include <mydefs.hpp>
|
|
11
|
+
|
|
12
|
+
#include "ngarray.hpp"
|
|
13
|
+
|
|
14
|
+
namespace netgen
|
|
15
|
+
{
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
Optimized Memory allocation classes
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
class BlockAllocator
|
|
22
|
+
{
|
|
23
|
+
private:
|
|
24
|
+
///
|
|
25
|
+
unsigned size, blocks;
|
|
26
|
+
///
|
|
27
|
+
void * freelist;
|
|
28
|
+
///
|
|
29
|
+
NgArray<char*> bablocks;
|
|
30
|
+
mutex block_allocator_mutex;
|
|
31
|
+
public:
|
|
32
|
+
///
|
|
33
|
+
DLL_HEADER BlockAllocator (unsigned asize, unsigned ablocks = 100);
|
|
34
|
+
///
|
|
35
|
+
DLL_HEADER ~BlockAllocator ();
|
|
36
|
+
///
|
|
37
|
+
DLL_HEADER void * Alloc ();
|
|
38
|
+
///
|
|
39
|
+
DLL_HEADER void Free (void * p);
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
#endif
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
#ifndef FILE_PARTHREADS
|
|
2
|
+
#define FILE_PARTHREADS
|
|
3
|
+
|
|
4
|
+
/**************************************************************************/
|
|
5
|
+
/* File: parthreads.hh */
|
|
6
|
+
/* Author: Joachim Schoeberl */
|
|
7
|
+
/* Date: 22. Nov. 2000 */
|
|
8
|
+
/**************************************************************************/
|
|
9
|
+
|
|
10
|
+
/*
|
|
11
|
+
Parallel thread, Mutex,
|
|
12
|
+
*/
|
|
13
|
+
#include <functional>
|
|
14
|
+
|
|
15
|
+
namespace netgen
|
|
16
|
+
{
|
|
17
|
+
|
|
18
|
+
#ifdef NO_PARALLEL_THREADS
|
|
19
|
+
|
|
20
|
+
class NgMutex { };
|
|
21
|
+
|
|
22
|
+
class NgLock
|
|
23
|
+
{
|
|
24
|
+
public:
|
|
25
|
+
NgLock (NgMutex & mut, bool lock = 0) { ; }
|
|
26
|
+
void Lock () { ; }
|
|
27
|
+
void UnLock () { ; }
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
#else
|
|
31
|
+
|
|
32
|
+
typedef std::mutex NgMutex;
|
|
33
|
+
|
|
34
|
+
class NgLock
|
|
35
|
+
{
|
|
36
|
+
NgMutex & mut;
|
|
37
|
+
bool locked;
|
|
38
|
+
public:
|
|
39
|
+
NgLock (NgMutex & ngmut, bool lock = false)
|
|
40
|
+
: mut (ngmut)
|
|
41
|
+
{
|
|
42
|
+
if (lock)
|
|
43
|
+
mut.lock();
|
|
44
|
+
|
|
45
|
+
locked = lock;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
~NgLock()
|
|
49
|
+
{
|
|
50
|
+
if (locked)
|
|
51
|
+
mut.unlock();
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
void Lock ()
|
|
55
|
+
{
|
|
56
|
+
mut.lock();
|
|
57
|
+
locked = true;
|
|
58
|
+
}
|
|
59
|
+
void UnLock ()
|
|
60
|
+
{
|
|
61
|
+
mut.unlock();
|
|
62
|
+
locked = false;
|
|
63
|
+
}
|
|
64
|
+
/*
|
|
65
|
+
int TryLock ()
|
|
66
|
+
{
|
|
67
|
+
return mut.try_lock();
|
|
68
|
+
}
|
|
69
|
+
*/
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
#endif
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
// Simple ParallelFor function to replace OpenMP
|
|
77
|
+
template<typename TFunc>
|
|
78
|
+
void ParallelFor( int first, int next, const TFunc & f )
|
|
79
|
+
{
|
|
80
|
+
int nthreads = std::thread::hardware_concurrency();
|
|
81
|
+
std::thread * threads = new std::thread[nthreads];
|
|
82
|
+
for (int i=0; i<nthreads; i++)
|
|
83
|
+
{
|
|
84
|
+
int myfirst = first + (next-first)*i/nthreads;
|
|
85
|
+
int mynext = first + (next-first)*(i+1)/nthreads;
|
|
86
|
+
threads[i] = std::thread( [myfirst,mynext,&f] ()
|
|
87
|
+
{
|
|
88
|
+
f(myfirst, mynext);
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
for (int i=0; i<nthreads; i++)
|
|
93
|
+
threads[i].join();
|
|
94
|
+
delete [] threads;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
typedef void (*NgTaskManager)(std::function<void(int,int)>);
|
|
100
|
+
typedef void (*NgTracer)(std::string, bool); // false .. start, true .. stop
|
|
101
|
+
|
|
102
|
+
inline void DummyTaskManager (std::function<void(int,int)> func)
|
|
103
|
+
{
|
|
104
|
+
func(0,2);
|
|
105
|
+
func(1,2);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
inline void DummyTracer (std::string, bool) { ; }
|
|
109
|
+
|
|
110
|
+
template <typename FUNC>
|
|
111
|
+
inline void ParallelFor (NgTaskManager tm, size_t n, FUNC func)
|
|
112
|
+
{
|
|
113
|
+
(*tm) ([n,func] (size_t nr, size_t nums)
|
|
114
|
+
{
|
|
115
|
+
size_t begin = nr*n / nums;
|
|
116
|
+
size_t end = (nr+1)*n / nums;
|
|
117
|
+
|
|
118
|
+
for (size_t i = begin; i < end; i++)
|
|
119
|
+
func(i);
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
template <typename FUNC>
|
|
124
|
+
inline void ParallelForRange (NgTaskManager tm, size_t n, FUNC func)
|
|
125
|
+
{
|
|
126
|
+
(*tm) ([n,func] (size_t nr, size_t nums)
|
|
127
|
+
{
|
|
128
|
+
size_t begin = nr*n / nums;
|
|
129
|
+
size_t end = (nr+1)*n / nums;
|
|
130
|
+
func(begin, end);
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
#endif
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
#ifndef FILE_SETI
|
|
2
|
+
#define FILE_SETI
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
/**************************************************************************/
|
|
6
|
+
/* File: seti.hh */
|
|
7
|
+
/* Author: Joachim Schoeberl */
|
|
8
|
+
/* Date: 20. Mar. 98 */
|
|
9
|
+
/**************************************************************************/
|
|
10
|
+
|
|
11
|
+
namespace netgen
|
|
12
|
+
{
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
Set of Integers
|
|
16
|
+
*/
|
|
17
|
+
class IndexSet
|
|
18
|
+
{
|
|
19
|
+
NgArray<int> set;
|
|
20
|
+
NgBitArray flags;
|
|
21
|
+
public:
|
|
22
|
+
IndexSet (int maxind);
|
|
23
|
+
|
|
24
|
+
~IndexSet ();
|
|
25
|
+
/// increase range to maxind
|
|
26
|
+
void SetMaxIndex (int maxind);
|
|
27
|
+
int IsIn (int ind) const
|
|
28
|
+
{
|
|
29
|
+
return flags.Test (ind);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
void Add (int ind)
|
|
33
|
+
{
|
|
34
|
+
if (!flags.Test(ind))
|
|
35
|
+
{
|
|
36
|
+
set.Append (ind);
|
|
37
|
+
flags.Set (ind);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
void Del (int ind);
|
|
42
|
+
void Clear ();
|
|
43
|
+
|
|
44
|
+
const NgArray<int> & GetArray() { return set; }
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
#endif
|
|
50
|
+
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#ifndef FILE_SORT
|
|
2
|
+
#define FILE_SORT
|
|
3
|
+
|
|
4
|
+
/**************************************************************************/
|
|
5
|
+
/* File: sort.hh */
|
|
6
|
+
/* Author: Joachim Schoeberl */
|
|
7
|
+
/* Date: 07. Jan. 00 */
|
|
8
|
+
/**************************************************************************/
|
|
9
|
+
|
|
10
|
+
namespace netgen
|
|
11
|
+
{
|
|
12
|
+
|
|
13
|
+
// order(i) is sorted index of element i
|
|
14
|
+
extern void Sort (const NgArray<double> & values,
|
|
15
|
+
NgArray<int> & order);
|
|
16
|
+
|
|
17
|
+
extern void QuickSort (const NgArray<double> & values,
|
|
18
|
+
NgArray<int> & order);
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
template <class T>
|
|
24
|
+
inline void BubbleSort (int size, T * data)
|
|
25
|
+
{
|
|
26
|
+
T hv;
|
|
27
|
+
for (int i = 0; i < size; i++)
|
|
28
|
+
for (int j = i+1; j < size; j++)
|
|
29
|
+
if (data[i] > data[j])
|
|
30
|
+
{
|
|
31
|
+
hv = data[i];
|
|
32
|
+
data[i] = data[j];
|
|
33
|
+
data[j] = hv;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
template <class T>
|
|
38
|
+
inline void BubbleSort (NgArray<T> & data)
|
|
39
|
+
{
|
|
40
|
+
if(data.Size() > 0)
|
|
41
|
+
// BubbleSort (data.Size(), &data[data.Begin()]);
|
|
42
|
+
BubbleSort (data.Size(), &data[*data.Range().begin()]);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
#endif
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
#ifndef FILE_SPBITA2D
|
|
2
|
+
#define FILE_SPBITA2D
|
|
3
|
+
|
|
4
|
+
/**************************************************************************/
|
|
5
|
+
/* File: spbita2d.hh */
|
|
6
|
+
/* Author: Joachim Schoeberl */
|
|
7
|
+
/* Date: 01. Jun. 95 */
|
|
8
|
+
/**************************************************************************/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
Implementation of sparse 2 dimensional bitarray
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
namespace netgen
|
|
15
|
+
{
|
|
16
|
+
|
|
17
|
+
class SPARSE_BIT_Array_2D
|
|
18
|
+
{
|
|
19
|
+
class linestruct { public: INDEX size; INDEX maxsize; INDEX * col; };
|
|
20
|
+
|
|
21
|
+
///
|
|
22
|
+
linestruct * lines;
|
|
23
|
+
///
|
|
24
|
+
INDEX height, width;
|
|
25
|
+
|
|
26
|
+
public:
|
|
27
|
+
|
|
28
|
+
///
|
|
29
|
+
SPARSE_BIT_Array_2D (INDEX ah = 0, INDEX aw = 0);
|
|
30
|
+
///
|
|
31
|
+
~SPARSE_BIT_Array_2D ();
|
|
32
|
+
|
|
33
|
+
///
|
|
34
|
+
void SetSize (INDEX ah, INDEX aw = 0);
|
|
35
|
+
///
|
|
36
|
+
void DeleteElements ();
|
|
37
|
+
|
|
38
|
+
///
|
|
39
|
+
int Get (INDEX i, INDEX j) const;
|
|
40
|
+
|
|
41
|
+
///
|
|
42
|
+
INDEX Height () const { return height; }
|
|
43
|
+
///
|
|
44
|
+
INDEX Width () const { return width; }
|
|
45
|
+
|
|
46
|
+
///
|
|
47
|
+
void Set (INDEX i, INDEX j);
|
|
48
|
+
///
|
|
49
|
+
int Test (INDEX i, INDEX j) const;
|
|
50
|
+
|
|
51
|
+
///
|
|
52
|
+
INDEX BitsInLine (INDEX i) const { return lines[i-1].size; }
|
|
53
|
+
///
|
|
54
|
+
INDEX GetIndex (INDEX i, INDEX nr) const { return lines[i-1].col[nr-1]; }
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
#endif
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
#ifndef FILE_STACK
|
|
2
|
+
#define FILE_STACK
|
|
3
|
+
|
|
4
|
+
/*****************************************************************************/
|
|
5
|
+
/* File: stack.hh */
|
|
6
|
+
/* Author: Wolfram Muehlhuber */
|
|
7
|
+
/* Date: September 98 */
|
|
8
|
+
/*****************************************************************************/
|
|
9
|
+
|
|
10
|
+
/*
|
|
11
|
+
|
|
12
|
+
Stack class, based on a resizable array
|
|
13
|
+
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
// #include "array.hpp"
|
|
18
|
+
|
|
19
|
+
namespace netgen
|
|
20
|
+
{
|
|
21
|
+
|
|
22
|
+
///
|
|
23
|
+
template <class T> class STACK
|
|
24
|
+
{
|
|
25
|
+
public:
|
|
26
|
+
///
|
|
27
|
+
inline STACK (INDEX asize = 0, INDEX ainc = 0);
|
|
28
|
+
///
|
|
29
|
+
inline ~STACK ();
|
|
30
|
+
|
|
31
|
+
///
|
|
32
|
+
inline void Push (const T & el);
|
|
33
|
+
///
|
|
34
|
+
inline T & Pop ();
|
|
35
|
+
///
|
|
36
|
+
const inline T & Top () const;
|
|
37
|
+
///
|
|
38
|
+
inline int IsEmpty () const;
|
|
39
|
+
///
|
|
40
|
+
inline void MakeEmpty ();
|
|
41
|
+
|
|
42
|
+
private:
|
|
43
|
+
///
|
|
44
|
+
NgArray<T> elems;
|
|
45
|
+
///
|
|
46
|
+
INDEX size;
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
/*
|
|
53
|
+
|
|
54
|
+
Stack class, based on a resizable array
|
|
55
|
+
|
|
56
|
+
*/
|
|
57
|
+
|
|
58
|
+
template <class T>
|
|
59
|
+
inline STACK<T> :: STACK (INDEX asize, INDEX ainc)
|
|
60
|
+
: elems(asize, ainc)
|
|
61
|
+
{
|
|
62
|
+
size = 0;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
template <class T>
|
|
67
|
+
inline STACK<T> :: ~STACK ()
|
|
68
|
+
{
|
|
69
|
+
;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
template <class T>
|
|
74
|
+
inline void STACK<T> :: Push (const T & el)
|
|
75
|
+
{
|
|
76
|
+
if (size < elems.Size())
|
|
77
|
+
elems.Elem(++size) = el;
|
|
78
|
+
else
|
|
79
|
+
{
|
|
80
|
+
elems.Append(el);
|
|
81
|
+
size++;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
template <class T>
|
|
87
|
+
inline T & STACK<T> :: Pop ()
|
|
88
|
+
{
|
|
89
|
+
return elems.Elem(size--);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
template <class T>
|
|
94
|
+
const inline T & STACK<T> :: Top () const
|
|
95
|
+
{
|
|
96
|
+
return elems.Get(size);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
template <class T>
|
|
100
|
+
inline int STACK<T> :: IsEmpty () const
|
|
101
|
+
{
|
|
102
|
+
return (size == 0);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
template <class T>
|
|
107
|
+
inline void STACK<T> :: MakeEmpty ()
|
|
108
|
+
{
|
|
109
|
+
size = 0;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
#endif
|