diff --git a/packages/fcl-stl/Makefile b/packages/fcl-stl/Makefile index b4ffe012a2..f4642cc571 100644 --- a/packages/fcl-stl/Makefile +++ b/packages/fcl-stl/Makefile @@ -2,7 +2,7 @@ # Don't edit, this file is generated by FPCMake Version 2.0.0 [2010/11/14] # default: all -MAKEFILETARGETS=x86_64-linux +MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-solaris x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded mipsel-linux BSDs = freebsd netbsd openbsd darwin UNIXs = linux $(BSDs) solaris qnx haiku LIMIT83fs = go32v2 os2 emx watcom @@ -266,14 +266,545 @@ endif PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra) override PACKAGE_NAME=fcl-stl override PACKAGE_VERSION=2.5.1 +ifeq ($(FULL_TARGET),i386-linux) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),i386-go32v2) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),i386-win32) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),i386-os2) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),i386-freebsd) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),i386-beos) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),i386-haiku) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),i386-netbsd) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),i386-solaris) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),i386-qnx) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),i386-netware) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),i386-openbsd) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),i386-wdosx) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),i386-darwin) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),i386-emx) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),i386-watcom) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),i386-netwlibc) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),i386-wince) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),i386-embedded) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),i386-symbian) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),m68k-linux) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),m68k-freebsd) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),m68k-netbsd) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),m68k-amiga) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),m68k-atari) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),m68k-openbsd) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),m68k-palmos) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),m68k-embedded) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),powerpc-linux) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),powerpc-netbsd) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),powerpc-amiga) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),powerpc-macos) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),powerpc-darwin) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),powerpc-morphos) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),powerpc-embedded) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),sparc-linux) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),sparc-netbsd) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),sparc-solaris) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),sparc-embedded) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif ifeq ($(FULL_TARGET),x86_64-linux) override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap endif +ifeq ($(FULL_TARGET),x86_64-freebsd) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),x86_64-solaris) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),x86_64-darwin) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),x86_64-win64) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),x86_64-embedded) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),arm-linux) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),arm-palmos) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),arm-darwin) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),arm-wince) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),arm-gba) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),arm-nds) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),arm-embedded) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),arm-symbian) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),powerpc64-linux) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),powerpc64-darwin) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),powerpc64-embedded) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),avr-embedded) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),armeb-linux) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),armeb-embedded) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif +ifeq ($(FULL_TARGET),mipsel-linux) +override TARGET_UNITS+=garrayutils gdeque gmap gpriorityqueue gqueue gset gstack gutil gvector ghashset ghashmap +endif override INSTALL_FPCPACKAGE=y -ifeq ($(FULL_TARGET),x86_64-linux) +ifeq ($(FULL_TARGET),i386-linux) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),i386-go32v2) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),i386-win32) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),i386-os2) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),i386-freebsd) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),i386-beos) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),i386-haiku) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),i386-netbsd) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),i386-solaris) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),i386-qnx) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),i386-netware) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),i386-openbsd) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),i386-wdosx) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),i386-darwin) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),i386-emx) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),i386-watcom) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),i386-netwlibc) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),i386-wince) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),i386-embedded) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),i386-symbian) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),m68k-linux) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),m68k-freebsd) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),m68k-netbsd) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),m68k-amiga) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),m68k-atari) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),m68k-openbsd) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),m68k-palmos) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),m68k-embedded) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),powerpc-linux) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),powerpc-netbsd) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),powerpc-amiga) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),powerpc-macos) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),powerpc-darwin) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),powerpc-morphos) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),powerpc-embedded) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),sparc-linux) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),sparc-netbsd) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),sparc-solaris) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),sparc-embedded) override COMPILER_OPTIONS+=-S2h endif ifeq ($(FULL_TARGET),x86_64-linux) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),x86_64-freebsd) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),x86_64-solaris) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),x86_64-darwin) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),x86_64-win64) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),x86_64-embedded) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),arm-linux) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),arm-palmos) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),arm-darwin) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),arm-wince) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),arm-gba) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),arm-nds) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),arm-embedded) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),arm-symbian) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),powerpc64-linux) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),powerpc64-darwin) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),powerpc64-embedded) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),avr-embedded) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),armeb-linux) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),armeb-embedded) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),mipsel-linux) +override COMPILER_OPTIONS+=-S2h +endif +ifeq ($(FULL_TARGET),i386-linux) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),i386-go32v2) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),i386-win32) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),i386-os2) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),i386-freebsd) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),i386-beos) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),i386-haiku) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),i386-netbsd) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),i386-solaris) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),i386-qnx) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),i386-netware) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),i386-openbsd) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),i386-wdosx) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),i386-darwin) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),i386-emx) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),i386-watcom) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),i386-netwlibc) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),i386-wince) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),i386-embedded) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),i386-symbian) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),m68k-linux) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),m68k-freebsd) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),m68k-netbsd) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),m68k-amiga) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),m68k-atari) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),m68k-openbsd) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),m68k-palmos) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),m68k-embedded) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),powerpc-linux) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),powerpc-netbsd) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),powerpc-amiga) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),powerpc-macos) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),powerpc-darwin) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),powerpc-morphos) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),powerpc-embedded) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),sparc-linux) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),sparc-netbsd) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),sparc-solaris) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),sparc-embedded) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),x86_64-linux) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),x86_64-freebsd) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),x86_64-solaris) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),x86_64-darwin) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),x86_64-win64) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),x86_64-embedded) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),arm-linux) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),arm-palmos) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),arm-darwin) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),arm-wince) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),arm-gba) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),arm-nds) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),arm-embedded) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),arm-symbian) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),powerpc64-linux) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),powerpc64-darwin) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),powerpc64-embedded) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),avr-embedded) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),armeb-linux) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),armeb-embedded) +override COMPILER_SOURCEDIR+=src +endif +ifeq ($(FULL_TARGET),mipsel-linux) override COMPILER_SOURCEDIR+=src endif ifdef REQUIRE_UNITSDIR @@ -1043,9 +1574,186 @@ TAROPT=vz TAREXT=.tar.gz endif override REQUIRE_PACKAGES=rtl +ifeq ($(FULL_TARGET),i386-linux) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),i386-go32v2) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),i386-win32) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),i386-os2) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),i386-freebsd) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),i386-beos) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),i386-haiku) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),i386-netbsd) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),i386-solaris) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),i386-qnx) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),i386-netware) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),i386-openbsd) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),i386-wdosx) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),i386-darwin) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),i386-emx) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),i386-watcom) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),i386-netwlibc) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),i386-wince) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),i386-embedded) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),i386-symbian) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),m68k-linux) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),m68k-freebsd) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),m68k-netbsd) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),m68k-amiga) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),m68k-atari) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),m68k-openbsd) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),m68k-palmos) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),m68k-embedded) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),powerpc-linux) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),powerpc-netbsd) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),powerpc-amiga) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),powerpc-macos) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),powerpc-darwin) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),powerpc-morphos) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),powerpc-embedded) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),sparc-linux) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),sparc-netbsd) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),sparc-solaris) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),sparc-embedded) +REQUIRE_PACKAGES_RTL=1 +endif ifeq ($(FULL_TARGET),x86_64-linux) REQUIRE_PACKAGES_RTL=1 endif +ifeq ($(FULL_TARGET),x86_64-freebsd) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),x86_64-solaris) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),x86_64-darwin) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),x86_64-win64) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),x86_64-embedded) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),arm-linux) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),arm-palmos) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),arm-darwin) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),arm-wince) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),arm-gba) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),arm-nds) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),arm-embedded) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),arm-symbian) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),powerpc64-linux) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),powerpc64-darwin) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),powerpc64-embedded) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),avr-embedded) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),armeb-linux) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),armeb-embedded) +REQUIRE_PACKAGES_RTL=1 +endif +ifeq ($(FULL_TARGET),mipsel-linux) +REQUIRE_PACKAGES_RTL=1 +endif ifdef REQUIRE_PACKAGES_RTL PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/Makefile.fpc,$(PACKAGESDIR)))))) ifneq ($(PACKAGEDIR_RTL),) diff --git a/packages/fcl-stl/src/garrayutils.pp b/packages/fcl-stl/src/garrayutils.pp index f9773b63db..a208260d3f 100644 --- a/packages/fcl-stl/src/garrayutils.pp +++ b/packages/fcl-stl/src/garrayutils.pp @@ -216,14 +216,14 @@ end; class function TOrderingArrayUtils.NextPermutation(var Arr: TArr; size: SizeUInt):boolean; var i,f:SizeUInt; temp:TValue; begin - f := -1; + f := size; for i:=size-1 downto 1 do begin if (TCompare.c(arr[i-1], arr[i])) then begin f := i-1; break; end; end; - if f = -1 then exit(false); + if f = size then exit(false); for i:=size-1 downto 1 do begin if (TCompare.c(arr[f], arr[i])) then begin temp:=arr[f]; arr[f] := arr[i]; arr[i] := temp; diff --git a/packages/fcl-stl/src/ghashmap.pp b/packages/fcl-stl/src/ghashmap.pp index 456ff4c70b..d01c12bc76 100644 --- a/packages/fcl-stl/src/ghashmap.pp +++ b/packages/fcl-stl/src/ghashmap.pp @@ -23,13 +23,19 @@ const baseFDataSize = 8; value in range <0,n-1> base only on arguments, n will be always power of 2} type - generic THashmapIterator=class + generic THashmapIterator=class public var Fh,Fp:SizeUInt; FData:TTable; - function Next:boolean; - function GetValue:T; + function Next:boolean;inline; + function GetData:T;inline; + function GetKey:TKey;inline; + function GetValue:TValue;inline; + procedure SetValue(value:TValue);inline; + property Data:T read GetData; + property Key:TKey read GetKey; + property Value:TValue read GetValue write SetValue; end; generic THashmap=class @@ -50,7 +56,7 @@ type procedure EnlargeTable; public type - TIterator = specialize THashmapIterator; + TIterator = specialize THashmapIterator; constructor create; destructor destroy;override; procedure insert(key:TKey;value:TValue);inline; @@ -58,9 +64,9 @@ type function size:SizeUInt;inline; procedure delete(key:TKey);inline; function IsEmpty:boolean;inline; - function GetValue(key:TKey):TValue;inline; + function GetData(key:TKey):TValue;inline; - property Items[i : TKey]: TValue read GetValue write Insert; default; + property Items[i : TKey]: TValue read GetData write Insert; default; function Iterator:TIterator; end; @@ -132,7 +138,7 @@ begin exit(false); end; -function THashmap.GetValue(key:TKey):TValue;inline; +function THashmap.GetData(key:TKey):TValue;inline; var i,h,bs:longint; begin h:=Thash.hash(key,FData.size); @@ -192,9 +198,9 @@ begin Next := true; end; -function THashmapIterator.GetValue:T; +function THashmapIterator.GetData:T; begin - GetValue:=(FData[Fh])[Fp]; + GetData:=(FData[Fh])[Fp]; end; function THashmap.Iterator:TIterator; @@ -213,4 +219,19 @@ begin Iterator.FData := FData; end; +function THashmapIterator.GetKey:TKey;inline; +begin + GetKey:=((FData[Fh])[Fp]).Key; +end; + +function THashmapIterator.GetValue:TValue;inline; +begin + GetValue:=((FData[Fh])[Fp]).Value; +end; + +procedure THashmapIterator.SetValue(value:TValue);inline; +begin + ((FData[Fh]).mutable[Fp])^.Value := value; +end; + end. diff --git a/packages/fcl-stl/src/ghashset.pp b/packages/fcl-stl/src/ghashset.pp index e20a082728..68be2ebb8b 100644 --- a/packages/fcl-stl/src/ghashset.pp +++ b/packages/fcl-stl/src/ghashset.pp @@ -29,8 +29,9 @@ type Fh,Fp:SizeUInt; FData:TTable; function Next:boolean; - function GetValue:T; - end; + function GetData:T; + property Data:T read GetData; + end; generic THashSet=class private @@ -162,9 +163,9 @@ begin Next := true; end; -function THashSetIterator.GetValue:T; +function THashSetIterator.GetData:T; begin - GetValue:=(FData[Fh])[Fp]; + GetData:=(FData[Fh])[Fp]; end; function THashSet.Iterator:TIterator; diff --git a/packages/fcl-stl/src/gmap.pp b/packages/fcl-stl/src/gmap.pp index fb64db26b5..71a38e9560 100644 --- a/packages/fcl-stl/src/gmap.pp +++ b/packages/fcl-stl/src/gmap.pp @@ -23,6 +23,21 @@ type class function c(a,b :TPair):boolean; end; + generic TMapIterator=class + public + type PNode=^TNode; + var FNode:PNode; + function GetData:TPair;inline; + function GetKey:TKey;inline; + function GetValue:TValue;inline; + procedure SetValue(value:TValue);inline; + function Next:boolean;inline; + function Prev:boolean;inline; + property Data:TPair read GetData; + property Key:TKey read GetKey; + property Value:TValue read GetValue write SetValue; + end; + generic TMap=class public type @@ -32,23 +47,23 @@ type end; TMCompare = specialize TMapCompare; TMSet = specialize TSet; + TIterator = specialize TMapIterator; PTValue = ^TValue; PTPair = ^TPair; var private FSet:TMSet; public - function Find(key:TKey):TMSet.PNode;inline; - function FindLess(key:TKey):TMSet.PNode;inline; - function FindLessEqual(key:TKey):TMSet.PNode;inline; - function FindGreater(key:TKey):TMSet.PNode;inline; - function FindGreaterEqual(key:TKey):TMSet.PNode;inline; + function Find(key:TKey):TIterator;inline; + function FindLess(key:TKey):TIterator;inline; + function FindLessEqual(key:TKey):TIterator;inline; + function FindGreater(key:TKey):TIterator;inline; + function FindGreaterEqual(key:TKey):TIterator;inline; function GetValue(key:TKey):TValue;inline; procedure Insert(key:TKey; value:TValue);inline; - function Min:TMSet.PNode;inline; - function Max:TMSet.PNode;inline; - function Next(x:TMSet.PNode):TMSet.PNode;inline; - function Prev(x:TMSet.PNode):TMSet.PNode;inline; + function InsertAndGetIterator(key:TKey; value:TValue):TIterator;inline; + function Min:TIterator;inline; + function Max:TIterator;inline; procedure Delete(key:TKey);inline; function Size:SizeUInt;inline; function IsEmpty:boolean;inline; @@ -81,73 +96,110 @@ begin FSet.Delete(Pair); end; -function TMap.Find(key:TKey):TMSet.PNode;inline; -var Pair:TPair; +function TMap.Find(key:TKey):TIterator;inline; +var Pair:TPair; ret:TIterator; begin Pair.Key:=key; - Find:=FSet.Find(Pair); + ret := TIterator.create; + ret.FNode:=FSet.NFind(Pair); + if ret.FNode = nil then begin + ret.Destroy; ret := nil; + end; + Find := ret; end; -function TMap.FindLess(key:TKey):TMSet.PNode;inline; -var Pair:TPair; +function TMap.FindLess(key:TKey):TIterator;inline; +var Pair:TPair; ret:TIterator; begin Pair.Key:=key; - FindLess:=FSet.FindLess(Pair); + ret := TIterator.create; + ret.FNode:=FSet.NFindLess(Pair); + if ret.FNode = nil then begin + ret.Destroy; ret := nil; + end; + FindLess := ret; end; -function TMap.FindLessEqual(key:TKey):TMSet.PNode;inline; -var Pair:TPair; +function TMap.FindLessEqual(key:TKey):TIterator;inline; +var Pair:TPair; ret:TIterator; begin Pair.Key:=key; - FindLessEqual:=FSet.FindLessEqual(Pair); + ret := TIterator.create; + ret.FNode:=FSet.NFindLessEqual(Pair); + if ret.FNode = nil then begin + ret.Destroy; ret := nil; + end; + FindLessEqual := ret; end; -function TMap.FindGreater(key:TKey):TMSet.PNode;inline; -var Pair:TPair; +function TMap.FindGreater(key:TKey):TIterator;inline; +var Pair:TPair; ret:TIterator; begin Pair.Key:=key; - FindGreater:=FSet.FindGreater(Pair); + ret := TIterator.create; + ret.FNode:=FSet.NFindGreater(Pair); + if ret.FNode = nil then begin + ret.Destroy; ret := nil; + end; + FindGreater := ret; end; -function TMap.FindGreaterEqual(key:TKey):TMSet.PNode;inline; -var Pair:TPair; +function TMap.FindGreaterEqual(key:TKey):TIterator;inline; +var Pair:TPair; ret:TIterator; begin Pair.Key:=key; - FindGreaterEqual:=FSet.FindGreaterEqual(Pair); + ret := TIterator.create; + ret.FNode:=FSet.NFindGreaterEqual(Pair); + if ret.FNode = nil then begin + ret.Destroy; ret := nil; + end; + FindGreaterEqual := ret; end; function TMap.GetValue(key:TKey):TValue;inline; var Pair:TPair; begin Pair.Key:=key; - GetValue:=FSet.Find(Pair)^.Data.Value; + GetValue:=FSet.NFind(Pair)^.Data.Value; end; procedure TMap.Insert(key:TKey; value:TValue);inline; var Pair:TPair; begin Pair.Key:=key; - FSet.Insert(Pair)^.Data.Value := value; + FSet.NInsert(Pair)^.Data.Value := value; end; -function TMap.Min:TMSet.PNode;inline; +function TMap.InsertAndGetIterator(key:TKey; value:TValue):TIterator;inline; +var Pair:TPair; ret:TIterator; begin - Min:=FSet.Min; + ret := TIterator.create; + Pair.Key:=key; + ret.FNode := FSet.NInsert(Pair); + ret.FNode^.Data.Value := value; + InsertAndGetIterator := ret; end; -function TMap.Max:TMSet.PNode;inline; +function TMap.Min:TIterator;inline; +var ret:TIterator; begin - Max:=FSet.Max; + ret := TIterator.create; + ret.FNode:=FSet.NMin; + if ret.FNode = nil then begin + ret.Destroy; ret := nil; + end; + Min := ret; end; -function TMap.Next(x:TMSet.PNode):TMSet.PNode;inline; +function TMap.Max:TIterator;inline; +var ret:TIterator; begin - Next:=FSet.Next(x); -end; - -function TMap.Prev(x:TMSet.PNode):TMSet.PNode;inline; -begin - Prev:=FSet.Prev(x); + ret := TIterator.create; + ret.FNode:=FSet.NMax; + if ret.FNode = nil then begin + ret.Destroy; ret := nil; + end; + Max := ret; end; function TMap.Size:SizeUInt;inline; @@ -160,4 +212,66 @@ begin IsEmpty:=FSet.IsEmpty; end; +function TMapIterator.GetData:TPair;inline; +begin + GetData:=FNode^.Data; +end; + +function TMapIterator.GetKey:TKey;inline; +begin + GetKey:=FNode^.Data.Key; +end; + +function TMapIterator.GetValue:TValue;inline; +begin + GetValue:=FNode^.Data.Value; +end; + +procedure TMapIterator.SetValue(value:TValue);inline; +begin + FNode^.Data.Value := value; +end; + +function TMapIterator.Next:boolean;inline; +var temp:PNode; +begin + if(FNode=nil) then exit(false); + if(FNode^.Right<>nil) then begin + temp:=FNode^.Right; + while(temp^.Left<>nil) do temp:=temp^.Left; + end + else begin + temp:=FNode; + while(true) do begin + if(temp^.Parent=nil) then begin temp:=temp^.Parent; break; end; + if(temp^.Parent^.Left=temp) then begin temp:=temp^.Parent; break; end; + temp:=temp^.Parent; + end; + end; + if (temp = nil) then exit(false); + FNode:=temp; + Next:=true; +end; + +function TMapIterator.Prev:boolean;inline; +var temp:PNode; +begin + if(FNode=nil) then exit(false); + if(FNode^.Left<>nil) then begin + temp:=FNode^.Left; + while(temp^.Right<>nil) do temp:=temp^.Right; + end + else begin + temp:=FNode; + while(true) do begin + if(temp^.Parent=nil) then begin temp:=temp^.Parent; break; end; + if(temp^.Parent^.Right=temp) then begin temp:=temp^.Parent; break; end; + temp:=temp^.Parent; + end; + end; + if (temp = nil) then exit(false); + FNode:=temp; + Prev:=true; +end; + end. diff --git a/packages/fcl-stl/src/gset.pp b/packages/fcl-stl/src/gset.pp index 01f2937644..a4f49acdb8 100644 --- a/packages/fcl-stl/src/gset.pp +++ b/packages/fcl-stl/src/gset.pp @@ -20,6 +20,16 @@ const RED=true; const BLACK=false; type + generic TSetIterator=class + public + type PNode=^TNode; + var FNode:PNode; + function GetData:T; + function Next:boolean; + function Prev:boolean; + property Data:T read GetData; + end; + generic TSet=class public type @@ -30,6 +40,7 @@ type Parent:PNode; Color:boolean; end; + TIterator=specialize TSetIterator; var private FBase:PNode; @@ -48,24 +59,31 @@ type function MoveRedRight(nod:PNode):PNode;inline; function DeleteMin(nod:PNode):PNode; function Delete(value:T; nod:PNode):PNode; - function Min(nod:PNode):PNode;inline; - + function Min(nod:PNode):PNode;inline; public - function Find(value:T):PNode;inline; - function FindLess(value:T):PNode;inline; - function FindLessEqual(value:T):PNode;inline; - function FindGreater(value:T):PNode;inline; - function FindGreaterEqual(value:T):PNode;inline; - function Insert(value:T):PNode;inline; - function Min:PNode;inline; - function Max:PNode;inline; - function Next(x:PNode):PNode;inline; - function Prev(x:PNode):PNode;inline; + function Find(value:T):TIterator;inline; + function FindLess(value:T):TIterator;inline; + function FindLessEqual(value:T):TIterator;inline; + function FindGreater(value:T):TIterator;inline; + function FindGreaterEqual(value:T):TIterator;inline; + function InsertAndGetIterator(value:T):TIterator;inline; + procedure Insert(value:T);inline; + function Min:TIterator;inline; + function Max:TIterator;inline; procedure Delete(value:T);inline; public constructor Create; public destructor Destroy;override; function Size:SizeUInt; function IsEmpty:boolean; + + function NFind(value:T):PNode;inline; + function NFindLess(value:T):PNode;inline; + function NFindLessEqual(value:T):PNode;inline; + function NFindGreater(value:T):PNode;inline; + function NFindGreaterEqual(value:T):PNode;inline; + function NInsert(value:T):PNode;inline; + function NMin:PNode;inline; + function NMax:PNode;inline; end; implementation @@ -242,19 +260,41 @@ begin end; -function TSet.Find(value:T):PNode;inline; +function TSet.Find(value:T):TIterator;inline; +var ret:TIterator; x:PNode; +begin + x := NFind(value); + if x = nil then exit(nil); + ret := TIterator.create; + ret.FNode := x; + Find := ret; +end; + +function TSet.NFind(value:T):PNode;inline; var x:PNode; begin x:=FBase; while(x <> nil) do begin if(TCompare.c(value,x^.Data)) then x:=x^.Left else if(TCompare.c(x^.Data,value)) then x:=x^.Right - else exit(x); + else begin + exit(x); + end; end; exit(nil); end; -function TSet.FindLess(value:T):PNode;inline; +function TSet.FindLess(value:T):TIterator;inline; +var ret:TIterator; x:PNode; +begin + x := NFindLess(value); + if x = nil then exit(nil); + ret := TIterator.create; + ret.FNode := x; + FindLess := ret; +end; + +function TSet.NFindLess(value:T):PNode;inline; var x,cur:PNode; begin x:=nil; @@ -267,10 +307,20 @@ begin end else cur:=cur^.left; end; - FindLess:=x; + NFindLess := x; end; -function TSet.FindLessEqual(value:T):PNode;inline; +function TSet.FindLessEqual(value:T):TIterator;inline; +var ret:TIterator; x:PNode; +begin + x := NFindLessEqual(value); + if x = nil then exit(nil); + ret := TIterator.create; + ret.FNode := x; + FindLessEqual := ret; +end; + +function TSet.NFindLessEqual(value:T):PNode;inline; var x,cur:PNode; begin x:=nil; @@ -283,10 +333,20 @@ begin end else cur:=cur^.left; end; - FindLessEqual:=x; + NFindLessEqual := x end; -function TSet.FindGreater(value:T):PNode;inline; +function TSet.FindGreater(value:T):TIterator;inline; +var ret:TIterator; x:PNode; +begin + x := NFindGreater(value); + if x = nil then exit(nil); + ret := TIterator.create; + ret.FNode := x; + FindGreater := ret; +end; + +function TSet.NFindGreater(value:T):PNode;inline; var x,cur:PNode; begin x:=nil; @@ -299,10 +359,20 @@ begin end else cur:=cur^.right; end; - FindGreater:=x; + NFindGreater := x; end; -function TSet.FindGreaterEqual(value:T):PNode;inline; +function TSet.FindGreaterEqual(value:T):TIterator;inline; +var ret:TIterator; x:PNode; +begin + x := NFindGreaterEqual(value); + if x = nil then exit(nil); + ret := TIterator.create; + ret.FNode := x; + FindGreaterEqual := ret; +end; + +function TSet.NFindGreaterEqual(value:T):PNode;inline; var x,cur:PNode; begin x:=nil; @@ -315,15 +385,32 @@ begin end else cur:=cur^.right; end; - FindGreaterEqual:=x; + NFindGreaterEqual := x; end; -function TSet.Insert(value:T):PNode;inline; +procedure TSet.Insert(value:T);inline; var position:PNode; begin FBase:=Insert(value, FBase, position); FBase^.Color:=BLACK; - Insert:=position; +end; + +function TSet.NInsert(value:T):PNode;inline; +var position:PNode; +begin + FBase:=Insert(value, FBase, position); + FBase^.Color:=BLACK; + NInsert := position; +end; + +function TSet.InsertAndGetIterator(value:T):TIterator;inline; +var position:PNode; ret:TIterator; +begin + FBase:=Insert(value, FBase, position); + FBase^.Color:=BLACK; + ret := TIterator.create; + ret.FNode := position; + InsertAndGetIterator := ret; end; function TSet.Insert(value:T; nod:PNode; var position:PNode):PNode; @@ -367,57 +454,93 @@ begin exit(temp); end; -function TSet.Min:PNode;inline; +function TSet.NMin:PNode;inline; +var nod:PNode; begin if FBase=nil then exit(nil); - Min:=Min(FBase); + nod:=Min(FBase); + if (nod = nil) then exit(nil); + NMin := nod; end; -function TSet.Max:PNode;inline; -var temp:PNode; +function TSet.Min:TIterator;inline; +var nod:PNode; + ret:TIterator; +begin + nod:=NMin; + if (nod = nil) then exit(nil); + ret := TIterator.create; + ret.FNode := nod; + Min := ret; +end; + +function TSet.NMax:PNode;inline; +var temp:PNode; begin if FBase=nil then exit(nil); temp:=FBase; while(temp^.Right<>nil) do temp:=temp^.Right; - exit(temp); + + NMax := temp; end; -function TSet.Next(x:PNode):PNode;inline; +function TSet.Max:TIterator;inline; +var temp:PNode; ret:TIterator; +begin + if FBase=nil then exit(nil); + temp:=FBase; + while(temp^.Right<>nil) do temp:=temp^.Right; + + ret := TIterator.create; + ret.FNode := temp; + Max := ret; +end; + +function TSetIterator.GetData:T; +begin + GetData:= FNode^.Data; +end; + +function TSetIterator.Next:boolean; var temp:PNode; begin - if(x=nil) then exit(nil); - if(x^.Right<>nil) then begin - temp:=x^.Right; + if(FNode=nil) then exit(false); + if(FNode^.Right<>nil) then begin + temp:=FNode^.Right; while(temp^.Left<>nil) do temp:=temp^.Left; end else begin - temp:=x; + temp:=FNode; while(true) do begin if(temp^.Parent=nil) then begin temp:=temp^.Parent; break; end; if(temp^.Parent^.Left=temp) then begin temp:=temp^.Parent; break; end; temp:=temp^.Parent; end; end; - exit(temp); + if (temp = nil) then exit(false); + FNode:=temp; + Next:=true; end; -function TSet.Prev(x:PNode):PNode;inline; +function TSetIterator.Prev:boolean; var temp:PNode; begin - if(x=nil) then exit(nil); - if(x^.Left<>nil) then begin - temp:=x^.Left; + if(FNode=nil) then exit(false); + if(FNode^.Left<>nil) then begin + temp:=FNode^.Left; while(temp^.Right<>nil) do temp:=temp^.Right; end else begin - temp:=x; + temp:=FNode; while(true) do begin if(temp^.Parent=nil) then begin temp:=temp^.Parent; break; end; if(temp^.Parent^.Right=temp) then begin temp:=temp^.Parent; break; end; temp:=temp^.Parent; end; end; - exit(temp); + if (temp = nil) then exit(false); + FNode:=temp; + Prev:=true; end; end. diff --git a/packages/fcl-stl/tests/ghashmaptest.pp b/packages/fcl-stl/tests/ghashmaptest.pp index 865be7833b..6a564e0db4 100644 --- a/packages/fcl-stl/tests/ghashmaptest.pp +++ b/packages/fcl-stl/tests/ghashmaptest.pp @@ -81,8 +81,12 @@ begin end; it:=data.Iterator; repeat - inc(x[it.GetValue.key]); - AssertEquals('bad value', it.GetValue.key*47, it.GetValue.value); + inc(x[it.Data.key]); + AssertEquals('bad value', it.Data.key*47, it.Data.value); + AssertEquals('bad value2', it.Key*47, it.Value); + it.Value := it.Key+23; + it.Value := it.Value*2; + AssertEquals('bad value3', it.Key*2+46, it.Value); until not it.next; for i:=0 to 1000 do begin AssertEquals('som not 1', 1, x[i]); diff --git a/packages/fcl-stl/tests/ghashsettest.pp b/packages/fcl-stl/tests/ghashsettest.pp index 807951ddf5..560bedbbc2 100644 --- a/packages/fcl-stl/tests/ghashsettest.pp +++ b/packages/fcl-stl/tests/ghashsettest.pp @@ -80,7 +80,7 @@ begin end; it:=data.Iterator; repeat - inc(x[it.GetValue]); + inc(x[it.Data]); until not it.next; for i:=0 to 1000 do begin AssertEquals('som not 1', 1, x[i]); diff --git a/packages/fcl-stl/tests/gmaptest.pp b/packages/fcl-stl/tests/gmaptest.pp index 6d5325b26f..ac903fc937 100644 --- a/packages/fcl-stl/tests/gmaptest.pp +++ b/packages/fcl-stl/tests/gmaptest.pp @@ -21,23 +21,23 @@ type TGMapTest = class(TTestCase) implementation procedure TGMapTest.MapTest; -var it:maplli.TMSet.pnode; +var it:maplli.TIterator; begin data[3]:=3; data[5]:=5; data[7]:=7; - AssertEquals('Wrong min key', 3, data.min()^.data.key); - AssertEquals('Wrong max key', 7, data.max()^.data.key); - AssertEquals('Wrong min val', 3, data.min()^.data.value); - AssertEquals('Wrong max val', 7, data.max()^.data.value); + AssertEquals('Wrong min key', 3, data.min().GetData.key); + AssertEquals('Wrong max key', 7, data.max().GetData.key); + AssertEquals('Wrong min val', 3, data.min().GetData.value); + AssertEquals('Wrong max val', 7, data.max().GetData.value); AssertEquals('Wrong val', 5, data[5]); data.delete(3); - AssertEquals('Wrong min key', 5, data.min()^.data.key); - AssertEquals('Wrong max key', 7, data.max()^.data.key); - AssertEquals('Wrong min val', 5, data.min()^.data.value); - AssertEquals('Wrong max val', 7, data.max()^.data.value); + AssertEquals('Wrong min key', 5, data.min().GetData.key); + AssertEquals('Wrong max key', 7, data.max().GetData.key); + AssertEquals('Wrong min val', 5, data.min().GetData.value); + AssertEquals('Wrong max val', 7, data.max().GetData.value); data[3]:=3; @@ -50,28 +50,27 @@ begin data[17]:=42; it:=data.min; - AssertEquals('Wrong min', 3, it^.Data.key); - it:=data.next(it); - AssertEquals('Wrong next', 5, it^.Data.key); - it:=data.next(it); - AssertEquals('Wrong next', 7, it^.Data.key); - it:=data.next(it); - AssertEquals('Wrong next', 17, it^.Data.key); - it:=data.next(it); - if(it<>nil) then - AssertEquals('Last not nil', 0, 1); + AssertEquals('Wrong min', 3, it.Key); + AssertEquals('Next not true', true, it.Next); + AssertEquals('Wrong next', 5, it.Key); + AssertEquals('Wrong next value', 5, it.Value); + it.Value := it.Value + 17; + AssertEquals('Wrong value update', 22, it.Value); + AssertEquals('Next not true', true, it.Next); + AssertEquals('Wrong next', 7, it.GetData.key); + AssertEquals('Next not true', true, it.Next); + AssertEquals('Wrong next', 17, it.GetData.key); + AssertEquals('Next not false', false, it.Next); it:=data.max; - AssertEquals('Wrong max', 17, it^.Data.key); - it:=data.prev(it); - AssertEquals('Wrong prev', 7, it^.Data.key); - it:=data.prev(it); - AssertEquals('Wrong prev', 5, it^.Data.key); - it:=data.prev(it); - AssertEquals('Wrong prev', 3, it^.Data.key); - it:=data.prev(it); - if(it<>nil) then - AssertEquals('First not nil', 0, 1); + AssertEquals('Wrong max', 17, it.GetData.key); + AssertEquals('Prev not true', true, it.Prev); + AssertEquals('Wrong prev', 7, it.GetData.key); + AssertEquals('Prev not true', true, it.Prev); + AssertEquals('Wrong prev', 5, it.GetData.key); + AssertEquals('Prev not true', true, it.Prev); + AssertEquals('Wrong prev', 3, it.GetData.key); + AssertEquals('Prev not false', false, it.Prev); end; procedure TGMapTest.Setup; diff --git a/packages/fcl-stl/tests/gsettest.pp b/packages/fcl-stl/tests/gsettest.pp index e828236e90..c01c2ea068 100644 --- a/packages/fcl-stl/tests/gsettest.pp +++ b/packages/fcl-stl/tests/gsettest.pp @@ -12,6 +12,7 @@ type lesslli=specialize TLess; type TGSetTest = class(TTestCase) Published procedure SetTest; + procedure IteratorTest; public procedure Setup;override; private @@ -20,55 +21,73 @@ type TGSetTest = class(TTestCase) implementation +procedure TGSetTest.IteratorTest; +var it:setlli.TIterator; +begin + it:=data.min; + if (it <> nil) then + AssertEquals('not null min', 0, 1); + data.insert(3); + data.insert(5); + data.insert(7); + it:=data.min; + AssertEquals('bad value', 3, it.Data); + AssertEquals('next not true', true, it.Next); + AssertEquals('bad value', 5, it.Data); + AssertEquals('next not true', true, it.Next); + AssertEquals('bad value', 7, it.Data); + AssertEquals('next not false', false, it.Next); +end; + procedure TGSetTest.SetTest; -var it:setlli.pnode; +var it:setlli.TIterator; begin data.insert(3); data.insert(5); data.insert(7); - AssertEquals('Wrong min', 3, data.min()^.data); - AssertEquals('Wrong max', 7, data.max()^.data); + AssertEquals('Wrong min', 3, data.min().Data); + AssertEquals('Wrong max', 7, data.max().Data); data.delete(3); AssertEquals('Wrong size', 2, data.size); - AssertEquals('Wrong min', 5, data.min()^.data); + AssertEquals('Wrong min', 5, data.min().Data); data.insert(3); data.insert(3); data.insert(3); AssertEquals('Wrong size', 3, data.size); - AssertEquals('Wrong min', 3, data.min()^.data); + AssertEquals('Wrong min', 3, data.min().Data); if(data.find(4)<>nil) then Fail('Found key which not there'); if(data.find(5)=nil) then Fail('Not found key which was there'); - if(data.FindLess(8)^.data<>7) then + if(data.FindLess(8).Data<>7) then Fail('Wrong less than 8'); - if(data.FindLess(7)^.data<>5) then + if(data.FindLess(7).Data<>5) then Fail('Wrong less than 7'); if(data.FindLess(3)<>nil) then Fail('Wrong less than 3'); - if(data.FindLessEqual(8)^.data<>7) then + if(data.FindLessEqual(8).Data<>7) then Fail('Wrong less equal than 8'); - if(data.FindLessEqual(7)^.data<>7) then + if(data.FindLessEqual(7).Data<>7) then Fail('Wrong less equal than 7'); - if(data.FindLessEqual(6)^.data<>5) then + if(data.FindLessEqual(6).Data<>5) then Fail('Wrong less equal than 6'); if(data.FindLessEqual(2)<>nil) then Fail('Wrong less equal than 2'); - if(data.FindGreater(2)^.data<>3) then + if(data.FindGreater(2).Data<>3) then Fail('Wrong greater than 2'); - if(data.Findgreater(3)^.data<>5) then + if(data.Findgreater(3).Data<>5) then Fail('Wrong greater than 3'); if(data.Findgreater(7)<>nil) then Fail('Wrong greater than 7'); - if(data.FindGreaterEqual(2)^.data<>3) then + if(data.FindGreaterEqual(2).Data<>3) then Fail('Wrong greater equal than 2'); - if(data.FindGreaterEqual(3)^.data<>3) then + if(data.FindGreaterEqual(3).Data<>3) then Fail('Wrong greater equal than 3'); - if(data.FindGreaterEqual(4)^.data<>5) then + if(data.FindGreaterEqual(4).Data<>5) then Fail('Wrong greater equal than 4'); if(data.FindGreaterEqual(8)<>nil) then Fail('Wrong greater equal than 8'); @@ -76,28 +95,24 @@ begin data.insert(17); it:=data.min; - AssertEquals('Wrong min', 3, it^.data); - it:=data.next(it); - AssertEquals('Wrong next', 5, it^.data); - it:=data.next(it); - AssertEquals('Wrong next', 7, it^.data); - it:=data.next(it); - AssertEquals('Wrong next', 17, it^.data); - it:=data.next(it); - if(it<>nil) then - AssertEquals('Last not nil', 0, 1); + AssertEquals('Wrong min', 3, it.Data); + AssertEquals('Next not true', true, it.next); + AssertEquals('Wrong next', 5, it.Data); + AssertEquals('Next not true', true, it.next); + AssertEquals('Wrong next', 7, it.Data); + AssertEquals('Next not true', true, it.next); + AssertEquals('Wrong next', 17, it.Data); + AssertEquals('Last next not fail', false, it.next); it:=data.max; - AssertEquals('Wrong max', 17, it^.data); - it:=data.prev(it); - AssertEquals('Wrong prev', 7, it^.data); - it:=data.prev(it); - AssertEquals('Wrong prev', 5, it^.data); - it:=data.prev(it); - AssertEquals('Wrong prev', 3, it^.data); - it:=data.prev(it); - if(it<>nil) then - AssertEquals('First not nil', 0, 1); + AssertEquals('Wrong max', 17, it.Data); + AssertEquals('Prev not true', true, it.prev); + AssertEquals('Wrong prev', 7, it.Data); + AssertEquals('Prev not true', true, it.prev); + AssertEquals('Wrong prev', 5, it.Data); + AssertEquals('Prev not true', true, it.prev); + AssertEquals('Wrong prev', 3, it.Data); + AssertEquals('First prev not fail', false, it.prev); end; procedure TGSetTest.Setup;