mirror of
https://github.com/FirebirdSQL/firebird.git
synced 2025-01-22 18:43:02 +01:00
Merge pull request #7235 from FirebirdSQL/work/boost-test
Unit tests (start) with Boost.Test and build improvements
This commit is contained in:
commit
1f432c8f07
111
.github/workflows/main.yml
vendored
111
.github/workflows/main.yml
vendored
@ -58,6 +58,8 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
CC=clang CXX=clang++ ./autogen.sh --enable-binreloc --prefix=/opt/firebird
|
CC=clang CXX=clang++ ./autogen.sh --enable-binreloc --prefix=/opt/firebird
|
||||||
make -j4
|
make -j4
|
||||||
|
make tests -j4
|
||||||
|
make run_tests
|
||||||
make dist
|
make dist
|
||||||
tar xzvf gen/Firebird-[0-9]*.tar.gz
|
tar xzvf gen/Firebird-[0-9]*.tar.gz
|
||||||
(cd Firebird-[0-9]*; sudo ./install.sh -silent)
|
(cd Firebird-[0-9]*; sudo ./install.sh -silent)
|
||||||
@ -82,38 +84,91 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
./autogen.sh --enable-binreloc-threads --with-builtin-tommath --with-builtin-tomcrypt --prefix=/opt/firebird
|
./autogen.sh --enable-binreloc-threads --with-builtin-tommath --with-builtin-tomcrypt --prefix=/opt/firebird
|
||||||
make -j4
|
make -j4
|
||||||
|
make tests -j4
|
||||||
|
make run_tests
|
||||||
make dist
|
make dist
|
||||||
tar xzvf gen/Firebird-[0-9]*.tar.gz
|
tar xzvf gen/Firebird-[0-9]*.tar.gz
|
||||||
|
|
||||||
- name: Prepare (MacOS)
|
- name: Prepare - Install tools (MacOS)
|
||||||
if: matrix.os == 'macOS-latest'
|
if: matrix.os == 'macOS-latest'
|
||||||
run: |
|
run: |
|
||||||
brew install automake libtool
|
brew install automake libtool ninja
|
||||||
export LIBTOOLIZE=glibtoolize
|
|
||||||
export LIBTOOL=glibtool
|
|
||||||
|
|
||||||
mkdir extern/icu-macos
|
- name: Cache - libc++ install (MacOS)
|
||||||
pushd extern/icu-macos
|
id: cache-libcxx-install-macos
|
||||||
|
if: matrix.os == 'macOS-latest'
|
||||||
|
uses: actions/cache@v3
|
||||||
|
with:
|
||||||
|
key: ${{ runner.os }}-libcxx-install-13.0.1
|
||||||
|
path: |
|
||||||
|
extern/libcxx-macos-install
|
||||||
|
|
||||||
|
- name: Download libc++ sources (MacOS)
|
||||||
|
if: matrix.os == 'macOS-latest' && steps.cache-libcxx-install-macos.outputs.cache-hit != 'true'
|
||||||
|
run: |
|
||||||
|
mkdir extern/libcxx-macos
|
||||||
|
pushd extern/libcxx-macos
|
||||||
|
curl -OL https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.1/llvm-project-13.0.1.src.tar.xz
|
||||||
|
tar xJf llvm-project-13.0.1.src.tar.xz
|
||||||
|
popd
|
||||||
|
|
||||||
|
- name: Build libc++ (MacOS)
|
||||||
|
if: matrix.os == 'macOS-latest' && steps.cache-libcxx-install-macos.outputs.cache-hit != 'true'
|
||||||
|
run: |
|
||||||
|
LIBCXX_BUILD_PATH=`pwd`/extern/libcxx-macos-build
|
||||||
|
LIBCXX_INSTALL_PATH=`pwd`/extern/libcxx-macos-install
|
||||||
|
mkdir $LIBCXX_BUILD_PATH
|
||||||
|
pushd extern/libcxx-macos/llvm-project-13.0.1.src
|
||||||
|
export MACOSX_DEPLOYMENT_TARGET=10.9
|
||||||
|
cmake -G Ninja -S llvm -B $LIBCXX_BUILD_PATH \
|
||||||
|
-DLLVM_ENABLE_PROJECTS="libcxx;libcxxabi" \
|
||||||
|
-DCMAKE_INSTALL_PREFIX=$LIBCXX_INSTALL_PATH \
|
||||||
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
|
-DLIBCXX_ENABLE_SHARED=false \
|
||||||
|
-DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=true
|
||||||
|
ninja -C $LIBCXX_BUILD_PATH cxx cxxabi
|
||||||
|
ninja -C $LIBCXX_BUILD_PATH install-cxx install-cxxabi
|
||||||
|
popd
|
||||||
|
|
||||||
|
- name: Cache - libicu install (MacOS)
|
||||||
|
id: cache-libicu-install-macos
|
||||||
|
if: matrix.os == 'macOS-latest'
|
||||||
|
uses: actions/cache@v3
|
||||||
|
with:
|
||||||
|
key: ${{ runner.os }}-libicu-install-63.2
|
||||||
|
path: |
|
||||||
|
extern/libicu-macos-install
|
||||||
|
|
||||||
|
- name: Download and patch libicu sources (MacOS)
|
||||||
|
if: matrix.os == 'macOS-latest' && steps.cache-libicu-install-macos.outputs.cache-hit != 'true'
|
||||||
|
run: |
|
||||||
|
mkdir extern/libicu-macos
|
||||||
|
pushd extern/libicu-macos
|
||||||
curl -OL https://github.com/unicode-org/icu/releases/download/release-63-2/icu4c-63_2-src.tgz
|
curl -OL https://github.com/unicode-org/icu/releases/download/release-63-2/icu4c-63_2-src.tgz
|
||||||
curl -OL https://github.com/unicode-org/icu/commit/24aeb9a5a5874f4ce5db912e30670ac3ae236971.patch
|
curl -OL https://github.com/unicode-org/icu/commit/24aeb9a5a5874f4ce5db912e30670ac3ae236971.patch
|
||||||
tar xzf icu4c-63_2-src.tgz
|
tar xzf icu4c-63_2-src.tgz
|
||||||
ICU_INSTALL_PATH=`pwd`/install
|
|
||||||
cd icu/source
|
cd icu/source
|
||||||
patch -p3 < ../../24aeb9a5a5874f4ce5db912e30670ac3ae236971.patch
|
patch -p3 < ../../24aeb9a5a5874f4ce5db912e30670ac3ae236971.patch
|
||||||
./runConfigureICU MacOSX --prefix=$ICU_INSTALL_PATH
|
popd
|
||||||
|
|
||||||
|
- name: Build libicu (MacOS)
|
||||||
|
if: matrix.os == 'macOS-latest' && steps.cache-libicu-install-macos.outputs.cache-hit != 'true'
|
||||||
|
run: |
|
||||||
|
export LIBTOOLIZE=glibtoolize
|
||||||
|
export LIBTOOL=glibtool
|
||||||
|
|
||||||
|
LIBICU_INSTALL_PATH=`pwd`/extern/libicu-macos-install
|
||||||
|
pushd extern/libicu-macos/icu/source
|
||||||
|
./runConfigureICU MacOSX --prefix=$LIBICU_INSTALL_PATH
|
||||||
make -j4
|
make -j4
|
||||||
make install
|
make install
|
||||||
install_name_tool -id @rpath/lib/libicuuc.dylib $ICU_INSTALL_PATH/lib/libicuuc.dylib
|
install_name_tool -id @rpath/lib/libicuuc.dylib $LIBICU_INSTALL_PATH/lib/libicuuc.dylib
|
||||||
install_name_tool -id @rpath/lib/libicui18n.dylib $ICU_INSTALL_PATH/lib/libicui18n.dylib
|
install_name_tool -id @rpath/lib/libicui18n.dylib $LIBICU_INSTALL_PATH/lib/libicui18n.dylib
|
||||||
install_name_tool -id @rpath/lib/libicudata.dylib $ICU_INSTALL_PATH/lib/libicudata.dylib
|
install_name_tool -id @rpath/lib/libicudata.dylib $LIBICU_INSTALL_PATH/lib/libicudata.dylib
|
||||||
install_name_tool -change libicudata.63.dylib @loader_path/libicudata.63.dylib $ICU_INSTALL_PATH/lib/libicuuc.63.dylib
|
install_name_tool -change libicudata.63.dylib @loader_path/libicudata.63.dylib $LIBICU_INSTALL_PATH/lib/libicuuc.63.dylib
|
||||||
install_name_tool -change libicudata.63.dylib @loader_path/libicudata.63.dylib $ICU_INSTALL_PATH/lib/libicui18n.63.dylib
|
install_name_tool -change libicudata.63.dylib @loader_path/libicudata.63.dylib $LIBICU_INSTALL_PATH/lib/libicui18n.63.dylib
|
||||||
install_name_tool -change libicuuc.63.dylib @loader_path/libicuuc.63.dylib $ICU_INSTALL_PATH/lib/libicui18n.63.dylib
|
install_name_tool -change libicuuc.63.dylib @loader_path/libicuuc.63.dylib $LIBICU_INSTALL_PATH/lib/libicui18n.63.dylib
|
||||||
popd
|
popd
|
||||||
mkdir -p gen/Release/firebird/lib
|
|
||||||
mkdir -p gen/Debug/firebird/lib
|
|
||||||
cp -R $ICU_INSTALL_PATH/lib/libicu{data,i18n,uc}.*dylib gen/Release/firebird/lib/
|
|
||||||
cp -R $ICU_INSTALL_PATH/lib/libicu{data,i18n,uc}.*dylib gen/Debug/firebird/lib/
|
|
||||||
|
|
||||||
- name: Build (MacOS)
|
- name: Build (MacOS)
|
||||||
if: matrix.os == 'macOS-latest'
|
if: matrix.os == 'macOS-latest'
|
||||||
@ -121,15 +176,22 @@ jobs:
|
|||||||
export LIBTOOLIZE=glibtoolize
|
export LIBTOOLIZE=glibtoolize
|
||||||
export LIBTOOL=glibtool
|
export LIBTOOL=glibtool
|
||||||
|
|
||||||
ICU_INSTALL_PATH=`pwd`/extern/icu-macos/install
|
LIBCXX_INSTALL_PATH=`pwd`/extern/libcxx-macos-install
|
||||||
|
LIBICU_INSTALL_PATH=`pwd`/extern/libicu-macos-install
|
||||||
|
|
||||||
export C_INCLUDE_PATH="$ICU_INSTALL_PATH/include:$C_INCLUDE_PATH"
|
mkdir -p gen/Release/firebird/lib
|
||||||
export CPLUS_INCLUDE_PATH="$ICU_INSTALL_PATH/include:$CPLUS_INCLUDE_PATH"
|
cp -R $LIBICU_INSTALL_PATH/lib/libicu{data,i18n,uc}.*dylib gen/Release/firebird/lib/
|
||||||
|
|
||||||
LIBRARY_PATH="$ICU_INSTALL_PATH/lib:$LIBRARY_PATH" ./autogen.sh --with-builtin-tommath --with-builtin-tomcrypt
|
export C_INCLUDE_PATH="$LIBICU_INSTALL_PATH/include:`xcrun --show-sdk-path`/usr/include"
|
||||||
|
export CPLUS_INCLUDE_PATH="$LIBCXX_INSTALL_PATH/include/c++/v1:$LIBICU_INSTALL_PATH/include:`xcrun --show-sdk-path`/usr/include"
|
||||||
|
export LIBRARY_PATH="$LIBCXX_INSTALL_PATH/lib:$LIBICU_INSTALL_PATH/lib:$LIBRARY_PATH"
|
||||||
|
|
||||||
|
./autogen.sh --with-builtin-tommath --with-builtin-tomcrypt
|
||||||
make -j4
|
make -j4
|
||||||
|
make tests -j4
|
||||||
|
make run_tests
|
||||||
|
|
||||||
(cd gen; make -B -f make.platform.postfix ICU_LOC="$ICU_INSTALL_PATH/lib/")
|
(cd gen; make -B -f make.platform.postfix ICU_LOC="$LIBICU_INSTALL_PATH/lib/")
|
||||||
(cd gen; make -B -f Makefile.install)
|
(cd gen; make -B -f Makefile.install)
|
||||||
|
|
||||||
# Rename directory to make sure the build is relocatable.
|
# Rename directory to make sure the build is relocatable.
|
||||||
@ -166,7 +228,8 @@ jobs:
|
|||||||
if "%PLATFORM%" == "x86" set FB_OUTPUT_SUFFIX=win32
|
if "%PLATFORM%" == "x86" set FB_OUTPUT_SUFFIX=win32
|
||||||
call "%VS_SCRIPT%" -arch=%FB_VS_ARCH%
|
call "%VS_SCRIPT%" -arch=%FB_VS_ARCH%
|
||||||
cd builds\win32
|
cd builds\win32
|
||||||
run_all.bat JUSTBUILD
|
call run_all.bat JUSTBUILD
|
||||||
|
call run_tests.bat
|
||||||
|
|
||||||
- name: Build (Windows, Docker)
|
- name: Build (Windows, Docker)
|
||||||
if: startsWith(matrix.os, 'windows-') && matrix.docker
|
if: startsWith(matrix.os, 'windows-') && matrix.docker
|
||||||
|
@ -5,4 +5,6 @@ sed -i 's/AC_CHECK_LIB(atomic, main)/AC_CHECK_LIB(:libatomic.a, main)/g' configu
|
|||||||
|
|
||||||
./autogen.sh --build=$BUILD_ARCH --prefix=/opt/firebird --enable-binreloc --with-builtin-tomcrypt --with-termlib=:libncurses.a
|
./autogen.sh --build=$BUILD_ARCH --prefix=/opt/firebird --enable-binreloc --with-builtin-tomcrypt --with-termlib=:libncurses.a
|
||||||
make -j${CPUCOUNT}
|
make -j${CPUCOUNT}
|
||||||
|
make tests -j${CPUCOUNT}
|
||||||
|
make run_tests
|
||||||
make dist
|
make dist
|
||||||
|
@ -11,4 +11,6 @@ cd /d C:\firebird-build\builds\win32
|
|||||||
REM call run_all.bat
|
REM call run_all.bat
|
||||||
call run_all.bat JUSTBUILD
|
call run_all.bat JUSTBUILD
|
||||||
|
|
||||||
|
call run_tests.bat
|
||||||
|
|
||||||
xcopy /h /e /i /q C:\firebird-build\output_%FB_OUTPUT_SUFFIX%\* C:\firebird-out
|
xcopy /h /e /i /q C:\firebird-build\output_%FB_OUTPUT_SUFFIX%\* C:\firebird-out
|
||||||
|
@ -11,4 +11,6 @@ cd /d C:\firebird-build\builds\win32
|
|||||||
REM call run_all.bat
|
REM call run_all.bat
|
||||||
call run_all.bat JUSTBUILD
|
call run_all.bat JUSTBUILD
|
||||||
|
|
||||||
|
call run_tests.bat
|
||||||
|
|
||||||
xcopy /h /e /i /q C:\firebird-build\output_%FB_OUTPUT_SUFFIX%\* C:\firebird-out
|
xcopy /h /e /i /q C:\firebird-build\output_%FB_OUTPUT_SUFFIX%\* C:\firebird-out
|
||||||
|
@ -361,6 +361,8 @@ $(COMMON_LIB): $(Common_Objects)
|
|||||||
-$(RM) $@
|
-$(RM) $@
|
||||||
$(STATICLIB_LINK) $@ $^
|
$(STATICLIB_LINK) $@ $^
|
||||||
|
|
||||||
|
$(COMMON_TEST): $(Common_Test_Objects) $(COMMON_LIB)
|
||||||
|
$(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ -L$(LIB) $(LINK_LIBS)
|
||||||
|
|
||||||
#___________________________________________________________________________
|
#___________________________________________________________________________
|
||||||
# gpre_boot
|
# gpre_boot
|
||||||
@ -369,7 +371,7 @@ $(COMMON_LIB): $(Common_Objects)
|
|||||||
boot: $(GPRE_BOOT)
|
boot: $(GPRE_BOOT)
|
||||||
|
|
||||||
$(GPRE_BOOT): $(GPRE_Boot_Objects) $(COMMON_LIB)
|
$(GPRE_BOOT): $(GPRE_Boot_Objects) $(COMMON_LIB)
|
||||||
$(STATICEXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ -L$(LIB) $(LINK_LIBS)
|
$(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ -L$(LIB) $(LINK_LIBS)
|
||||||
-$(RM) $(GPRE_CURRENT)
|
-$(RM) $(GPRE_CURRENT)
|
||||||
(cd $(@D); $(LN) $(@F) $(notdir $(GPRE_CURRENT)))
|
(cd $(@D); $(LN) $(@F) $(notdir $(GPRE_CURRENT)))
|
||||||
|
|
||||||
@ -404,6 +406,9 @@ engine: $(ENGINE_SONAME)
|
|||||||
$(ENGINE_SONAME): $(Engine_Objects) $(SVC_Objects) $(COMMON_LIB)
|
$(ENGINE_SONAME): $(Engine_Objects) $(SVC_Objects) $(COMMON_LIB)
|
||||||
$(LINK_ENGINE) -o $@ $^ $(LINK_ENGINE_LIBS) $(call LIB_LINK_DARWIN_INSTALL_NAME,plugins/$(EngineSoName))
|
$(LINK_ENGINE) -o $@ $^ $(LINK_ENGINE_LIBS) $(call LIB_LINK_DARWIN_INSTALL_NAME,plugins/$(EngineSoName))
|
||||||
|
|
||||||
|
$(ENGINE_TEST): $(Engine_Objects) $(Engine_Test_Objects) $(SVC_Objects) $(COMMON_LIB)
|
||||||
|
$(EXE_LINK) -o $@ $^ $(EXE_LINK_OPTIONS) $(LINK_ENGINE_LIBS)
|
||||||
|
|
||||||
|
|
||||||
#___________________________________________________________________________
|
#___________________________________________________________________________
|
||||||
# intl support
|
# intl support
|
||||||
@ -711,6 +716,25 @@ install install-embedded silent_install package packages dist:
|
|||||||
$(MAKE) -f Makefile.install $@
|
$(MAKE) -f Makefile.install $@
|
||||||
|
|
||||||
|
|
||||||
|
#___________________________________________________________________________
|
||||||
|
# tests
|
||||||
|
#
|
||||||
|
|
||||||
|
.PHONY: tests tests_process run_tests run_tests_process
|
||||||
|
|
||||||
|
tests:
|
||||||
|
$(MAKE) TARGET=$(DefaultTarget) tests_process
|
||||||
|
|
||||||
|
tests_process: $(COMMON_TEST) $(ENGINE_TEST)
|
||||||
|
|
||||||
|
run_tests:
|
||||||
|
$(MAKE) TARGET=$(DefaultTarget) run_tests_process
|
||||||
|
|
||||||
|
run_tests_process: tests_process
|
||||||
|
$(COMMON_TEST) --log_level=all
|
||||||
|
$(ENGINE_TEST) --log_level=all
|
||||||
|
|
||||||
|
|
||||||
#___________________________________________________________________________
|
#___________________________________________________________________________
|
||||||
# various cleaning
|
# various cleaning
|
||||||
#
|
#
|
||||||
|
@ -53,6 +53,7 @@ RE2_BUILD_FLG=@RE2_BUILD@
|
|||||||
SYSTEM_BOOST_FLG=@SYSTEM_BOOST@
|
SYSTEM_BOOST_FLG=@SYSTEM_BOOST@
|
||||||
|
|
||||||
FB_BUILD=$(GEN_ROOT)/$(TARGET)/firebird
|
FB_BUILD=$(GEN_ROOT)/$(TARGET)/firebird
|
||||||
|
|
||||||
ifeq ($(IsCross), Y)
|
ifeq ($(IsCross), Y)
|
||||||
FIREBIRD=$(GEN_ROOT)/Native/firebird
|
FIREBIRD=$(GEN_ROOT)/Native/firebird
|
||||||
else
|
else
|
||||||
@ -71,6 +72,7 @@ LIB=$(FB_BUILD)/lib
|
|||||||
BIN=$(FB_BUILD)/bin
|
BIN=$(FB_BUILD)/bin
|
||||||
PLUGINS=$(FB_BUILD)/plugins
|
PLUGINS=$(FB_BUILD)/plugins
|
||||||
RBIN=$(FIREBIRD)/bin
|
RBIN=$(FIREBIRD)/bin
|
||||||
|
FB_TESTS_DIR=$(FB_BUILD)/tests
|
||||||
|
|
||||||
# This picks up the current directory and maps it to the equivalent module
|
# This picks up the current directory and maps it to the equivalent module
|
||||||
# in the src and gen area.
|
# in the src and gen area.
|
||||||
@ -198,7 +200,6 @@ EXE_LINK = $(CXX) $(GLOB_OPTIONS) $(CXXFLAGS) -static-libstdc++
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
STATICLIB_LINK = $(AR) crus
|
STATICLIB_LINK = $(AR) crus
|
||||||
STATICEXE_LINK = $(CXX) $(GLOB_OPTIONS) $(CXXFLAGS) -static-libstdc++
|
|
||||||
|
|
||||||
LINK_LIBS = @LIBS@ $(DECLIB) $(RE2LIB) $(I128LIB)
|
LINK_LIBS = @LIBS@ $(DECLIB) $(RE2LIB) $(I128LIB)
|
||||||
SO_LINK_LIBS = @LIBS@ $(DECLIB) $(RE2LIB) $(I128LIB)
|
SO_LINK_LIBS = @LIBS@ $(DECLIB) $(RE2LIB) $(I128LIB)
|
||||||
@ -253,6 +254,7 @@ LIBFIREBIRD_BASENAME = $(LIB)/$(LibrarySoName)
|
|||||||
EngineFileName=libEngine${OdsVersion}
|
EngineFileName=libEngine${OdsVersion}
|
||||||
EngineSoName=$(EngineFileName).${SHRLIB_EXT}
|
EngineSoName=$(EngineFileName).${SHRLIB_EXT}
|
||||||
ENGINE_SONAME = $(PLUGINS)/$(EngineSoName)
|
ENGINE_SONAME = $(PLUGINS)/$(EngineSoName)
|
||||||
|
ENGINE_TEST = $(FB_TESTS_DIR)/$(EngineFileName)_test$(EXEC_EXT)
|
||||||
|
|
||||||
# intl will load dynamically, and having the whole soname set with version
|
# intl will load dynamically, and having the whole soname set with version
|
||||||
# confuses the dynamic load process. So we only have the .$(SHRLIB_EXT) file
|
# confuses the dynamic load process. So we only have the .$(SHRLIB_EXT) file
|
||||||
@ -386,6 +388,7 @@ LINK_PLUG_LIBS = -L$(LIB) $(SO_LINK_LIBS)
|
|||||||
# Pay attention - we place common library into obj, not lib dir
|
# Pay attention - we place common library into obj, not lib dir
|
||||||
# It's just a set of object files, prepared to be used by ld, not an output library
|
# It's just a set of object files, prepared to be used by ld, not an output library
|
||||||
COMMON_LIB = $(OBJ)/common.a
|
COMMON_LIB = $(OBJ)/common.a
|
||||||
|
COMMON_TEST = $(FB_TESTS_DIR)/common_test$(EXEC_EXT)
|
||||||
|
|
||||||
# From utilities
|
# From utilities
|
||||||
CREATE_DB = $(RBIN)/create_db$(EXEC_EXT)
|
CREATE_DB = $(RBIN)/create_db$(EXEC_EXT)
|
||||||
|
@ -34,6 +34,10 @@
|
|||||||
# Please don't use compiler/platform specific flags here - nmcc 02-Nov-2002
|
# Please don't use compiler/platform specific flags here - nmcc 02-Nov-2002
|
||||||
WFLAGS =-I$(SRC_ROOT)/include/gen -I$(SRC_ROOT)/include $(CPPFLAGS) $(LTCSOURCE)
|
WFLAGS =-I$(SRC_ROOT)/include/gen -I$(SRC_ROOT)/include $(CPPFLAGS) $(LTCSOURCE)
|
||||||
|
|
||||||
|
ifneq ($(SYSTEM_BOOST_FLG),Y)
|
||||||
|
WFLAGS += -I$(ROOT)/extern/boost
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(TOMMATH_BUILD_FLG),Y)
|
ifeq ($(TOMMATH_BUILD_FLG),Y)
|
||||||
WFLAGS += -I$(TOMMATH_INC)
|
WFLAGS += -I$(TOMMATH_INC)
|
||||||
endif
|
endif
|
||||||
|
@ -36,6 +36,13 @@ Common_Objects:= $(CO1) $(CO2) $(CO3) $(CO4)
|
|||||||
|
|
||||||
AllObjects += $(Common_Objects)
|
AllObjects += $(Common_Objects)
|
||||||
|
|
||||||
|
# Common test files
|
||||||
|
COT1:= $(call dirObjects,common/tests)
|
||||||
|
COT2:= $(call dirObjects,common/classes/tests)
|
||||||
|
Common_Test_Objects:= $(COT1) $(COT2) $(call makeObjects,yvalve,gds.cpp)
|
||||||
|
|
||||||
|
AllObjects += $(Common_Test_Objects)
|
||||||
|
|
||||||
|
|
||||||
# gpre
|
# gpre
|
||||||
GPRE_Common_Objects:= $(call dirObjects,gpre) $(call makeObjects,gpre/languages,@GPRE_LANGUAGE_MODULES@)
|
GPRE_Common_Objects:= $(call dirObjects,gpre) $(call makeObjects,gpre/languages,@GPRE_LANGUAGE_MODULES@)
|
||||||
@ -80,7 +87,9 @@ Engine_Objects:= $(call dirObjects,jrd) $(call dirObjects,dsql) $(call dirObject
|
|||||||
$(call dirObjects,jrd/optimizer) $(call dirObjects,jrd/recsrc) $(call dirObjects,jrd/replication) $(call dirObjects,jrd/trace) \
|
$(call dirObjects,jrd/optimizer) $(call dirObjects,jrd/recsrc) $(call dirObjects,jrd/replication) $(call dirObjects,jrd/trace) \
|
||||||
$(call makeObjects,lock,lock.cpp)
|
$(call makeObjects,lock,lock.cpp)
|
||||||
|
|
||||||
AllObjects += $(Engine_Objects)
|
Engine_Test_Objects:= $(call dirObjects,jrd/tests)
|
||||||
|
|
||||||
|
AllObjects += $(Engine_Objects) $(Engine_Test_Objects)
|
||||||
|
|
||||||
|
|
||||||
# services
|
# services
|
||||||
|
@ -52,6 +52,7 @@ if errorlevel 1 call :ERROR build failed - see make_all_%FB_TARGET_PLATFORM%.log
|
|||||||
@mkdir %FB_OUTPUT_DIR%\plugins\udr 2>nul
|
@mkdir %FB_OUTPUT_DIR%\plugins\udr 2>nul
|
||||||
|
|
||||||
@copy %FB_ROOT_PATH%\temp\%FB_OBJ_DIR%\firebird\* %FB_OUTPUT_DIR% >nul
|
@copy %FB_ROOT_PATH%\temp\%FB_OBJ_DIR%\firebird\* %FB_OUTPUT_DIR% >nul
|
||||||
|
@del %FB_OUTPUT_DIR%\*_test.exe >nul
|
||||||
@copy %FB_ROOT_PATH%\temp\%FB_OBJ_DIR%\firebird\intl\* %FB_OUTPUT_DIR%\intl >nul
|
@copy %FB_ROOT_PATH%\temp\%FB_OBJ_DIR%\firebird\intl\* %FB_OUTPUT_DIR%\intl >nul
|
||||||
@copy %FB_ROOT_PATH%\temp\%FB_OBJ_DIR%\firebird\tzdata\* %FB_OUTPUT_DIR%\tzdata >nul
|
@copy %FB_ROOT_PATH%\temp\%FB_OBJ_DIR%\firebird\tzdata\* %FB_OUTPUT_DIR%\tzdata >nul
|
||||||
@copy %FB_ROOT_PATH%\temp\%FB_OBJ_DIR%\firebird\system32\* %FB_OUTPUT_DIR%\system32 >nul
|
@copy %FB_ROOT_PATH%\temp\%FB_OBJ_DIR%\firebird\system32\* %FB_OUTPUT_DIR%\system32 >nul
|
||||||
|
@ -105,9 +105,6 @@ if "%ERRLEV%"=="1" goto :END
|
|||||||
@call :msgs
|
@call :msgs
|
||||||
if "%ERRLEV%"=="1" goto :END
|
if "%ERRLEV%"=="1" goto :END
|
||||||
|
|
||||||
@call :codes
|
|
||||||
if "%ERRLEV%"=="1" goto :END
|
|
||||||
|
|
||||||
::=======
|
::=======
|
||||||
@call create_msgs.bat msg
|
@call create_msgs.bat msg
|
||||||
::=======
|
::=======
|
||||||
@ -231,8 +228,8 @@ goto :EOF
|
|||||||
:engine
|
:engine
|
||||||
@echo.
|
@echo.
|
||||||
@echo Building engine (%FB_OBJ_DIR%)...
|
@echo Building engine (%FB_OBJ_DIR%)...
|
||||||
@call compile.bat builds\win32\%VS_VER%\Firebird engine_%FB_TARGET_PLATFORM%.log engine
|
@call compile.bat builds\win32\%VS_VER%\Firebird engine_%FB_TARGET_PLATFORM%.log DLLs\engine
|
||||||
@call compile.bat builds\win32\%VS_VER%\Firebird engine_%FB_TARGET_PLATFORM%.log ib_util
|
@call compile.bat builds\win32\%VS_VER%\Firebird engine_%FB_TARGET_PLATFORM%.log DLLs\ib_util
|
||||||
if errorlevel 1 call :boot2 engine
|
if errorlevel 1 call :boot2 engine
|
||||||
@goto :EOF
|
@goto :EOF
|
||||||
|
|
||||||
@ -241,7 +238,7 @@ if errorlevel 1 call :boot2 engine
|
|||||||
:gbak
|
:gbak
|
||||||
@echo.
|
@echo.
|
||||||
@echo Building gbak (%FB_OBJ_DIR%)...
|
@echo Building gbak (%FB_OBJ_DIR%)...
|
||||||
@call compile.bat builds\win32\%VS_VER%\Firebird gbak_%FB_TARGET_PLATFORM%.log gbak
|
@call compile.bat builds\win32\%VS_VER%\Firebird gbak_%FB_TARGET_PLATFORM%.log EXEs\gbak
|
||||||
if errorlevel 1 call :boot2 gbak
|
if errorlevel 1 call :boot2 gbak
|
||||||
@goto :EOF
|
@goto :EOF
|
||||||
|
|
||||||
@ -250,7 +247,7 @@ if errorlevel 1 call :boot2 gbak
|
|||||||
:gpre
|
:gpre
|
||||||
@echo.
|
@echo.
|
||||||
@echo Building gpre (%FB_OBJ_DIR%)...
|
@echo Building gpre (%FB_OBJ_DIR%)...
|
||||||
@call compile.bat builds\win32\%VS_VER%\Firebird gpre_%FB_TARGET_PLATFORM%.log gpre
|
@call compile.bat builds\win32\%VS_VER%\Firebird gpre_%FB_TARGET_PLATFORM%.log EXEs\gpre
|
||||||
if errorlevel 1 call :boot2 gpre
|
if errorlevel 1 call :boot2 gpre
|
||||||
@goto :EOF
|
@goto :EOF
|
||||||
|
|
||||||
@ -259,7 +256,7 @@ if errorlevel 1 call :boot2 gpre
|
|||||||
:isql
|
:isql
|
||||||
@echo.
|
@echo.
|
||||||
@echo Building isql (%FB_OBJ_DIR%)...
|
@echo Building isql (%FB_OBJ_DIR%)...
|
||||||
@call compile.bat builds\win32\%VS_VER%\Firebird isql_%FB_TARGET_PLATFORM%.log isql
|
@call compile.bat builds\win32\%VS_VER%\Firebird isql_%FB_TARGET_PLATFORM%.log EXEs\isql
|
||||||
if errorlevel 1 call :boot2 isql
|
if errorlevel 1 call :boot2 isql
|
||||||
@goto :EOF
|
@goto :EOF
|
||||||
|
|
||||||
@ -299,10 +296,6 @@ goto :EOF
|
|||||||
@"%FB_BIN_DIR%\isql" -q %FB_GEN_DB_DIR%/dbs/security5.fdb -i %FB_ROOT_PATH%\src\dbs\security.sql
|
@"%FB_BIN_DIR%\isql" -q %FB_GEN_DB_DIR%/dbs/security5.fdb -i %FB_ROOT_PATH%\src\dbs\security.sql
|
||||||
@copy %FB_GEN_DIR%\dbs\security5.fdb %FB_GEN_DIR%\dbs\security.fdb > nul
|
@copy %FB_GEN_DIR%\dbs\security5.fdb %FB_GEN_DIR%\dbs\security.fdb > nul
|
||||||
|
|
||||||
@echo Creating metadata.fdb...
|
|
||||||
@echo create database '%FB_GEN_DB_DIR%/dbs/metadata.fdb'; | "%FB_BIN_DIR%\isql" -q -sqldialect 1
|
|
||||||
@copy %FB_GEN_DIR%\dbs\metadata.fdb %FB_GEN_DIR%\dbs\yachts.lnk > nul
|
|
||||||
|
|
||||||
@call create_msgs.bat db
|
@call create_msgs.bat db
|
||||||
|
|
||||||
@goto :EOF
|
@goto :EOF
|
||||||
|
@ -82,6 +82,20 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "udf_compat", "udf_compat.vc
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "chacha", "chacha.vcxproj", "{F2E1A852-5A4B-4162-9DA8-0363805FCFD0}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "chacha", "chacha.vcxproj", "{F2E1A852-5A4B-4162-9DA8-0363805FCFD0}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "engine_static", "engine_static.vcxproj", "{B32D1B09-8161-451E-8D20-D30F26094EC0}"
|
||||||
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "LIBs", "LIBs", "{DA5015E4-8349-4DAB-A1E5-18BDBDDA3022}"
|
||||||
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "EXEs", "EXEs", "{3E6F3FA4-225F-4591-A466-05FDBEF56DBF}"
|
||||||
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DLLs", "DLLs", "{5A1544E3-A87E-4F78-B197-528C12A64C7D}"
|
||||||
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{BDDF1E9A-4E5B-4320-8B92-A0FB71657380}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "common_test", "common_test.vcxproj", "{035D26F9-B406-4D60-A8B7-172098479254}"
|
||||||
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "engine_test", "engine_test.vcxproj", "{3314D6AD-554F-4AE1-B297-6D2D6207DD7C}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Win32 = Debug|Win32
|
Debug|Win32 = Debug|Win32
|
||||||
@ -234,14 +248,6 @@ Global
|
|||||||
{DEE75AD5-F165-40E1-80B2-400E27725D5C}.Release|Win32.Build.0 = Release|Win32
|
{DEE75AD5-F165-40E1-80B2-400E27725D5C}.Release|Win32.Build.0 = Release|Win32
|
||||||
{DEE75AD5-F165-40E1-80B2-400E27725D5C}.Release|x64.ActiveCfg = Release|x64
|
{DEE75AD5-F165-40E1-80B2-400E27725D5C}.Release|x64.ActiveCfg = Release|x64
|
||||||
{DEE75AD5-F165-40E1-80B2-400E27725D5C}.Release|x64.Build.0 = Release|x64
|
{DEE75AD5-F165-40E1-80B2-400E27725D5C}.Release|x64.Build.0 = Release|x64
|
||||||
{EBB8361B-49D5-43A5-8771-940DF3E308EF}.Debug|Win32.ActiveCfg = Debug|Win32
|
|
||||||
{EBB8361B-49D5-43A5-8771-940DF3E308EF}.Debug|Win32.Build.0 = Debug|Win32
|
|
||||||
{EBB8361B-49D5-43A5-8771-940DF3E308EF}.Debug|x64.ActiveCfg = Debug|x64
|
|
||||||
{EBB8361B-49D5-43A5-8771-940DF3E308EF}.Debug|x64.Build.0 = Debug|x64
|
|
||||||
{EBB8361B-49D5-43A5-8771-940DF3E308EF}.Release|Win32.ActiveCfg = Release|Win32
|
|
||||||
{EBB8361B-49D5-43A5-8771-940DF3E308EF}.Release|Win32.Build.0 = Release|Win32
|
|
||||||
{EBB8361B-49D5-43A5-8771-940DF3E308EF}.Release|x64.ActiveCfg = Release|x64
|
|
||||||
{EBB8361B-49D5-43A5-8771-940DF3E308EF}.Release|x64.Build.0 = Release|x64
|
|
||||||
{4BCC693D-1745-45ED-8302-E5E2F979549A}.Debug|Win32.ActiveCfg = Debug|Win32
|
{4BCC693D-1745-45ED-8302-E5E2F979549A}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
{4BCC693D-1745-45ED-8302-E5E2F979549A}.Debug|Win32.Build.0 = Debug|Win32
|
{4BCC693D-1745-45ED-8302-E5E2F979549A}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{4BCC693D-1745-45ED-8302-E5E2F979549A}.Debug|x64.ActiveCfg = Debug|x64
|
{4BCC693D-1745-45ED-8302-E5E2F979549A}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
@ -360,10 +366,72 @@ Global
|
|||||||
{F2E1A852-5A4B-4162-9DA8-0363805FCFD0}.Release|Win32.Build.0 = Release|Win32
|
{F2E1A852-5A4B-4162-9DA8-0363805FCFD0}.Release|Win32.Build.0 = Release|Win32
|
||||||
{F2E1A852-5A4B-4162-9DA8-0363805FCFD0}.Release|x64.ActiveCfg = Release|x64
|
{F2E1A852-5A4B-4162-9DA8-0363805FCFD0}.Release|x64.ActiveCfg = Release|x64
|
||||||
{F2E1A852-5A4B-4162-9DA8-0363805FCFD0}.Release|x64.Build.0 = Release|x64
|
{F2E1A852-5A4B-4162-9DA8-0363805FCFD0}.Release|x64.Build.0 = Release|x64
|
||||||
|
{B32D1B09-8161-451E-8D20-D30F26094EC0}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{B32D1B09-8161-451E-8D20-D30F26094EC0}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{B32D1B09-8161-451E-8D20-D30F26094EC0}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{B32D1B09-8161-451E-8D20-D30F26094EC0}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{B32D1B09-8161-451E-8D20-D30F26094EC0}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{B32D1B09-8161-451E-8D20-D30F26094EC0}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{B32D1B09-8161-451E-8D20-D30F26094EC0}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{B32D1B09-8161-451E-8D20-D30F26094EC0}.Release|x64.Build.0 = Release|x64
|
||||||
|
{035D26F9-B406-4D60-A8B7-172098479254}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{035D26F9-B406-4D60-A8B7-172098479254}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{035D26F9-B406-4D60-A8B7-172098479254}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{035D26F9-B406-4D60-A8B7-172098479254}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{035D26F9-B406-4D60-A8B7-172098479254}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{035D26F9-B406-4D60-A8B7-172098479254}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{035D26F9-B406-4D60-A8B7-172098479254}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{035D26F9-B406-4D60-A8B7-172098479254}.Release|x64.Build.0 = Release|x64
|
||||||
|
{3314D6AD-554F-4AE1-B297-6D2D6207DD7C}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{3314D6AD-554F-4AE1-B297-6D2D6207DD7C}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{3314D6AD-554F-4AE1-B297-6D2D6207DD7C}.Debug|x64.ActiveCfg = Debug|x64
|
||||||
|
{3314D6AD-554F-4AE1-B297-6D2D6207DD7C}.Debug|x64.Build.0 = Debug|x64
|
||||||
|
{3314D6AD-554F-4AE1-B297-6D2D6207DD7C}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{3314D6AD-554F-4AE1-B297-6D2D6207DD7C}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{3314D6AD-554F-4AE1-B297-6D2D6207DD7C}.Release|x64.ActiveCfg = Release|x64
|
||||||
|
{3314D6AD-554F-4AE1-B297-6D2D6207DD7C}.Release|x64.Build.0 = Release|x64
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
|
GlobalSection(NestedProjects) = preSolution
|
||||||
|
{0D616380-1A5A-4230-A80B-021360E4E669} = {DA5015E4-8349-4DAB-A1E5-18BDBDDA3022}
|
||||||
|
{D1507562-A363-4685-96AF-B036F5E5E47F} = {DA5015E4-8349-4DAB-A1E5-18BDBDDA3022}
|
||||||
|
{15605F44-BFFD-444F-AD4C-55DC9D704465} = {DA5015E4-8349-4DAB-A1E5-18BDBDDA3022}
|
||||||
|
{F8798A49-9D20-451E-A7BD-FEB5237103B5} = {5A1544E3-A87E-4F78-B197-528C12A64C7D}
|
||||||
|
{E8397148-0E9C-449B-9F45-7FB377A08242} = {3E6F3FA4-225F-4591-A466-05FDBEF56DBF}
|
||||||
|
{BBD83ED3-8A48-4FE8-B4B7-CB27730986B2} = {3E6F3FA4-225F-4591-A466-05FDBEF56DBF}
|
||||||
|
{23EC8DAA-6718-4EF3-979F-89F611C7D504} = {3E6F3FA4-225F-4591-A466-05FDBEF56DBF}
|
||||||
|
{B732F5D2-B5D9-417F-B156-D790F466CB8E} = {3E6F3FA4-225F-4591-A466-05FDBEF56DBF}
|
||||||
|
{44A9E4AD-B932-4620-B319-431A153BB341} = {3E6F3FA4-225F-4591-A466-05FDBEF56DBF}
|
||||||
|
{D84F0839-28A4-40B2-B5F4-F5E1E7F48FD0} = {3E6F3FA4-225F-4591-A466-05FDBEF56DBF}
|
||||||
|
{7043CC61-DEC1-4C6B-86B9-0E911D1094C9} = {3E6F3FA4-225F-4591-A466-05FDBEF56DBF}
|
||||||
|
{B7F22B7F-9937-4874-9A8B-6AB4E36E74A5} = {3E6F3FA4-225F-4591-A466-05FDBEF56DBF}
|
||||||
|
{7E862973-37C4-4202-80E7-490ED4DEDA14} = {3E6F3FA4-225F-4591-A466-05FDBEF56DBF}
|
||||||
|
{EABA0FF3-1C4D-4FAB-8418-31C9061F3F0D} = {5A1544E3-A87E-4F78-B197-528C12A64C7D}
|
||||||
|
{19470DE6-1975-4F9B-B1BE-E87A83240B15} = {3E6F3FA4-225F-4591-A466-05FDBEF56DBF}
|
||||||
|
{72894398-38CA-47A6-95FE-9647DE2BE968} = {3E6F3FA4-225F-4591-A466-05FDBEF56DBF}
|
||||||
|
{DFFA2117-E6A8-4806-BB69-94DAC8F8F42A} = {5A1544E3-A87E-4F78-B197-528C12A64C7D}
|
||||||
|
{DEE75AD5-F165-40E1-80B2-400E27725D5C} = {3E6F3FA4-225F-4591-A466-05FDBEF56DBF}
|
||||||
|
{4BCC693D-1745-45ED-8302-E5E2F979549A} = {DA5015E4-8349-4DAB-A1E5-18BDBDDA3022}
|
||||||
|
{01A41DFA-8908-4576-A1F1-C8BC7EAE39A1} = {3E6F3FA4-225F-4591-A466-05FDBEF56DBF}
|
||||||
|
{C6A31374-178C-4680-A404-76BE24D0229B} = {3E6F3FA4-225F-4591-A466-05FDBEF56DBF}
|
||||||
|
{FAF9AD25-8238-49E9-9AC9-8C56E190440A} = {5A1544E3-A87E-4F78-B197-528C12A64C7D}
|
||||||
|
{EFB07DBC-36E3-4C54-B941-3CDAFAACF47B} = {3E6F3FA4-225F-4591-A466-05FDBEF56DBF}
|
||||||
|
{53F75437-15B8-4A5C-86BF-E238CC68FCBC} = {5A1544E3-A87E-4F78-B197-528C12A64C7D}
|
||||||
|
{58C7E370-0EDD-4F5E-8617-3F5071170205} = {3E6F3FA4-225F-4591-A466-05FDBEF56DBF}
|
||||||
|
{20DEBF08-EF0A-4C94-ADEB-FE9BBA14588B} = {5A1544E3-A87E-4F78-B197-528C12A64C7D}
|
||||||
|
{2925B855-5975-44AE-BB00-1217A2A4E511} = {DA5015E4-8349-4DAB-A1E5-18BDBDDA3022}
|
||||||
|
{4FE03933-98CD-4879-A135-FD9430087A6B} = {5A1544E3-A87E-4F78-B197-528C12A64C7D}
|
||||||
|
{D836FBF5-071E-4E04-8D63-C7EB6701B296} = {5A1544E3-A87E-4F78-B197-528C12A64C7D}
|
||||||
|
{BD00D28E-6667-414E-A4B1-6BEFC07ADB42} = {5A1544E3-A87E-4F78-B197-528C12A64C7D}
|
||||||
|
{062BD3C7-2D01-44F6-8D79-070F688C559F} = {5A1544E3-A87E-4F78-B197-528C12A64C7D}
|
||||||
|
{6794EB8C-6425-422D-A3B0-14EED54C0E98} = {5A1544E3-A87E-4F78-B197-528C12A64C7D}
|
||||||
|
{F2E1A852-5A4B-4162-9DA8-0363805FCFD0} = {5A1544E3-A87E-4F78-B197-528C12A64C7D}
|
||||||
|
{B32D1B09-8161-451E-8D20-D30F26094EC0} = {DA5015E4-8349-4DAB-A1E5-18BDBDDA3022}
|
||||||
|
{035D26F9-B406-4D60-A8B7-172098479254} = {BDDF1E9A-4E5B-4320-8B92-A0FB71657380}
|
||||||
|
{3314D6AD-554F-4AE1-B297-6D2D6207DD7C} = {BDDF1E9A-4E5B-4320-8B92-A0FB71657380}
|
||||||
|
EndGlobalSection
|
||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
SolutionGuid = {97076DB2-CFCD-4277-BDF0-A6407852E1AC}
|
SolutionGuid = {97076DB2-CFCD-4277-BDF0-A6407852E1AC}
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
<ClCompile>
|
<ClCompile>
|
||||||
<AdditionalOptions>/EHsc- %(AdditionalOptions)</AdditionalOptions>
|
<AdditionalOptions>/EHsc- %(AdditionalOptions)</AdditionalOptions>
|
||||||
<OmitFramePointers>true</OmitFramePointers>
|
<OmitFramePointers>true</OmitFramePointers>
|
||||||
<AdditionalIncludeDirectories>../../../src/include;../../../src/include/gen;../../../extern/libtomcrypt/src/headers;../../../extern/libtommath;../../../extern/icu/include;../../../extern/zlib;../../../extern/re2;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>../../../src/include;../../../src/include/gen;../../../extern/libtomcrypt/src/headers;../../../extern/libtommath;../../../extern/icu/include;../../../extern/zlib;../../../extern/re2;../../../extern/boost;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<ExceptionHandling>
|
<ExceptionHandling>
|
||||||
</ExceptionHandling>
|
</ExceptionHandling>
|
||||||
<RuntimeTypeInfo>false</RuntimeTypeInfo>
|
<RuntimeTypeInfo>false</RuntimeTypeInfo>
|
||||||
|
209
builds/win32/msvc15/common_test.vcxproj
Normal file
209
builds/win32/msvc15/common_test.vcxproj
Normal file
@ -0,0 +1,209 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{035D26F9-B406-4D60-A8B7-172098479254}</ProjectGuid>
|
||||||
|
<RootNamespace>common_test</RootNamespace>
|
||||||
|
<WindowsTargetPlatformVersion Condition="'$(VisualStudioVersion)'=='15.0'">10.0.17763.0</WindowsTargetPlatformVersion>
|
||||||
|
<WindowsTargetPlatformVersion Condition="'$(VisualStudioVersion)'=='16.0'">10.0</WindowsTargetPlatformVersion>
|
||||||
|
<WindowsTargetPlatformVersion Condition="'$(VisualStudioVersion)'=='17.0'">10.0</WindowsTargetPlatformVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseOfMfc>false</UseOfMfc>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='15.0'">v141_xp</PlatformToolset>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='16.0'">v142</PlatformToolset>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='17.0'">v143</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseOfMfc>false</UseOfMfc>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='15.0'">v141_xp</PlatformToolset>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='16.0'">v142</PlatformToolset>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='17.0'">v143</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseOfMfc>false</UseOfMfc>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='15.0'">v141</PlatformToolset>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='16.0'">v142</PlatformToolset>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='17.0'">v143</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseOfMfc>false</UseOfMfc>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='15.0'">v141</PlatformToolset>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='16.0'">v142</PlatformToolset>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='17.0'">v143</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
|
||||||
|
<Import Project="FirebirdCommon.props" />
|
||||||
|
<Import Project="FirebirdDebug.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
|
||||||
|
<Import Project="FirebirdCommon.props" />
|
||||||
|
<Import Project="FirebirdRelease.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
|
||||||
|
<Import Project="FirebirdCommon.props" />
|
||||||
|
<Import Project="FirebirdDebug.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
|
||||||
|
<Import Project="FirebirdCommon.props" />
|
||||||
|
<Import Project="FirebirdRelease.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||||
|
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
|
||||||
|
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
|
||||||
|
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
|
||||||
|
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
|
||||||
|
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||||
|
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
|
||||||
|
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
|
||||||
|
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||||
|
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
|
||||||
|
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
|
||||||
|
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||||
|
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
|
||||||
|
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
|
||||||
|
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||||
|
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
|
||||||
|
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\temp\$(PlatformName)\$(Configuration)\firebird\</OutDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\temp\$(PlatformName)\$(Configuration)\firebird\</OutDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\..\temp\$(PlatformName)\$(Configuration)\firebird\</OutDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\..\temp\$(PlatformName)\$(Configuration)\firebird\</OutDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||||
|
<PreprocessorDefinitions>NDEBUG;_CONSOLE;SUPERCLIENT;WIN32;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<BrowseInformation>true</BrowseInformation>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalDependencies>comctl32.lib;ws2_32.lib;mpr.lib;version.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<RandomizedBaseAddress>false</RandomizedBaseAddress>
|
||||||
|
<DataExecutionPrevention>
|
||||||
|
</DataExecutionPrevention>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<PreprocessorDefinitions>_DEBUG;_CONSOLE;SUPERCLIENT;WIN32;DEV_BUILD;_WINDOWS;_USRDLL;CLIENT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<BrowseInformation>true</BrowseInformation>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalDependencies>comctl32.lib;ws2_32.lib;mpr.lib;version.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<RandomizedBaseAddress>false</RandomizedBaseAddress>
|
||||||
|
<DataExecutionPrevention>
|
||||||
|
</DataExecutionPrevention>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||||
|
<PreprocessorDefinitions>NDEBUG;_CONSOLE;SUPERCLIENT;WIN32;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalDependencies>comctl32.lib;ws2_32.lib;mpr.lib;version.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<RandomizedBaseAddress>false</RandomizedBaseAddress>
|
||||||
|
<DataExecutionPrevention>
|
||||||
|
</DataExecutionPrevention>
|
||||||
|
<TargetMachine>MachineX64</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<PreprocessorDefinitions>_DEBUG;_CONSOLE;SUPERCLIENT;WIN32;DEV_BUILD;_WINDOWS;_USRDLL;CLIENT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<BrowseInformation>true</BrowseInformation>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalDependencies>comctl32.lib;ws2_32.lib;mpr.lib;version.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<RandomizedBaseAddress>false</RandomizedBaseAddress>
|
||||||
|
<DataExecutionPrevention>
|
||||||
|
</DataExecutionPrevention>
|
||||||
|
<TargetMachine>MachineX64</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include="..\..\..\src\jrd\version.rc">
|
||||||
|
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\src\jrd</AdditionalIncludeDirectories>
|
||||||
|
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\..\src\jrd</AdditionalIncludeDirectories>
|
||||||
|
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\src\jrd</AdditionalIncludeDirectories>
|
||||||
|
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\..\src\jrd</AdditionalIncludeDirectories>
|
||||||
|
</ResourceCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\..\..\src\common\tests\CommonTest.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\common\classes\tests\AlignerTest.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\common\classes\tests\ArrayTest.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\common\classes\tests\DoublyLinkedListTest.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\yvalve\gds.cpp" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="common.vcxproj">
|
||||||
|
<Project>{15605f44-bffd-444f-ad4c-55dc9d704465}</Project>
|
||||||
|
<Private>true</Private>
|
||||||
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
|
<CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
|
||||||
|
<LinkLibraryDependencies>true</LinkLibraryDependencies>
|
||||||
|
<UseLibraryDependencyInputs>false</UseLibraryDependencyInputs>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
34
builds/win32/msvc15/common_test.vcxproj.filters
Normal file
34
builds/win32/msvc15/common_test.vcxproj.filters
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Resource files">
|
||||||
|
<UniqueIdentifier>{59426d65-9f63-49b9-b8c1-9416f4875c62}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="source">
|
||||||
|
<UniqueIdentifier>{487dc529-1110-47e9-a3aa-907ca1b16858}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include="..\..\..\src\jrd\version.rc">
|
||||||
|
<Filter>Resource files</Filter>
|
||||||
|
</ResourceCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\..\..\src\common\tests\CommonTest.cpp">
|
||||||
|
<Filter>source</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\..\src\common\classes\tests\AlignerTest.cpp">
|
||||||
|
<Filter>source</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\..\src\common\classes\tests\ArrayTest.cpp">
|
||||||
|
<Filter>source</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\..\src\common\classes\tests\DoublyLinkedListTest.cpp">
|
||||||
|
<Filter>source</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\..\src\yvalve\gds.cpp">
|
||||||
|
<Filter>source</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
@ -19,366 +19,6 @@
|
|||||||
</ProjectConfiguration>
|
</ProjectConfiguration>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\..\..\gen\dsql\DdlNodes.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\gen\dsql\metd.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\gen\dsql\PackageNodes.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\gen\jrd\dfw.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\gen\jrd\dpm.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\gen\jrd\dyn_util.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\gen\jrd\fun.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\gen\jrd\Function.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\gen\jrd\grant.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\gen\jrd\ini.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\gen\jrd\met.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\gen\jrd\scl.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\gen\utilities\gstat\dba.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\dsql\AggNodes.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\dsql\BlrDebugWriter.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\dsql\BoolNodes.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\dsql\ddl.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\dsql\dsql.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\dsql\DsqlBatch.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\dsql\DsqlCompilerScratch.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\dsql\DsqlCursor.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\dsql\DSqlDataTypeUtil.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\dsql\DsqlRequests.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\dsql\DsqlStatementCache.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\dsql\DsqlStatements.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\dsql\errd.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\dsql\ExprNodes.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\dsql\gen.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\dsql\make.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\dsql\movd.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\dsql\parse.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\dsql\Parser.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\dsql\pass1.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\dsql\StmtNodes.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\dsql\utld.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\dsql\WinNodes.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\Attachment.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\blb.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\blob_filter.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\btn.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\btr.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\builtin.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\cch.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\cmp.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\Coercion.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\Collation.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\ConfigTable.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\CryptoManager.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\cvt.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\cvt2.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\Database.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\DataTypeUtil.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\DbCreators.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\DebugInterface.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\err.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\event.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\evl.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\exe.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\ext.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\extds\ExtDS.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\extds\InternalDS.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\extds\IscDS.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\extds\ValidatePassword.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\ExtEngineManager.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\filters.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\flu.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\GarbageCollector.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\GlobalRWLock.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\idx.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\inf.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\intl.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\IntlManager.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\intl_builtin.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\jrd.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\KeywordsTable.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\lck.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\Mapping.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\MetaName.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\Monitoring.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\mov.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\nbak.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\nodebug.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\ods.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\optimizer\Optimizer.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\optimizer\Retrieval.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\optimizer\InnerJoin.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\os\win32\winnt.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\pag.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\par.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\PreparedStatement.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\RandomGenerator.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\RecordBuffer.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\RecordSourceNodes.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\recsrc\AggregatedStream.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\recsrc\BitmapTableScan.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\recsrc\BufferedStream.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\recsrc\ConditionalStream.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\recsrc\Cursor.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\recsrc\ExternalTableScan.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\recsrc\FilteredStream.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\recsrc\FirstRowsStream.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\recsrc\FullOuterJoin.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\recsrc\FullTableScan.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\recsrc\HashJoin.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\recsrc\IndexTableScan.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\recsrc\LocalTableStream.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\recsrc\LockedStream.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\recsrc\MergeJoin.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\recsrc\NestedLoopJoin.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\recsrc\ProcedureScan.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\recsrc\RecordSource.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\recsrc\RecursiveStream.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\recsrc\SingularStream.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\recsrc\SkipRowsStream.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\recsrc\SortedStream.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\recsrc\Union.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\recsrc\VirtualTableScan.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\recsrc\WindowedStream.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\replication\Applier.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\replication\ChangeLog.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\replication\Config.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\replication\Manager.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\replication\Publisher.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\replication\Replicator.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\replication\Utils.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\Relation.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\ResultSet.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\rlck.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\Routine.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\rpb_chain.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\RuntimeStatistics.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\Savepoint.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\sdw.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\shut.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\sort.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\sqz.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\Statement.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\svc.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\SysFunction.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\SystemPackages.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\TempSpace.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\TimeZone.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\tpc.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\tra.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\trace\TraceCmdLine.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\trace\TraceConfigStorage.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\trace\TraceLog.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\trace\TraceManager.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\trace\TraceObjects.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\trace\TraceService.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\UserManagement.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\validation.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\vio.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\VirtualTable.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\jrd\WorkerAttachment.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\lock\lock.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\utilities\gsec\gsec.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\utilities\gstat\ppg.cpp" />
|
|
||||||
<ClCompile Include="..\..\..\src\utilities\nbackup\nbackup.cpp" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ClInclude Include="..\..\..\src\dsql\AggNodes.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\dsql\BlrDebugWriter.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\dsql\BoolNodes.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\dsql\chars.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\dsql\DdlNodes.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\dsql\ddl_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\dsql\dsql.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\dsql\DsqlBatch.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\dsql\DsqlCompilerScratch.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\dsql\DsqlCursor.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\dsql\DSqlDataTypeUtil.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\dsql\DsqlRequests.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\dsql\DsqlStatementCache.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\dsql\DsqlStatements.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\dsql\dsql_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\dsql\errd_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\dsql\ExprNodes.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\dsql\gen_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\dsql\make_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\dsql\metd_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\dsql\movd_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\dsql\Nodes.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\dsql\PackageNodes.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\dsql\Parser.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\dsql\pass1_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\dsql\sqlda_pub.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\dsql\StmtNodes.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\dsql\sym.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\dsql\utld_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\dsql\Visitors.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\dsql\WinNodes.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\acl.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\align.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\Attachment.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\blb.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\blb_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\blf_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\blob_filter.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\blp.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\blr.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\btn.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\btr.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\btr_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\build_no.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\cch.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\cch_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\cmp_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\Coercion.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\Collation.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\ConfigTable.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\constants.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\CryptoManager.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\cvt2_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\cvt_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\Database.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\DataTypeUtil.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\DebugInterface.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\dflt.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\dfw_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\dpm_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\drq.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\dyn.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\dyn_ut_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\EngineInterface.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\err_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\event.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\event_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\evl_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\evl_string.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\exe.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\exe_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\ext.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\extds\ExtDS.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\extds\InternalDS.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\extds\IscDS.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\extds\ValidatePassword.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\ExtEngineManager.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\ext_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\fields.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\filte_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\flags.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\flu.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\flu_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\Function.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\fun_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\GarbageCollector.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\GlobalRWLock.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\grant_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\ibase.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\ibsetjmp.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\idx.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\idx_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\inf_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\inf_pub.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\ini.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\ini_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\intl.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\IntlManager.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\intl_classes.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\intl_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\irq.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\isc_version.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\jrd.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\jrd_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\KeywordsTable.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\lck.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\lck_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\license.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\lls.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\Mapping.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\MetaName.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\Monitoring.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\met.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\met_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\mov_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\msg.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\msg_encode.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\names.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\nbak.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\ntrace.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\obj.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\ods.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\ods_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\optimizer\Optimizer.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\pag.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\pag_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\par_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\PreparedStatement.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\QualifiedName.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\que.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\RandomGenerator.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\RecordBuffer.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\RecordNumber.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\RecordSourceNodes.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\recsrc\Cursor.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\recsrc\RecordSource.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\Relation.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\relations.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\req.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\ResultSet.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\rlck_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\Routine.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\rpb_chain.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\RuntimeStatistics.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\sbm.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\scl.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\scl_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\sdw.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\sdw_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\shut_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\sort.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\sqz.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\Statement.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\status.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\svc.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\svc_undoc.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\SysFunction.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\SystemPackages.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\TempSpace.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\TimeZone.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\tpc_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\tra.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\trace\TraceConfigStorage.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\trace\TraceDSQLHelpers.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\trace\TraceJrdHelpers.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\trace\TraceLog.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\trace\TraceManager.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\trace\TraceObjects.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\trace\TraceService.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\trace\TraceSession.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\trace\traceswi.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\tra_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\trig.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\types.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\UserManagement.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\val.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\val_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\vio_debug.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\vio_proto.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\VirtualTable.h" />
|
|
||||||
<ClInclude Include="..\..\..\src\jrd\WorkerAttachment.h" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<None Include="..\..\..\src\dsql\DdlNodes.epp" />
|
|
||||||
<None Include="..\..\..\src\dsql\metd.epp" />
|
|
||||||
<None Include="..\..\..\src\dsql\PackageNodes.epp" />
|
|
||||||
<None Include="..\..\..\src\dsql\parse.y">
|
|
||||||
<FileType>Document</FileType>
|
|
||||||
</None>
|
|
||||||
<None Include="..\..\..\src\jrd\dfw.epp" />
|
|
||||||
<None Include="..\..\..\src\jrd\dpm.epp" />
|
|
||||||
<None Include="..\..\..\src\jrd\dyn_util.epp" />
|
|
||||||
<None Include="..\..\..\src\jrd\fun.epp" />
|
|
||||||
<None Include="..\..\..\src\jrd\Function.epp" />
|
|
||||||
<None Include="..\..\..\src\jrd\grant.epp" />
|
|
||||||
<None Include="..\..\..\src\jrd\ini.epp" />
|
|
||||||
<None Include="..\..\..\src\jrd\met.epp" />
|
|
||||||
<None Include="..\..\..\src\jrd\scl.epp" />
|
|
||||||
<None Include="..\..\..\src\utilities\gstat\dba.epp" />
|
|
||||||
<None Include="..\defs\plugin.def" />
|
<None Include="..\defs\plugin.def" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@ -406,6 +46,14 @@
|
|||||||
<LinkLibraryDependencies>true</LinkLibraryDependencies>
|
<LinkLibraryDependencies>true</LinkLibraryDependencies>
|
||||||
<UseLibraryDependencyInputs>false</UseLibraryDependencyInputs>
|
<UseLibraryDependencyInputs>false</UseLibraryDependencyInputs>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="engine_static.vcxproj">
|
||||||
|
<Project>{b32d1b09-8161-451e-8d20-d30f26094ec0}</Project>
|
||||||
|
<Private>true</Private>
|
||||||
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
|
<CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
|
||||||
|
<LinkLibraryDependencies>true</LinkLibraryDependencies>
|
||||||
|
<UseLibraryDependencyInputs>true</UseLibraryDependencyInputs>
|
||||||
|
</ProjectReference>
|
||||||
<ProjectReference Include="yvalve.vcxproj">
|
<ProjectReference Include="yvalve.vcxproj">
|
||||||
<Project>{4fe03933-98cd-4879-a135-fd9430087a6b}</Project>
|
<Project>{4fe03933-98cd-4879-a135-fd9430087a6b}</Project>
|
||||||
<Private>true</Private>
|
<Private>true</Private>
|
||||||
|
File diff suppressed because it is too large
Load Diff
511
builds/win32/msvc15/engine_static.vcxproj
Normal file
511
builds/win32/msvc15/engine_static.vcxproj
Normal file
@ -0,0 +1,511 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\..\..\gen\dsql\DdlNodes.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\gen\dsql\metd.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\gen\dsql\PackageNodes.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\gen\jrd\dfw.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\gen\jrd\dpm.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\gen\jrd\dyn_util.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\gen\jrd\fun.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\gen\jrd\Function.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\gen\jrd\grant.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\gen\jrd\ini.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\gen\jrd\met.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\gen\jrd\scl.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\gen\utilities\gstat\dba.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\dsql\AggNodes.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\dsql\BlrDebugWriter.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\dsql\BoolNodes.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\dsql\ddl.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\dsql\dsql.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\dsql\DsqlBatch.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\dsql\DsqlCompilerScratch.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\dsql\DsqlCursor.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\dsql\DSqlDataTypeUtil.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\dsql\DsqlRequests.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\dsql\DsqlStatementCache.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\dsql\DsqlStatements.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\dsql\errd.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\dsql\ExprNodes.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\dsql\gen.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\dsql\make.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\dsql\movd.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\dsql\parse.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\dsql\Parser.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\dsql\pass1.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\dsql\StmtNodes.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\dsql\utld.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\dsql\WinNodes.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\Attachment.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\blb.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\blob_filter.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\btn.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\btr.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\builtin.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\cch.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\cmp.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\Coercion.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\Collation.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\ConfigTable.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\CryptoManager.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\cvt.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\cvt2.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\Database.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\DataTypeUtil.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\DbCreators.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\DebugInterface.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\err.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\event.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\evl.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\exe.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\ext.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\extds\ExtDS.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\extds\InternalDS.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\extds\IscDS.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\extds\ValidatePassword.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\ExtEngineManager.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\filters.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\flu.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\GarbageCollector.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\GlobalRWLock.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\idx.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\inf.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\intl.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\IntlManager.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\intl_builtin.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\jrd.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\KeywordsTable.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\lck.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\Mapping.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\MetaName.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\Monitoring.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\mov.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\nbak.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\nodebug.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\ods.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\optimizer\Optimizer.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\optimizer\Retrieval.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\optimizer\InnerJoin.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\os\win32\winnt.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\pag.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\par.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\PreparedStatement.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\RandomGenerator.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\RecordBuffer.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\RecordSourceNodes.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\recsrc\AggregatedStream.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\recsrc\BitmapTableScan.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\recsrc\BufferedStream.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\recsrc\ConditionalStream.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\recsrc\Cursor.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\recsrc\ExternalTableScan.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\recsrc\FilteredStream.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\recsrc\FirstRowsStream.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\recsrc\FullOuterJoin.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\recsrc\FullTableScan.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\recsrc\HashJoin.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\recsrc\IndexTableScan.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\recsrc\LocalTableStream.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\recsrc\LockedStream.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\recsrc\MergeJoin.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\recsrc\NestedLoopJoin.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\recsrc\ProcedureScan.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\recsrc\RecordSource.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\recsrc\RecursiveStream.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\recsrc\SingularStream.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\recsrc\SkipRowsStream.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\recsrc\SortedStream.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\recsrc\Union.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\recsrc\VirtualTableScan.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\recsrc\WindowedStream.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\replication\Applier.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\replication\ChangeLog.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\replication\Config.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\replication\Manager.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\replication\Publisher.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\replication\Replicator.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\replication\Utils.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\Relation.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\ResultSet.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\rlck.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\Routine.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\rpb_chain.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\RuntimeStatistics.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\Savepoint.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\sdw.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\shut.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\sort.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\sqz.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\Statement.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\svc.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\SysFunction.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\SystemPackages.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\TempSpace.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\TimeZone.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\tpc.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\tra.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\trace\TraceCmdLine.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\trace\TraceConfigStorage.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\trace\TraceLog.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\trace\TraceManager.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\trace\TraceObjects.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\trace\TraceService.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\UserManagement.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\validation.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\vio.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\VirtualTable.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\WorkerAttachment.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\lock\lock.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\utilities\gsec\gsec.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\utilities\gstat\ppg.cpp" />
|
||||||
|
<ClCompile Include="..\..\..\src\utilities\nbackup\nbackup.cpp" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\..\..\src\dsql\AggNodes.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\dsql\BlrDebugWriter.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\dsql\BoolNodes.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\dsql\chars.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\dsql\DdlNodes.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\dsql\ddl_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\dsql\dsql.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\dsql\DsqlBatch.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\dsql\DsqlCompilerScratch.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\dsql\DsqlCursor.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\dsql\DSqlDataTypeUtil.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\dsql\DsqlRequests.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\dsql\DsqlStatementCache.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\dsql\DsqlStatements.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\dsql\dsql_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\dsql\errd_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\dsql\ExprNodes.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\dsql\gen_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\dsql\make_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\dsql\metd_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\dsql\movd_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\dsql\Nodes.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\dsql\PackageNodes.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\dsql\Parser.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\dsql\pass1_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\dsql\sqlda_pub.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\dsql\StmtNodes.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\dsql\sym.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\dsql\utld_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\dsql\Visitors.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\dsql\WinNodes.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\acl.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\align.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\Attachment.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\blb.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\blb_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\blf_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\blob_filter.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\blp.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\blr.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\btn.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\btr.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\btr_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\build_no.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\cch.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\cch_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\cmp_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\Coercion.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\Collation.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\ConfigTable.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\constants.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\CryptoManager.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\cvt2_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\cvt_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\Database.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\DataTypeUtil.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\DebugInterface.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\dflt.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\dfw_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\dpm_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\drq.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\dyn.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\dyn_ut_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\EngineInterface.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\err_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\event.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\event_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\evl_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\evl_string.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\exe.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\exe_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\ext.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\extds\ExtDS.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\extds\InternalDS.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\extds\IscDS.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\extds\ValidatePassword.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\ExtEngineManager.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\ext_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\fields.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\filte_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\flags.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\flu.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\flu_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\Function.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\fun_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\GarbageCollector.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\GlobalRWLock.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\grant_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\ibase.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\ibsetjmp.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\idx.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\idx_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\inf_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\inf_pub.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\ini.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\ini_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\intl.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\IntlManager.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\intl_classes.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\intl_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\irq.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\isc_version.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\jrd.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\jrd_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\KeywordsTable.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\lck.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\lck_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\license.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\lls.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\Mapping.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\MetaName.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\Monitoring.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\met.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\met_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\mov_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\msg.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\msg_encode.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\names.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\nbak.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\ntrace.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\obj.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\ods.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\ods_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\optimizer\Optimizer.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\pag.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\pag_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\par_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\PreparedStatement.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\QualifiedName.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\que.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\RandomGenerator.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\RecordBuffer.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\RecordNumber.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\RecordSourceNodes.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\recsrc\Cursor.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\recsrc\RecordSource.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\Relation.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\relations.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\req.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\ResultSet.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\rlck_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\Routine.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\rpb_chain.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\RuntimeStatistics.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\sbm.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\scl.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\scl_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\sdw.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\sdw_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\shut_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\sort.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\sqz.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\Statement.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\status.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\svc.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\svc_undoc.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\SysFunction.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\SystemPackages.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\TempSpace.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\TimeZone.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\tpc_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\tra.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\trace\TraceConfigStorage.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\trace\TraceDSQLHelpers.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\trace\TraceJrdHelpers.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\trace\TraceLog.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\trace\TraceManager.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\trace\TraceObjects.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\trace\TraceService.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\trace\TraceSession.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\trace\traceswi.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\tra_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\trig.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\types.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\UserManagement.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\val.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\val_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\vio_debug.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\vio_proto.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\VirtualTable.h" />
|
||||||
|
<ClInclude Include="..\..\..\src\jrd\WorkerAttachment.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="..\..\..\src\dsql\DdlNodes.epp" />
|
||||||
|
<None Include="..\..\..\src\dsql\metd.epp" />
|
||||||
|
<None Include="..\..\..\src\dsql\PackageNodes.epp" />
|
||||||
|
<None Include="..\..\..\src\dsql\parse.y">
|
||||||
|
<FileType>Document</FileType>
|
||||||
|
</None>
|
||||||
|
<None Include="..\..\..\src\jrd\dfw.epp" />
|
||||||
|
<None Include="..\..\..\src\jrd\dpm.epp" />
|
||||||
|
<None Include="..\..\..\src\jrd\dyn_util.epp" />
|
||||||
|
<None Include="..\..\..\src\jrd\fun.epp" />
|
||||||
|
<None Include="..\..\..\src\jrd\Function.epp" />
|
||||||
|
<None Include="..\..\..\src\jrd\grant.epp" />
|
||||||
|
<None Include="..\..\..\src\jrd\ini.epp" />
|
||||||
|
<None Include="..\..\..\src\jrd\met.epp" />
|
||||||
|
<None Include="..\..\..\src\jrd\scl.epp" />
|
||||||
|
<None Include="..\..\..\src\utilities\gstat\dba.epp" />
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{B32D1B09-8161-451E-8D20-D30F26094EC0}</ProjectGuid>
|
||||||
|
<WindowsTargetPlatformVersion Condition="'$(VisualStudioVersion)'=='15.0'">10.0.17763.0</WindowsTargetPlatformVersion>
|
||||||
|
<WindowsTargetPlatformVersion Condition="'$(VisualStudioVersion)'=='16.0'">10.0</WindowsTargetPlatformVersion>
|
||||||
|
<WindowsTargetPlatformVersion Condition="'$(VisualStudioVersion)'=='17.0'">10.0</WindowsTargetPlatformVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<UseOfMfc>false</UseOfMfc>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='15.0'">v141_xp</PlatformToolset>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='16.0'">v142</PlatformToolset>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='17.0'">v143</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<UseOfMfc>false</UseOfMfc>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='15.0'">v141_xp</PlatformToolset>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='16.0'">v142</PlatformToolset>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='17.0'">v143</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<UseOfMfc>false</UseOfMfc>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='15.0'">v141</PlatformToolset>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='16.0'">v142</PlatformToolset>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='17.0'">v143</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<UseOfMfc>false</UseOfMfc>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='15.0'">v141</PlatformToolset>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='16.0'">v142</PlatformToolset>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='17.0'">v143</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
|
||||||
|
<Import Project="FirebirdCommon.props" />
|
||||||
|
<Import Project="FirebirdRelease.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
|
||||||
|
<Import Project="FirebirdCommon.props" />
|
||||||
|
<Import Project="FirebirdDebug.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
|
||||||
|
<Import Project="FirebirdCommon.props" />
|
||||||
|
<Import Project="FirebirdRelease.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
|
||||||
|
<Import Project="FirebirdCommon.props" />
|
||||||
|
<Import Project="FirebirdDebug.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||||
|
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||||
|
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
|
||||||
|
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
|
||||||
|
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||||
|
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
|
||||||
|
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
|
||||||
|
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||||
|
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
|
||||||
|
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
|
||||||
|
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||||
|
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
|
||||||
|
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_LIB;SUPERSERVER;DEV_BUILD;NAMESPACE=Vulcan;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>../../../src/include;../../../src/include/gen;../../../extern/icu/include;../../../src/vulcan;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_LIB;SUPERSERVER;DEV_BUILD;NAMESPACE=Vulcan;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||||
|
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_LIB;SUPERSERVER;NAMESPACE=Vulcan;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<PrecompiledHeader>
|
||||||
|
</PrecompiledHeader>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||||
|
<AdditionalIncludeDirectories>../../../src/include;../../../src/include/gen;../../../extern/icu/include;../../../src/vulcan;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_LIB;SUPERSERVER;NAMESPACE=Vulcan;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<PrecompiledHeader>
|
||||||
|
</PrecompiledHeader>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
1115
builds/win32/msvc15/engine_static.vcxproj.filters
Normal file
1115
builds/win32/msvc15/engine_static.vcxproj.filters
Normal file
File diff suppressed because it is too large
Load Diff
240
builds/win32/msvc15/engine_test.vcxproj
Normal file
240
builds/win32/msvc15/engine_test.vcxproj
Normal file
@ -0,0 +1,240 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Debug|x64">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{3314D6AD-554F-4AE1-B297-6D2D6207DD7C}</ProjectGuid>
|
||||||
|
<RootNamespace>engine_test</RootNamespace>
|
||||||
|
<WindowsTargetPlatformVersion Condition="'$(VisualStudioVersion)'=='15.0'">10.0.17763.0</WindowsTargetPlatformVersion>
|
||||||
|
<WindowsTargetPlatformVersion Condition="'$(VisualStudioVersion)'=='16.0'">10.0</WindowsTargetPlatformVersion>
|
||||||
|
<WindowsTargetPlatformVersion Condition="'$(VisualStudioVersion)'=='17.0'">10.0</WindowsTargetPlatformVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseOfMfc>false</UseOfMfc>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='15.0'">v141_xp</PlatformToolset>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='16.0'">v142</PlatformToolset>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='17.0'">v143</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseOfMfc>false</UseOfMfc>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='15.0'">v141_xp</PlatformToolset>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='16.0'">v142</PlatformToolset>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='17.0'">v143</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseOfMfc>false</UseOfMfc>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='15.0'">v141</PlatformToolset>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='16.0'">v142</PlatformToolset>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='17.0'">v143</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseOfMfc>false</UseOfMfc>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='15.0'">v141</PlatformToolset>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='16.0'">v142</PlatformToolset>
|
||||||
|
<PlatformToolset Condition="'$(VisualStudioVersion)'=='17.0'">v143</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
|
||||||
|
<Import Project="FirebirdCommon.props" />
|
||||||
|
<Import Project="FirebirdDebug.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
|
||||||
|
<Import Project="FirebirdCommon.props" />
|
||||||
|
<Import Project="FirebirdRelease.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
|
||||||
|
<Import Project="FirebirdCommon.props" />
|
||||||
|
<Import Project="FirebirdDebug.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
|
||||||
|
<Import Project="FirebirdCommon.props" />
|
||||||
|
<Import Project="FirebirdRelease.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup>
|
||||||
|
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||||
|
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
|
||||||
|
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
|
||||||
|
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
|
||||||
|
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
|
||||||
|
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||||
|
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
|
||||||
|
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
|
||||||
|
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||||
|
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
|
||||||
|
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
|
||||||
|
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||||
|
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
|
||||||
|
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
|
||||||
|
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
|
||||||
|
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
|
||||||
|
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\temp\$(PlatformName)\$(Configuration)\firebird\</OutDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\temp\$(PlatformName)\$(Configuration)\firebird\</OutDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\..\temp\$(PlatformName)\$(Configuration)\firebird\</OutDir>
|
||||||
|
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\..\temp\$(PlatformName)\$(Configuration)\firebird\</OutDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||||
|
<PreprocessorDefinitions>NDEBUG;_CONSOLE;SUPERCLIENT;WIN32;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<BrowseInformation>true</BrowseInformation>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalDependencies>comctl32.lib;ws2_32.lib;mpr.lib;version.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<RandomizedBaseAddress>false</RandomizedBaseAddress>
|
||||||
|
<DataExecutionPrevention>
|
||||||
|
</DataExecutionPrevention>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<PreprocessorDefinitions>_DEBUG;_CONSOLE;SUPERCLIENT;WIN32;DEV_BUILD;_WINDOWS;_USRDLL;CLIENT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<BrowseInformation>true</BrowseInformation>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalDependencies>comctl32.lib;ws2_32.lib;mpr.lib;version.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<RandomizedBaseAddress>false</RandomizedBaseAddress>
|
||||||
|
<DataExecutionPrevention>
|
||||||
|
</DataExecutionPrevention>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
|
||||||
|
<PreprocessorDefinitions>NDEBUG;_CONSOLE;SUPERCLIENT;WIN32;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalDependencies>comctl32.lib;ws2_32.lib;mpr.lib;version.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<RandomizedBaseAddress>false</RandomizedBaseAddress>
|
||||||
|
<DataExecutionPrevention>
|
||||||
|
</DataExecutionPrevention>
|
||||||
|
<TargetMachine>MachineX64</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
|
<Midl>
|
||||||
|
<TargetEnvironment>X64</TargetEnvironment>
|
||||||
|
</Midl>
|
||||||
|
<ClCompile>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<PreprocessorDefinitions>_DEBUG;_CONSOLE;SUPERCLIENT;WIN32;DEV_BUILD;_WINDOWS;_USRDLL;CLIENT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<BrowseInformation>true</BrowseInformation>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalDependencies>comctl32.lib;ws2_32.lib;mpr.lib;version.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
<SubSystem>Console</SubSystem>
|
||||||
|
<RandomizedBaseAddress>false</RandomizedBaseAddress>
|
||||||
|
<DataExecutionPrevention>
|
||||||
|
</DataExecutionPrevention>
|
||||||
|
<TargetMachine>MachineX64</TargetMachine>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include="..\..\..\src\jrd\version.rc">
|
||||||
|
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\..\src\jrd</AdditionalIncludeDirectories>
|
||||||
|
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\..\src\jrd</AdditionalIncludeDirectories>
|
||||||
|
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\..\src\jrd</AdditionalIncludeDirectories>
|
||||||
|
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\..\src\jrd</AdditionalIncludeDirectories>
|
||||||
|
</ResourceCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\tests\EngineTest.cpp" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\tests\RecordNumberTest.cpp" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="alice.vcxproj">
|
||||||
|
<Project>{0d616380-1a5a-4230-a80b-021360e4e669}</Project>
|
||||||
|
<Private>true</Private>
|
||||||
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
|
<CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
|
||||||
|
<LinkLibraryDependencies>true</LinkLibraryDependencies>
|
||||||
|
<UseLibraryDependencyInputs>false</UseLibraryDependencyInputs>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="burp.vcxproj">
|
||||||
|
<Project>{d1507562-a363-4685-96af-b036f5e5e47f}</Project>
|
||||||
|
<Private>true</Private>
|
||||||
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
|
<CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
|
||||||
|
<LinkLibraryDependencies>true</LinkLibraryDependencies>
|
||||||
|
<UseLibraryDependencyInputs>false</UseLibraryDependencyInputs>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="common.vcxproj">
|
||||||
|
<Project>{15605f44-bffd-444f-ad4c-55dc9d704465}</Project>
|
||||||
|
<Private>true</Private>
|
||||||
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
|
<CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
|
||||||
|
<LinkLibraryDependencies>true</LinkLibraryDependencies>
|
||||||
|
<UseLibraryDependencyInputs>false</UseLibraryDependencyInputs>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="engine_static.vcxproj">
|
||||||
|
<Project>{b32d1b09-8161-451e-8d20-d30f26094ec0}</Project>
|
||||||
|
<Private>true</Private>
|
||||||
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
|
<CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
|
||||||
|
<LinkLibraryDependencies>true</LinkLibraryDependencies>
|
||||||
|
<UseLibraryDependencyInputs>true</UseLibraryDependencyInputs>
|
||||||
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="yvalve.vcxproj">
|
||||||
|
<Project>{4fe03933-98cd-4879-a135-fd9430087a6b}</Project>
|
||||||
|
<Private>true</Private>
|
||||||
|
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||||
|
<CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
|
||||||
|
<LinkLibraryDependencies>true</LinkLibraryDependencies>
|
||||||
|
<UseLibraryDependencyInputs>false</UseLibraryDependencyInputs>
|
||||||
|
</ProjectReference>
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
25
builds/win32/msvc15/engine_test.vcxproj.filters
Normal file
25
builds/win32/msvc15/engine_test.vcxproj.filters
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Resource files">
|
||||||
|
<UniqueIdentifier>{6be66ee9-aadf-4f6f-b900-dcde42b9a4ed}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="source">
|
||||||
|
<UniqueIdentifier>{1ebb36b8-4d58-4cf2-8594-fc2e046f927b}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include="..\..\..\src\jrd\version.rc">
|
||||||
|
<Filter>Resource files</Filter>
|
||||||
|
</ResourceCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\tests\EngineTest.cpp">
|
||||||
|
<Filter>source</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\..\src\jrd\tests\RecordNumberTest.cpp">
|
||||||
|
<Filter>source</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
13
builds/win32/run_tests.bat
Normal file
13
builds/win32/run_tests.bat
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
@echo off
|
||||||
|
|
||||||
|
@echo.
|
||||||
|
|
||||||
|
@call setenvvar.bat
|
||||||
|
@if errorlevel 1 (goto :END)
|
||||||
|
|
||||||
|
@call set_build_target.bat %*
|
||||||
|
|
||||||
|
@%FB_BIN_DIR%\common_test --log_level=all
|
||||||
|
@%FB_BIN_DIR%\engine_test --log_level=all
|
||||||
|
|
||||||
|
:END
|
@ -584,6 +584,7 @@ AC_ARG_WITH(system-re2,
|
|||||||
[RE2_BUILD=N])
|
[RE2_BUILD=N])
|
||||||
AC_SUBST(RE2_BUILD)
|
AC_SUBST(RE2_BUILD)
|
||||||
|
|
||||||
|
dnl This is currently used for internal and public (API headers) needs
|
||||||
SYSTEM_BOOST=N
|
SYSTEM_BOOST=N
|
||||||
AC_ARG_WITH(system-boost,
|
AC_ARG_WITH(system-boost,
|
||||||
[ --with-system-boost use system-wide boost library instead of embedded copy],
|
[ --with-system-boost use system-wide boost library instead of embedded copy],
|
||||||
@ -1320,6 +1321,7 @@ dnl # output
|
|||||||
mkdir -p gen/\$fb_tgt/firebird/include/firebird/impl
|
mkdir -p gen/\$fb_tgt/firebird/include/firebird/impl
|
||||||
mkdir -p gen/\$fb_tgt/firebird/lib
|
mkdir -p gen/\$fb_tgt/firebird/lib
|
||||||
mkdir -p gen/\$fb_tgt/firebird/misc
|
mkdir -p gen/\$fb_tgt/firebird/misc
|
||||||
|
mkdir -p gen/\$fb_tgt/firebird/tests
|
||||||
|
|
||||||
dnl ### TEMP ### directories for generated .cpp, .o and .d by module name
|
dnl ### TEMP ### directories for generated .cpp, .o and .d by module name
|
||||||
for src_dir in `cd src; ls -R -1 * | grep : | tr -d : | tr "\n" " "; cd ..`; do
|
for src_dir in `cd src; ls -R -1 * | grep : | tr -d : | tr "\n" " "; cd ..`; do
|
||||||
|
84
extern/boost/boost/algorithm/cxx11/all_of.hpp
vendored
Normal file
84
extern/boost/boost/algorithm/cxx11/all_of.hpp
vendored
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
/*
|
||||||
|
Copyright (c) Marshall Clow 2008-2012.
|
||||||
|
|
||||||
|
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||||
|
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*/
|
||||||
|
|
||||||
|
/// \file all_of.hpp
|
||||||
|
/// \brief Test ranges to see if all elements match a value or predicate.
|
||||||
|
/// \author Marshall Clow
|
||||||
|
|
||||||
|
#ifndef BOOST_ALGORITHM_ALL_OF_HPP
|
||||||
|
#define BOOST_ALGORITHM_ALL_OF_HPP
|
||||||
|
|
||||||
|
#include <boost/config.hpp>
|
||||||
|
#include <boost/range/begin.hpp>
|
||||||
|
#include <boost/range/end.hpp>
|
||||||
|
|
||||||
|
namespace boost { namespace algorithm {
|
||||||
|
|
||||||
|
/// \fn all_of ( InputIterator first, InputIterator last, Predicate p )
|
||||||
|
/// \return true if all elements in [first, last) satisfy the predicate 'p'
|
||||||
|
/// \note returns true on an empty range
|
||||||
|
///
|
||||||
|
/// \param first The start of the input sequence
|
||||||
|
/// \param last One past the end of the input sequence
|
||||||
|
/// \param p A predicate for testing the elements of the sequence
|
||||||
|
///
|
||||||
|
/// \note This function is part of the C++2011 standard library.
|
||||||
|
template<typename InputIterator, typename Predicate>
|
||||||
|
BOOST_CXX14_CONSTEXPR bool all_of ( InputIterator first, InputIterator last, Predicate p )
|
||||||
|
{
|
||||||
|
for ( ; first != last; ++first )
|
||||||
|
if ( !p(*first))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// \fn all_of ( const Range &r, Predicate p )
|
||||||
|
/// \return true if all elements in the range satisfy the predicate 'p'
|
||||||
|
/// \note returns true on an empty range
|
||||||
|
///
|
||||||
|
/// \param r The input range
|
||||||
|
/// \param p A predicate for testing the elements of the range
|
||||||
|
///
|
||||||
|
template<typename Range, typename Predicate>
|
||||||
|
BOOST_CXX14_CONSTEXPR bool all_of ( const Range &r, Predicate p )
|
||||||
|
{
|
||||||
|
return boost::algorithm::all_of ( boost::begin (r), boost::end (r), p );
|
||||||
|
}
|
||||||
|
|
||||||
|
/// \fn all_of_equal ( InputIterator first, InputIterator last, const T &val )
|
||||||
|
/// \return true if all elements in [first, last) are equal to 'val'
|
||||||
|
/// \note returns true on an empty range
|
||||||
|
///
|
||||||
|
/// \param first The start of the input sequence
|
||||||
|
/// \param last One past the end of the input sequence
|
||||||
|
/// \param val A value to compare against
|
||||||
|
///
|
||||||
|
template<typename InputIterator, typename T>
|
||||||
|
BOOST_CXX14_CONSTEXPR bool all_of_equal ( InputIterator first, InputIterator last, const T &val )
|
||||||
|
{
|
||||||
|
for ( ; first != last; ++first )
|
||||||
|
if ( val != *first )
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// \fn all_of_equal ( const Range &r, const T &val )
|
||||||
|
/// \return true if all elements in the range are equal to 'val'
|
||||||
|
/// \note returns true on an empty range
|
||||||
|
///
|
||||||
|
/// \param r The input range
|
||||||
|
/// \param val A value to compare against
|
||||||
|
///
|
||||||
|
template<typename Range, typename T>
|
||||||
|
BOOST_CXX14_CONSTEXPR bool all_of_equal ( const Range &r, const T &val )
|
||||||
|
{
|
||||||
|
return boost::algorithm::all_of_equal ( boost::begin (r), boost::end (r), val );
|
||||||
|
}
|
||||||
|
|
||||||
|
}} // namespace boost and algorithm
|
||||||
|
|
||||||
|
#endif // BOOST_ALGORITHM_ALL_OF_HPP
|
312
extern/boost/boost/algorithm/string/classification.hpp
vendored
Normal file
312
extern/boost/boost/algorithm/string/classification.hpp
vendored
Normal file
@ -0,0 +1,312 @@
|
|||||||
|
// Boost string_algo library classification.hpp header file ---------------------------//
|
||||||
|
|
||||||
|
// Copyright Pavol Droba 2002-2003.
|
||||||
|
//
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
|
// See http://www.boost.org/ for updates, documentation, and revision history.
|
||||||
|
|
||||||
|
#ifndef BOOST_STRING_CLASSIFICATION_HPP
|
||||||
|
#define BOOST_STRING_CLASSIFICATION_HPP
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
#include <locale>
|
||||||
|
#include <boost/range/value_type.hpp>
|
||||||
|
#include <boost/range/as_literal.hpp>
|
||||||
|
#include <boost/algorithm/string/detail/classification.hpp>
|
||||||
|
#include <boost/algorithm/string/predicate_facade.hpp>
|
||||||
|
|
||||||
|
|
||||||
|
/*! \file
|
||||||
|
Classification predicates are included in the library to give
|
||||||
|
some more convenience when using algorithms like \c trim() and \c all().
|
||||||
|
They wrap functionality of STL classification functions ( e.g. \c std::isspace() )
|
||||||
|
into generic functors.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace algorithm {
|
||||||
|
|
||||||
|
// classification functor generator -------------------------------------//
|
||||||
|
|
||||||
|
//! is_classified predicate
|
||||||
|
/*!
|
||||||
|
Construct the \c is_classified predicate. This predicate holds if the input is
|
||||||
|
of specified \c std::ctype category.
|
||||||
|
|
||||||
|
\param Type A \c std::ctype category
|
||||||
|
\param Loc A locale used for classification
|
||||||
|
\return An instance of the \c is_classified predicate
|
||||||
|
*/
|
||||||
|
inline detail::is_classifiedF
|
||||||
|
is_classified(std::ctype_base::mask Type, const std::locale& Loc=std::locale())
|
||||||
|
{
|
||||||
|
return detail::is_classifiedF(Type, Loc);
|
||||||
|
}
|
||||||
|
|
||||||
|
//! is_space predicate
|
||||||
|
/*!
|
||||||
|
Construct the \c is_classified predicate for the \c ctype_base::space category.
|
||||||
|
|
||||||
|
\param Loc A locale used for classification
|
||||||
|
\return An instance of the \c is_classified predicate
|
||||||
|
*/
|
||||||
|
inline detail::is_classifiedF
|
||||||
|
is_space(const std::locale& Loc=std::locale())
|
||||||
|
{
|
||||||
|
return detail::is_classifiedF(std::ctype_base::space, Loc);
|
||||||
|
}
|
||||||
|
|
||||||
|
//! is_alnum predicate
|
||||||
|
/*!
|
||||||
|
Construct the \c is_classified predicate for the \c ctype_base::alnum category.
|
||||||
|
|
||||||
|
\param Loc A locale used for classification
|
||||||
|
\return An instance of the \c is_classified predicate
|
||||||
|
*/
|
||||||
|
inline detail::is_classifiedF
|
||||||
|
is_alnum(const std::locale& Loc=std::locale())
|
||||||
|
{
|
||||||
|
return detail::is_classifiedF(std::ctype_base::alnum, Loc);
|
||||||
|
}
|
||||||
|
|
||||||
|
//! is_alpha predicate
|
||||||
|
/*!
|
||||||
|
Construct the \c is_classified predicate for the \c ctype_base::alpha category.
|
||||||
|
|
||||||
|
\param Loc A locale used for classification
|
||||||
|
\return An instance of the \c is_classified predicate
|
||||||
|
*/
|
||||||
|
inline detail::is_classifiedF
|
||||||
|
is_alpha(const std::locale& Loc=std::locale())
|
||||||
|
{
|
||||||
|
return detail::is_classifiedF(std::ctype_base::alpha, Loc);
|
||||||
|
}
|
||||||
|
|
||||||
|
//! is_cntrl predicate
|
||||||
|
/*!
|
||||||
|
Construct the \c is_classified predicate for the \c ctype_base::cntrl category.
|
||||||
|
|
||||||
|
\param Loc A locale used for classification
|
||||||
|
\return An instance of the \c is_classified predicate
|
||||||
|
*/
|
||||||
|
inline detail::is_classifiedF
|
||||||
|
is_cntrl(const std::locale& Loc=std::locale())
|
||||||
|
{
|
||||||
|
return detail::is_classifiedF(std::ctype_base::cntrl, Loc);
|
||||||
|
}
|
||||||
|
|
||||||
|
//! is_digit predicate
|
||||||
|
/*!
|
||||||
|
Construct the \c is_classified predicate for the \c ctype_base::digit category.
|
||||||
|
|
||||||
|
\param Loc A locale used for classification
|
||||||
|
\return An instance of the \c is_classified predicate
|
||||||
|
*/
|
||||||
|
inline detail::is_classifiedF
|
||||||
|
is_digit(const std::locale& Loc=std::locale())
|
||||||
|
{
|
||||||
|
return detail::is_classifiedF(std::ctype_base::digit, Loc);
|
||||||
|
}
|
||||||
|
|
||||||
|
//! is_graph predicate
|
||||||
|
/*!
|
||||||
|
Construct the \c is_classified predicate for the \c ctype_base::graph category.
|
||||||
|
|
||||||
|
\param Loc A locale used for classification
|
||||||
|
\return An instance of the \c is_classified predicate
|
||||||
|
*/
|
||||||
|
inline detail::is_classifiedF
|
||||||
|
is_graph(const std::locale& Loc=std::locale())
|
||||||
|
{
|
||||||
|
return detail::is_classifiedF(std::ctype_base::graph, Loc);
|
||||||
|
}
|
||||||
|
|
||||||
|
//! is_lower predicate
|
||||||
|
/*!
|
||||||
|
Construct the \c is_classified predicate for the \c ctype_base::lower category.
|
||||||
|
|
||||||
|
\param Loc A locale used for classification
|
||||||
|
\return An instance of \c is_classified predicate
|
||||||
|
*/
|
||||||
|
inline detail::is_classifiedF
|
||||||
|
is_lower(const std::locale& Loc=std::locale())
|
||||||
|
{
|
||||||
|
return detail::is_classifiedF(std::ctype_base::lower, Loc);
|
||||||
|
}
|
||||||
|
|
||||||
|
//! is_print predicate
|
||||||
|
/*!
|
||||||
|
Construct the \c is_classified predicate for the \c ctype_base::print category.
|
||||||
|
|
||||||
|
\param Loc A locale used for classification
|
||||||
|
\return An instance of the \c is_classified predicate
|
||||||
|
*/
|
||||||
|
inline detail::is_classifiedF
|
||||||
|
is_print(const std::locale& Loc=std::locale())
|
||||||
|
{
|
||||||
|
return detail::is_classifiedF(std::ctype_base::print, Loc);
|
||||||
|
}
|
||||||
|
|
||||||
|
//! is_punct predicate
|
||||||
|
/*!
|
||||||
|
Construct the \c is_classified predicate for the \c ctype_base::punct category.
|
||||||
|
|
||||||
|
\param Loc A locale used for classification
|
||||||
|
\return An instance of the \c is_classified predicate
|
||||||
|
*/
|
||||||
|
inline detail::is_classifiedF
|
||||||
|
is_punct(const std::locale& Loc=std::locale())
|
||||||
|
{
|
||||||
|
return detail::is_classifiedF(std::ctype_base::punct, Loc);
|
||||||
|
}
|
||||||
|
|
||||||
|
//! is_upper predicate
|
||||||
|
/*!
|
||||||
|
Construct the \c is_classified predicate for the \c ctype_base::upper category.
|
||||||
|
|
||||||
|
\param Loc A locale used for classification
|
||||||
|
\return An instance of the \c is_classified predicate
|
||||||
|
*/
|
||||||
|
inline detail::is_classifiedF
|
||||||
|
is_upper(const std::locale& Loc=std::locale())
|
||||||
|
{
|
||||||
|
return detail::is_classifiedF(std::ctype_base::upper, Loc);
|
||||||
|
}
|
||||||
|
|
||||||
|
//! is_xdigit predicate
|
||||||
|
/*!
|
||||||
|
Construct the \c is_classified predicate for the \c ctype_base::xdigit category.
|
||||||
|
|
||||||
|
\param Loc A locale used for classification
|
||||||
|
\return An instance of the \c is_classified predicate
|
||||||
|
*/
|
||||||
|
inline detail::is_classifiedF
|
||||||
|
is_xdigit(const std::locale& Loc=std::locale())
|
||||||
|
{
|
||||||
|
return detail::is_classifiedF(std::ctype_base::xdigit, Loc);
|
||||||
|
}
|
||||||
|
|
||||||
|
//! is_any_of predicate
|
||||||
|
/*!
|
||||||
|
Construct the \c is_any_of predicate. The predicate holds if the input
|
||||||
|
is included in the specified set of characters.
|
||||||
|
|
||||||
|
\param Set A set of characters to be recognized
|
||||||
|
\return An instance of the \c is_any_of predicate
|
||||||
|
*/
|
||||||
|
template<typename RangeT>
|
||||||
|
inline detail::is_any_ofF<
|
||||||
|
BOOST_STRING_TYPENAME range_value<RangeT>::type>
|
||||||
|
is_any_of( const RangeT& Set )
|
||||||
|
{
|
||||||
|
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_set(boost::as_literal(Set));
|
||||||
|
return detail::is_any_ofF<BOOST_STRING_TYPENAME range_value<RangeT>::type>(lit_set);
|
||||||
|
}
|
||||||
|
|
||||||
|
//! is_from_range predicate
|
||||||
|
/*!
|
||||||
|
Construct the \c is_from_range predicate. The predicate holds if the input
|
||||||
|
is included in the specified range. (i.e. From <= Ch <= To )
|
||||||
|
|
||||||
|
\param From The start of the range
|
||||||
|
\param To The end of the range
|
||||||
|
\return An instance of the \c is_from_range predicate
|
||||||
|
*/
|
||||||
|
template<typename CharT>
|
||||||
|
inline detail::is_from_rangeF<CharT> is_from_range(CharT From, CharT To)
|
||||||
|
{
|
||||||
|
return detail::is_from_rangeF<CharT>(From,To);
|
||||||
|
}
|
||||||
|
|
||||||
|
// predicate combinators ---------------------------------------------------//
|
||||||
|
|
||||||
|
//! predicate 'and' composition predicate
|
||||||
|
/*!
|
||||||
|
Construct the \c class_and predicate. This predicate can be used
|
||||||
|
to logically combine two classification predicates. \c class_and holds,
|
||||||
|
if both predicates return true.
|
||||||
|
|
||||||
|
\param Pred1 The first predicate
|
||||||
|
\param Pred2 The second predicate
|
||||||
|
\return An instance of the \c class_and predicate
|
||||||
|
*/
|
||||||
|
template<typename Pred1T, typename Pred2T>
|
||||||
|
inline detail::pred_andF<Pred1T, Pred2T>
|
||||||
|
operator&&(
|
||||||
|
const predicate_facade<Pred1T>& Pred1,
|
||||||
|
const predicate_facade<Pred2T>& Pred2 )
|
||||||
|
{
|
||||||
|
// Doing the static_cast with the pointer instead of the reference
|
||||||
|
// is a workaround for some compilers which have problems with
|
||||||
|
// static_cast's of template references, i.e. CW8. /grafik/
|
||||||
|
return detail::pred_andF<Pred1T,Pred2T>(
|
||||||
|
*static_cast<const Pred1T*>(&Pred1),
|
||||||
|
*static_cast<const Pred2T*>(&Pred2) );
|
||||||
|
}
|
||||||
|
|
||||||
|
//! predicate 'or' composition predicate
|
||||||
|
/*!
|
||||||
|
Construct the \c class_or predicate. This predicate can be used
|
||||||
|
to logically combine two classification predicates. \c class_or holds,
|
||||||
|
if one of the predicates return true.
|
||||||
|
|
||||||
|
\param Pred1 The first predicate
|
||||||
|
\param Pred2 The second predicate
|
||||||
|
\return An instance of the \c class_or predicate
|
||||||
|
*/
|
||||||
|
template<typename Pred1T, typename Pred2T>
|
||||||
|
inline detail::pred_orF<Pred1T, Pred2T>
|
||||||
|
operator||(
|
||||||
|
const predicate_facade<Pred1T>& Pred1,
|
||||||
|
const predicate_facade<Pred2T>& Pred2 )
|
||||||
|
{
|
||||||
|
// Doing the static_cast with the pointer instead of the reference
|
||||||
|
// is a workaround for some compilers which have problems with
|
||||||
|
// static_cast's of template references, i.e. CW8. /grafik/
|
||||||
|
return detail::pred_orF<Pred1T,Pred2T>(
|
||||||
|
*static_cast<const Pred1T*>(&Pred1),
|
||||||
|
*static_cast<const Pred2T*>(&Pred2));
|
||||||
|
}
|
||||||
|
|
||||||
|
//! predicate negation operator
|
||||||
|
/*!
|
||||||
|
Construct the \c class_not predicate. This predicate represents a negation.
|
||||||
|
\c class_or holds if of the predicates return false.
|
||||||
|
|
||||||
|
\param Pred The predicate to be negated
|
||||||
|
\return An instance of the \c class_not predicate
|
||||||
|
*/
|
||||||
|
template<typename PredT>
|
||||||
|
inline detail::pred_notF<PredT>
|
||||||
|
operator!( const predicate_facade<PredT>& Pred )
|
||||||
|
{
|
||||||
|
// Doing the static_cast with the pointer instead of the reference
|
||||||
|
// is a workaround for some compilers which have problems with
|
||||||
|
// static_cast's of template references, i.e. CW8. /grafik/
|
||||||
|
return detail::pred_notF<PredT>(*static_cast<const PredT*>(&Pred));
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace algorithm
|
||||||
|
|
||||||
|
// pull names to the boost namespace
|
||||||
|
using algorithm::is_classified;
|
||||||
|
using algorithm::is_space;
|
||||||
|
using algorithm::is_alnum;
|
||||||
|
using algorithm::is_alpha;
|
||||||
|
using algorithm::is_cntrl;
|
||||||
|
using algorithm::is_digit;
|
||||||
|
using algorithm::is_graph;
|
||||||
|
using algorithm::is_lower;
|
||||||
|
using algorithm::is_upper;
|
||||||
|
using algorithm::is_print;
|
||||||
|
using algorithm::is_punct;
|
||||||
|
using algorithm::is_xdigit;
|
||||||
|
using algorithm::is_any_of;
|
||||||
|
using algorithm::is_from_range;
|
||||||
|
|
||||||
|
} // namespace boost
|
||||||
|
|
||||||
|
#endif // BOOST_STRING_PREDICATE_HPP
|
199
extern/boost/boost/algorithm/string/compare.hpp
vendored
Normal file
199
extern/boost/boost/algorithm/string/compare.hpp
vendored
Normal file
@ -0,0 +1,199 @@
|
|||||||
|
// Boost string_algo library compare.hpp header file -------------------------//
|
||||||
|
|
||||||
|
// Copyright Pavol Droba 2002-2006.
|
||||||
|
//
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
|
// See http://www.boost.org/ for updates, documentation, and revision history.
|
||||||
|
|
||||||
|
#ifndef BOOST_STRING_COMPARE_HPP
|
||||||
|
#define BOOST_STRING_COMPARE_HPP
|
||||||
|
|
||||||
|
#include <boost/algorithm/string/config.hpp>
|
||||||
|
#include <locale>
|
||||||
|
|
||||||
|
/*! \file
|
||||||
|
Defines element comparison predicates. Many algorithms in this library can
|
||||||
|
take an additional argument with a predicate used to compare elements.
|
||||||
|
This makes it possible, for instance, to have case insensitive versions
|
||||||
|
of the algorithms.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace algorithm {
|
||||||
|
|
||||||
|
// is_equal functor -----------------------------------------------//
|
||||||
|
|
||||||
|
//! is_equal functor
|
||||||
|
/*!
|
||||||
|
Standard STL equal_to only handle comparison between arguments
|
||||||
|
of the same type. This is a less restrictive version which wraps operator ==.
|
||||||
|
*/
|
||||||
|
struct is_equal
|
||||||
|
{
|
||||||
|
//! Function operator
|
||||||
|
/*!
|
||||||
|
Compare two operands for equality
|
||||||
|
*/
|
||||||
|
template< typename T1, typename T2 >
|
||||||
|
bool operator()( const T1& Arg1, const T2& Arg2 ) const
|
||||||
|
{
|
||||||
|
return Arg1==Arg2;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//! case insensitive version of is_equal
|
||||||
|
/*!
|
||||||
|
Case insensitive comparison predicate. Comparison is done using
|
||||||
|
specified locales.
|
||||||
|
*/
|
||||||
|
struct is_iequal
|
||||||
|
{
|
||||||
|
//! Constructor
|
||||||
|
/*!
|
||||||
|
\param Loc locales used for comparison
|
||||||
|
*/
|
||||||
|
is_iequal( const std::locale& Loc=std::locale() ) :
|
||||||
|
m_Loc( Loc ) {}
|
||||||
|
|
||||||
|
//! Function operator
|
||||||
|
/*!
|
||||||
|
Compare two operands. Case is ignored.
|
||||||
|
*/
|
||||||
|
template< typename T1, typename T2 >
|
||||||
|
bool operator()( const T1& Arg1, const T2& Arg2 ) const
|
||||||
|
{
|
||||||
|
#if defined(BOOST_BORLANDC) && (BOOST_BORLANDC >= 0x560) && (BOOST_BORLANDC <= 0x564) && !defined(_USE_OLD_RW_STL)
|
||||||
|
return std::toupper(Arg1)==std::toupper(Arg2);
|
||||||
|
#else
|
||||||
|
return std::toupper<T1>(Arg1,m_Loc)==std::toupper<T2>(Arg2,m_Loc);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::locale m_Loc;
|
||||||
|
};
|
||||||
|
|
||||||
|
// is_less functor -----------------------------------------------//
|
||||||
|
|
||||||
|
//! is_less functor
|
||||||
|
/*!
|
||||||
|
Convenient version of standard std::less. Operation is templated, therefore it is
|
||||||
|
not required to specify the exact types upon the construction
|
||||||
|
*/
|
||||||
|
struct is_less
|
||||||
|
{
|
||||||
|
//! Functor operation
|
||||||
|
/*!
|
||||||
|
Compare two operands using > operator
|
||||||
|
*/
|
||||||
|
template< typename T1, typename T2 >
|
||||||
|
bool operator()( const T1& Arg1, const T2& Arg2 ) const
|
||||||
|
{
|
||||||
|
return Arg1<Arg2;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//! case insensitive version of is_less
|
||||||
|
/*!
|
||||||
|
Case insensitive comparison predicate. Comparison is done using
|
||||||
|
specified locales.
|
||||||
|
*/
|
||||||
|
struct is_iless
|
||||||
|
{
|
||||||
|
//! Constructor
|
||||||
|
/*!
|
||||||
|
\param Loc locales used for comparison
|
||||||
|
*/
|
||||||
|
is_iless( const std::locale& Loc=std::locale() ) :
|
||||||
|
m_Loc( Loc ) {}
|
||||||
|
|
||||||
|
//! Function operator
|
||||||
|
/*!
|
||||||
|
Compare two operands. Case is ignored.
|
||||||
|
*/
|
||||||
|
template< typename T1, typename T2 >
|
||||||
|
bool operator()( const T1& Arg1, const T2& Arg2 ) const
|
||||||
|
{
|
||||||
|
#if defined(BOOST_BORLANDC) && (BOOST_BORLANDC >= 0x560) && (BOOST_BORLANDC <= 0x564) && !defined(_USE_OLD_RW_STL)
|
||||||
|
return std::toupper(Arg1)<std::toupper(Arg2);
|
||||||
|
#else
|
||||||
|
return std::toupper<T1>(Arg1,m_Loc)<std::toupper<T2>(Arg2,m_Loc);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::locale m_Loc;
|
||||||
|
};
|
||||||
|
|
||||||
|
// is_not_greater functor -----------------------------------------------//
|
||||||
|
|
||||||
|
//! is_not_greater functor
|
||||||
|
/*!
|
||||||
|
Convenient version of standard std::not_greater_to. Operation is templated, therefore it is
|
||||||
|
not required to specify the exact types upon the construction
|
||||||
|
*/
|
||||||
|
struct is_not_greater
|
||||||
|
{
|
||||||
|
//! Functor operation
|
||||||
|
/*!
|
||||||
|
Compare two operands using > operator
|
||||||
|
*/
|
||||||
|
template< typename T1, typename T2 >
|
||||||
|
bool operator()( const T1& Arg1, const T2& Arg2 ) const
|
||||||
|
{
|
||||||
|
return Arg1<=Arg2;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//! case insensitive version of is_not_greater
|
||||||
|
/*!
|
||||||
|
Case insensitive comparison predicate. Comparison is done using
|
||||||
|
specified locales.
|
||||||
|
*/
|
||||||
|
struct is_not_igreater
|
||||||
|
{
|
||||||
|
//! Constructor
|
||||||
|
/*!
|
||||||
|
\param Loc locales used for comparison
|
||||||
|
*/
|
||||||
|
is_not_igreater( const std::locale& Loc=std::locale() ) :
|
||||||
|
m_Loc( Loc ) {}
|
||||||
|
|
||||||
|
//! Function operator
|
||||||
|
/*!
|
||||||
|
Compare two operands. Case is ignored.
|
||||||
|
*/
|
||||||
|
template< typename T1, typename T2 >
|
||||||
|
bool operator()( const T1& Arg1, const T2& Arg2 ) const
|
||||||
|
{
|
||||||
|
#if defined(BOOST_BORLANDC) && (BOOST_BORLANDC >= 0x560) && (BOOST_BORLANDC <= 0x564) && !defined(_USE_OLD_RW_STL)
|
||||||
|
return std::toupper(Arg1)<=std::toupper(Arg2);
|
||||||
|
#else
|
||||||
|
return std::toupper<T1>(Arg1,m_Loc)<=std::toupper<T2>(Arg2,m_Loc);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::locale m_Loc;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace algorithm
|
||||||
|
|
||||||
|
// pull names to the boost namespace
|
||||||
|
using algorithm::is_equal;
|
||||||
|
using algorithm::is_iequal;
|
||||||
|
using algorithm::is_less;
|
||||||
|
using algorithm::is_iless;
|
||||||
|
using algorithm::is_not_greater;
|
||||||
|
using algorithm::is_not_igreater;
|
||||||
|
|
||||||
|
} // namespace boost
|
||||||
|
|
||||||
|
|
||||||
|
#endif // BOOST_STRING_COMPARE_HPP
|
83
extern/boost/boost/algorithm/string/concept.hpp
vendored
Normal file
83
extern/boost/boost/algorithm/string/concept.hpp
vendored
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
// Boost string_algo library concept.hpp header file ---------------------------//
|
||||||
|
|
||||||
|
// Copyright Pavol Droba 2002-2003.
|
||||||
|
//
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
|
// See http://www.boost.org/ for updates, documentation, and revision history.
|
||||||
|
|
||||||
|
#ifndef BOOST_STRING_CONCEPT_HPP
|
||||||
|
#define BOOST_STRING_CONCEPT_HPP
|
||||||
|
|
||||||
|
#include <boost/concept_check.hpp>
|
||||||
|
#include <boost/range/iterator_range_core.hpp>
|
||||||
|
#include <boost/range/begin.hpp>
|
||||||
|
#include <boost/range/end.hpp>
|
||||||
|
|
||||||
|
/*! \file
|
||||||
|
Defines concepts used in string_algo library
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace algorithm {
|
||||||
|
|
||||||
|
//! Finder concept
|
||||||
|
/*!
|
||||||
|
Defines the Finder concept. Finder is a functor which selects
|
||||||
|
an arbitrary part of a string. Search is performed on
|
||||||
|
the range specified by starting and ending iterators.
|
||||||
|
|
||||||
|
Result of the find operation must be convertible to iterator_range.
|
||||||
|
*/
|
||||||
|
template<typename FinderT, typename IteratorT>
|
||||||
|
struct FinderConcept
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
typedef iterator_range<IteratorT> range;
|
||||||
|
public:
|
||||||
|
void constraints()
|
||||||
|
{
|
||||||
|
// Operation
|
||||||
|
r=(*pF)(i,i);
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
range r;
|
||||||
|
IteratorT i;
|
||||||
|
FinderT* pF;
|
||||||
|
}; // Finder_concept
|
||||||
|
|
||||||
|
|
||||||
|
//! Formatter concept
|
||||||
|
/*!
|
||||||
|
Defines the Formatter concept. Formatter is a functor, which
|
||||||
|
takes a result from a finder operation and transforms it
|
||||||
|
in a specific way.
|
||||||
|
|
||||||
|
Result must be a container supported by container_traits,
|
||||||
|
or a reference to it.
|
||||||
|
*/
|
||||||
|
template<typename FormatterT, typename FinderT, typename IteratorT>
|
||||||
|
struct FormatterConcept
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void constraints()
|
||||||
|
{
|
||||||
|
// Operation
|
||||||
|
::boost::begin((*pFo)( (*pF)(i,i) ));
|
||||||
|
::boost::end((*pFo)( (*pF)(i,i) ));
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
IteratorT i;
|
||||||
|
FinderT* pF;
|
||||||
|
FormatterT *pFo;
|
||||||
|
}; // FormatterConcept;
|
||||||
|
|
||||||
|
} // namespace algorithm
|
||||||
|
} // namespace boost
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // BOOST_STRING_CONCEPT_HPP
|
28
extern/boost/boost/algorithm/string/config.hpp
vendored
Normal file
28
extern/boost/boost/algorithm/string/config.hpp
vendored
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
// Boost string_algo library config.hpp header file ---------------------------//
|
||||||
|
|
||||||
|
// Copyright Pavol Droba 2002-2003.
|
||||||
|
//
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
|
// See http://www.boost.org/ for updates, documentation, and revision history.
|
||||||
|
|
||||||
|
#ifndef BOOST_STRING_CONFIG_HPP
|
||||||
|
#define BOOST_STRING_CONFIG_HPP
|
||||||
|
|
||||||
|
#include <boost/config.hpp>
|
||||||
|
#include <boost/detail/workaround.hpp>
|
||||||
|
|
||||||
|
#ifdef BOOST_STRING_DEDUCED_TYPENAME
|
||||||
|
# error "macro already defined!"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define BOOST_STRING_TYPENAME BOOST_DEDUCED_TYPENAME
|
||||||
|
|
||||||
|
// Metrowerks workaround
|
||||||
|
#if BOOST_WORKAROUND(__MWERKS__, <= 0x3003) // 8.x
|
||||||
|
#pragma parse_func_templ off
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // BOOST_STRING_CONFIG_HPP
|
36
extern/boost/boost/algorithm/string/constants.hpp
vendored
Normal file
36
extern/boost/boost/algorithm/string/constants.hpp
vendored
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
// Boost string_algo library constants.hpp header file ---------------------------//
|
||||||
|
|
||||||
|
// Copyright Pavol Droba 2002-2003.
|
||||||
|
//
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
|
// See http://www.boost.org/ for updates, documentation, and revision history.
|
||||||
|
|
||||||
|
#ifndef BOOST_STRING_CONSTANTS_HPP
|
||||||
|
#define BOOST_STRING_CONSTANTS_HPP
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace algorithm {
|
||||||
|
|
||||||
|
//! Token compression mode
|
||||||
|
/*!
|
||||||
|
Specifies token compression mode for the token_finder.
|
||||||
|
*/
|
||||||
|
enum token_compress_mode_type
|
||||||
|
{
|
||||||
|
token_compress_on, //!< Compress adjacent tokens
|
||||||
|
token_compress_off //!< Do not compress adjacent tokens
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace algorithm
|
||||||
|
|
||||||
|
// pull the names to the boost namespace
|
||||||
|
using algorithm::token_compress_on;
|
||||||
|
using algorithm::token_compress_off;
|
||||||
|
|
||||||
|
} // namespace boost
|
||||||
|
|
||||||
|
#endif // BOOST_STRING_CONSTANTS_HPP
|
||||||
|
|
355
extern/boost/boost/algorithm/string/detail/classification.hpp
vendored
Normal file
355
extern/boost/boost/algorithm/string/detail/classification.hpp
vendored
Normal file
@ -0,0 +1,355 @@
|
|||||||
|
// Boost string_algo library classification.hpp header file ---------------------------//
|
||||||
|
|
||||||
|
// Copyright Pavol Droba 2002-2003.
|
||||||
|
//
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
|
// See http://www.boost.org/ for updates, documentation, and revision history.
|
||||||
|
|
||||||
|
#ifndef BOOST_STRING_CLASSIFICATION_DETAIL_HPP
|
||||||
|
#define BOOST_STRING_CLASSIFICATION_DETAIL_HPP
|
||||||
|
|
||||||
|
#include <boost/algorithm/string/config.hpp>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <cstring>
|
||||||
|
#include <functional>
|
||||||
|
#include <locale>
|
||||||
|
|
||||||
|
#include <boost/range/begin.hpp>
|
||||||
|
#include <boost/range/distance.hpp>
|
||||||
|
#include <boost/range/end.hpp>
|
||||||
|
|
||||||
|
#include <boost/algorithm/string/predicate_facade.hpp>
|
||||||
|
#include <boost/type_traits/remove_const.hpp>
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace algorithm {
|
||||||
|
namespace detail {
|
||||||
|
|
||||||
|
// classification functors -----------------------------------------------//
|
||||||
|
|
||||||
|
// is_classified functor
|
||||||
|
struct is_classifiedF :
|
||||||
|
public predicate_facade<is_classifiedF>
|
||||||
|
{
|
||||||
|
// Boost.ResultOf support
|
||||||
|
typedef bool result_type;
|
||||||
|
|
||||||
|
// Constructor from a locale
|
||||||
|
is_classifiedF(std::ctype_base::mask Type, std::locale const & Loc = std::locale()) :
|
||||||
|
m_Type(Type), m_Locale(Loc) {}
|
||||||
|
// Operation
|
||||||
|
template<typename CharT>
|
||||||
|
bool operator()( CharT Ch ) const
|
||||||
|
{
|
||||||
|
return std::use_facet< std::ctype<CharT> >(m_Locale).is( m_Type, Ch );
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(BOOST_BORLANDC) && (BOOST_BORLANDC >= 0x560) && (BOOST_BORLANDC <= 0x582) && !defined(_USE_OLD_RW_STL)
|
||||||
|
template<>
|
||||||
|
bool operator()( char const Ch ) const
|
||||||
|
{
|
||||||
|
return std::use_facet< std::ctype<char> >(m_Locale).is( m_Type, Ch );
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::ctype_base::mask m_Type;
|
||||||
|
std::locale m_Locale;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// is_any_of functor
|
||||||
|
/*
|
||||||
|
returns true if the value is from the specified set
|
||||||
|
*/
|
||||||
|
template<typename CharT>
|
||||||
|
struct is_any_ofF :
|
||||||
|
public predicate_facade<is_any_ofF<CharT> >
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
// set cannot operate on const value-type
|
||||||
|
typedef typename ::boost::remove_const<CharT>::type set_value_type;
|
||||||
|
|
||||||
|
public:
|
||||||
|
// Boost.ResultOf support
|
||||||
|
typedef bool result_type;
|
||||||
|
|
||||||
|
// Constructor
|
||||||
|
template<typename RangeT>
|
||||||
|
is_any_ofF( const RangeT& Range ) : m_Size(0)
|
||||||
|
{
|
||||||
|
// Prepare storage
|
||||||
|
m_Storage.m_dynSet=0;
|
||||||
|
|
||||||
|
std::size_t Size=::boost::distance(Range);
|
||||||
|
m_Size=Size;
|
||||||
|
set_value_type* Storage=0;
|
||||||
|
|
||||||
|
if(use_fixed_storage(m_Size))
|
||||||
|
{
|
||||||
|
// Use fixed storage
|
||||||
|
Storage=&m_Storage.m_fixSet[0];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Use dynamic storage
|
||||||
|
m_Storage.m_dynSet=new set_value_type[m_Size];
|
||||||
|
Storage=m_Storage.m_dynSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use fixed storage
|
||||||
|
::std::copy(::boost::begin(Range), ::boost::end(Range), Storage);
|
||||||
|
::std::sort(Storage, Storage+m_Size);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Copy constructor
|
||||||
|
is_any_ofF(const is_any_ofF& Other) : m_Size(Other.m_Size)
|
||||||
|
{
|
||||||
|
// Prepare storage
|
||||||
|
m_Storage.m_dynSet=0;
|
||||||
|
const set_value_type* SrcStorage=0;
|
||||||
|
set_value_type* DestStorage=0;
|
||||||
|
|
||||||
|
if(use_fixed_storage(m_Size))
|
||||||
|
{
|
||||||
|
// Use fixed storage
|
||||||
|
DestStorage=&m_Storage.m_fixSet[0];
|
||||||
|
SrcStorage=&Other.m_Storage.m_fixSet[0];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Use dynamic storage
|
||||||
|
m_Storage.m_dynSet=new set_value_type[m_Size];
|
||||||
|
DestStorage=m_Storage.m_dynSet;
|
||||||
|
SrcStorage=Other.m_Storage.m_dynSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use fixed storage
|
||||||
|
::std::memcpy(DestStorage, SrcStorage, sizeof(set_value_type)*m_Size);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Destructor
|
||||||
|
~is_any_ofF()
|
||||||
|
{
|
||||||
|
if(!use_fixed_storage(m_Size) && m_Storage.m_dynSet!=0)
|
||||||
|
{
|
||||||
|
delete [] m_Storage.m_dynSet;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Assignment
|
||||||
|
is_any_ofF& operator=(const is_any_ofF& Other)
|
||||||
|
{
|
||||||
|
// Handle self assignment
|
||||||
|
if(this==&Other) return *this;
|
||||||
|
|
||||||
|
// Prepare storage
|
||||||
|
const set_value_type* SrcStorage;
|
||||||
|
set_value_type* DestStorage;
|
||||||
|
|
||||||
|
if(use_fixed_storage(Other.m_Size))
|
||||||
|
{
|
||||||
|
// Use fixed storage
|
||||||
|
DestStorage=&m_Storage.m_fixSet[0];
|
||||||
|
SrcStorage=&Other.m_Storage.m_fixSet[0];
|
||||||
|
|
||||||
|
// Delete old storage if was present
|
||||||
|
if(!use_fixed_storage(m_Size) && m_Storage.m_dynSet!=0)
|
||||||
|
{
|
||||||
|
delete [] m_Storage.m_dynSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set new size
|
||||||
|
m_Size=Other.m_Size;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Other uses dynamic storage
|
||||||
|
SrcStorage=Other.m_Storage.m_dynSet;
|
||||||
|
|
||||||
|
// Check what kind of storage are we using right now
|
||||||
|
if(use_fixed_storage(m_Size))
|
||||||
|
{
|
||||||
|
// Using fixed storage, allocate new
|
||||||
|
set_value_type* pTemp=new set_value_type[Other.m_Size];
|
||||||
|
DestStorage=pTemp;
|
||||||
|
m_Storage.m_dynSet=pTemp;
|
||||||
|
m_Size=Other.m_Size;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Using dynamic storage, check if can reuse
|
||||||
|
if(m_Storage.m_dynSet!=0 && m_Size>=Other.m_Size && m_Size<Other.m_Size*2)
|
||||||
|
{
|
||||||
|
// Reuse the current storage
|
||||||
|
DestStorage=m_Storage.m_dynSet;
|
||||||
|
m_Size=Other.m_Size;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Allocate the new one
|
||||||
|
set_value_type* pTemp=new set_value_type[Other.m_Size];
|
||||||
|
DestStorage=pTemp;
|
||||||
|
|
||||||
|
// Delete old storage if necessary
|
||||||
|
if(m_Storage.m_dynSet!=0)
|
||||||
|
{
|
||||||
|
delete [] m_Storage.m_dynSet;
|
||||||
|
}
|
||||||
|
// Store the new storage
|
||||||
|
m_Storage.m_dynSet=pTemp;
|
||||||
|
// Set new size
|
||||||
|
m_Size=Other.m_Size;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Copy the data
|
||||||
|
::std::memcpy(DestStorage, SrcStorage, sizeof(set_value_type)*m_Size);
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Operation
|
||||||
|
template<typename Char2T>
|
||||||
|
bool operator()( Char2T Ch ) const
|
||||||
|
{
|
||||||
|
const set_value_type* Storage=
|
||||||
|
(use_fixed_storage(m_Size))
|
||||||
|
? &m_Storage.m_fixSet[0]
|
||||||
|
: m_Storage.m_dynSet;
|
||||||
|
|
||||||
|
return ::std::binary_search(Storage, Storage+m_Size, Ch);
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
// check if the size is eligible for fixed storage
|
||||||
|
static bool use_fixed_storage(std::size_t size)
|
||||||
|
{
|
||||||
|
return size<=sizeof(set_value_type*)*2;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
// storage
|
||||||
|
// The actual used storage is selected on the type
|
||||||
|
union
|
||||||
|
{
|
||||||
|
set_value_type* m_dynSet;
|
||||||
|
set_value_type m_fixSet[sizeof(set_value_type*)*2];
|
||||||
|
}
|
||||||
|
m_Storage;
|
||||||
|
|
||||||
|
// storage size
|
||||||
|
::std::size_t m_Size;
|
||||||
|
};
|
||||||
|
|
||||||
|
// is_from_range functor
|
||||||
|
/*
|
||||||
|
returns true if the value is from the specified range.
|
||||||
|
(i.e. x>=From && x>=To)
|
||||||
|
*/
|
||||||
|
template<typename CharT>
|
||||||
|
struct is_from_rangeF :
|
||||||
|
public predicate_facade< is_from_rangeF<CharT> >
|
||||||
|
{
|
||||||
|
// Boost.ResultOf support
|
||||||
|
typedef bool result_type;
|
||||||
|
|
||||||
|
// Constructor
|
||||||
|
is_from_rangeF( CharT From, CharT To ) : m_From(From), m_To(To) {}
|
||||||
|
|
||||||
|
// Operation
|
||||||
|
template<typename Char2T>
|
||||||
|
bool operator()( Char2T Ch ) const
|
||||||
|
{
|
||||||
|
return ( m_From <= Ch ) && ( Ch <= m_To );
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
CharT m_From;
|
||||||
|
CharT m_To;
|
||||||
|
};
|
||||||
|
|
||||||
|
// class_and composition predicate
|
||||||
|
template<typename Pred1T, typename Pred2T>
|
||||||
|
struct pred_andF :
|
||||||
|
public predicate_facade< pred_andF<Pred1T,Pred2T> >
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
// Boost.ResultOf support
|
||||||
|
typedef bool result_type;
|
||||||
|
|
||||||
|
// Constructor
|
||||||
|
pred_andF( Pred1T Pred1, Pred2T Pred2 ) :
|
||||||
|
m_Pred1(Pred1), m_Pred2(Pred2) {}
|
||||||
|
|
||||||
|
// Operation
|
||||||
|
template<typename CharT>
|
||||||
|
bool operator()( CharT Ch ) const
|
||||||
|
{
|
||||||
|
return m_Pred1(Ch) && m_Pred2(Ch);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
Pred1T m_Pred1;
|
||||||
|
Pred2T m_Pred2;
|
||||||
|
};
|
||||||
|
|
||||||
|
// class_or composition predicate
|
||||||
|
template<typename Pred1T, typename Pred2T>
|
||||||
|
struct pred_orF :
|
||||||
|
public predicate_facade< pred_orF<Pred1T,Pred2T> >
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// Boost.ResultOf support
|
||||||
|
typedef bool result_type;
|
||||||
|
|
||||||
|
// Constructor
|
||||||
|
pred_orF( Pred1T Pred1, Pred2T Pred2 ) :
|
||||||
|
m_Pred1(Pred1), m_Pred2(Pred2) {}
|
||||||
|
|
||||||
|
// Operation
|
||||||
|
template<typename CharT>
|
||||||
|
bool operator()( CharT Ch ) const
|
||||||
|
{
|
||||||
|
return m_Pred1(Ch) || m_Pred2(Ch);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
Pred1T m_Pred1;
|
||||||
|
Pred2T m_Pred2;
|
||||||
|
};
|
||||||
|
|
||||||
|
// class_not composition predicate
|
||||||
|
template< typename PredT >
|
||||||
|
struct pred_notF :
|
||||||
|
public predicate_facade< pred_notF<PredT> >
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// Boost.ResultOf support
|
||||||
|
typedef bool result_type;
|
||||||
|
|
||||||
|
// Constructor
|
||||||
|
pred_notF( PredT Pred ) : m_Pred(Pred) {}
|
||||||
|
|
||||||
|
// Operation
|
||||||
|
template<typename CharT>
|
||||||
|
bool operator()( CharT Ch ) const
|
||||||
|
{
|
||||||
|
return !m_Pred(Ch);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
PredT m_Pred;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace detail
|
||||||
|
} // namespace algorithm
|
||||||
|
} // namespace boost
|
||||||
|
|
||||||
|
|
||||||
|
#endif // BOOST_STRING_CLASSIFICATION_DETAIL_HPP
|
87
extern/boost/boost/algorithm/string/detail/find_iterator.hpp
vendored
Normal file
87
extern/boost/boost/algorithm/string/detail/find_iterator.hpp
vendored
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
// Boost string_algo library find_iterator.hpp header file ---------------------------//
|
||||||
|
|
||||||
|
// Copyright Pavol Droba 2002-2003.
|
||||||
|
//
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
|
// See http://www.boost.org/ for updates, documentation, and revision history.
|
||||||
|
|
||||||
|
#ifndef BOOST_STRING_FIND_ITERATOR_DETAIL_HPP
|
||||||
|
#define BOOST_STRING_FIND_ITERATOR_DETAIL_HPP
|
||||||
|
|
||||||
|
#include <boost/algorithm/string/config.hpp>
|
||||||
|
#include <boost/range/iterator_range_core.hpp>
|
||||||
|
#include <boost/iterator/iterator_facade.hpp>
|
||||||
|
#include <boost/iterator/iterator_categories.hpp>
|
||||||
|
#include <boost/function.hpp>
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace algorithm {
|
||||||
|
namespace detail {
|
||||||
|
|
||||||
|
// find_iterator base -----------------------------------------------//
|
||||||
|
|
||||||
|
// Find iterator base
|
||||||
|
template<typename IteratorT>
|
||||||
|
class find_iterator_base
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
// typedefs
|
||||||
|
typedef IteratorT input_iterator_type;
|
||||||
|
typedef iterator_range<IteratorT> match_type;
|
||||||
|
typedef function2<
|
||||||
|
match_type,
|
||||||
|
input_iterator_type,
|
||||||
|
input_iterator_type> finder_type;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// Protected construction/destruction
|
||||||
|
|
||||||
|
// Default constructor
|
||||||
|
find_iterator_base() {}
|
||||||
|
// Copy construction
|
||||||
|
find_iterator_base( const find_iterator_base& Other ) :
|
||||||
|
m_Finder(Other.m_Finder) {}
|
||||||
|
|
||||||
|
// Constructor
|
||||||
|
template<typename FinderT>
|
||||||
|
find_iterator_base( FinderT Finder, int ) :
|
||||||
|
m_Finder(Finder) {}
|
||||||
|
|
||||||
|
// Destructor
|
||||||
|
~find_iterator_base() {}
|
||||||
|
|
||||||
|
// Find operation
|
||||||
|
match_type do_find(
|
||||||
|
input_iterator_type Begin,
|
||||||
|
input_iterator_type End ) const
|
||||||
|
{
|
||||||
|
if (!m_Finder.empty())
|
||||||
|
{
|
||||||
|
return m_Finder(Begin,End);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return match_type(End,End);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check
|
||||||
|
bool is_null() const
|
||||||
|
{
|
||||||
|
return m_Finder.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
// Finder
|
||||||
|
finder_type m_Finder;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace detail
|
||||||
|
} // namespace algorithm
|
||||||
|
} // namespace boost
|
||||||
|
|
||||||
|
|
||||||
|
#endif // BOOST_STRING_FIND_ITERATOR_DETAIL_HPP
|
639
extern/boost/boost/algorithm/string/detail/finder.hpp
vendored
Normal file
639
extern/boost/boost/algorithm/string/detail/finder.hpp
vendored
Normal file
@ -0,0 +1,639 @@
|
|||||||
|
// Boost string_algo library finder.hpp header file ---------------------------//
|
||||||
|
|
||||||
|
// Copyright Pavol Droba 2002-2006.
|
||||||
|
//
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
|
// See http://www.boost.org/ for updates, documentation, and revision history.
|
||||||
|
|
||||||
|
#ifndef BOOST_STRING_FINDER_DETAIL_HPP
|
||||||
|
#define BOOST_STRING_FINDER_DETAIL_HPP
|
||||||
|
|
||||||
|
#include <boost/algorithm/string/config.hpp>
|
||||||
|
#include <boost/algorithm/string/constants.hpp>
|
||||||
|
#include <iterator>
|
||||||
|
|
||||||
|
#include <boost/range/iterator_range_core.hpp>
|
||||||
|
#include <boost/range/begin.hpp>
|
||||||
|
#include <boost/range/end.hpp>
|
||||||
|
#include <boost/range/empty.hpp>
|
||||||
|
#include <boost/range/as_literal.hpp>
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace algorithm {
|
||||||
|
namespace detail {
|
||||||
|
|
||||||
|
|
||||||
|
// find first functor -----------------------------------------------//
|
||||||
|
|
||||||
|
// find a subsequence in the sequence ( functor )
|
||||||
|
/*
|
||||||
|
Returns a pair <begin,end> marking the subsequence in the sequence.
|
||||||
|
If the find fails, functor returns <End,End>
|
||||||
|
*/
|
||||||
|
template<typename SearchIteratorT,typename PredicateT>
|
||||||
|
struct first_finderF
|
||||||
|
{
|
||||||
|
typedef SearchIteratorT search_iterator_type;
|
||||||
|
|
||||||
|
// Construction
|
||||||
|
template< typename SearchT >
|
||||||
|
first_finderF( const SearchT& Search, PredicateT Comp ) :
|
||||||
|
m_Search(::boost::begin(Search), ::boost::end(Search)), m_Comp(Comp) {}
|
||||||
|
first_finderF(
|
||||||
|
search_iterator_type SearchBegin,
|
||||||
|
search_iterator_type SearchEnd,
|
||||||
|
PredicateT Comp ) :
|
||||||
|
m_Search(SearchBegin, SearchEnd), m_Comp(Comp) {}
|
||||||
|
|
||||||
|
// Operation
|
||||||
|
template< typename ForwardIteratorT >
|
||||||
|
iterator_range<ForwardIteratorT>
|
||||||
|
operator()(
|
||||||
|
ForwardIteratorT Begin,
|
||||||
|
ForwardIteratorT End ) const
|
||||||
|
{
|
||||||
|
typedef iterator_range<ForwardIteratorT> result_type;
|
||||||
|
typedef ForwardIteratorT input_iterator_type;
|
||||||
|
|
||||||
|
// Outer loop
|
||||||
|
for(input_iterator_type OuterIt=Begin;
|
||||||
|
OuterIt!=End;
|
||||||
|
++OuterIt)
|
||||||
|
{
|
||||||
|
// Sanity check
|
||||||
|
if( boost::empty(m_Search) )
|
||||||
|
return result_type( End, End );
|
||||||
|
|
||||||
|
input_iterator_type InnerIt=OuterIt;
|
||||||
|
search_iterator_type SubstrIt=m_Search.begin();
|
||||||
|
for(;
|
||||||
|
InnerIt!=End && SubstrIt!=m_Search.end();
|
||||||
|
++InnerIt,++SubstrIt)
|
||||||
|
{
|
||||||
|
if( !( m_Comp(*InnerIt,*SubstrIt) ) )
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Substring matching succeeded
|
||||||
|
if ( SubstrIt==m_Search.end() )
|
||||||
|
return result_type( OuterIt, InnerIt );
|
||||||
|
}
|
||||||
|
|
||||||
|
return result_type( End, End );
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
iterator_range<search_iterator_type> m_Search;
|
||||||
|
PredicateT m_Comp;
|
||||||
|
};
|
||||||
|
|
||||||
|
// find last functor -----------------------------------------------//
|
||||||
|
|
||||||
|
// find the last match a subsequence in the sequence ( functor )
|
||||||
|
/*
|
||||||
|
Returns a pair <begin,end> marking the subsequence in the sequence.
|
||||||
|
If the find fails, returns <End,End>
|
||||||
|
*/
|
||||||
|
template<typename SearchIteratorT, typename PredicateT>
|
||||||
|
struct last_finderF
|
||||||
|
{
|
||||||
|
typedef SearchIteratorT search_iterator_type;
|
||||||
|
typedef first_finderF<
|
||||||
|
search_iterator_type,
|
||||||
|
PredicateT> first_finder_type;
|
||||||
|
|
||||||
|
// Construction
|
||||||
|
template< typename SearchT >
|
||||||
|
last_finderF( const SearchT& Search, PredicateT Comp ) :
|
||||||
|
m_Search(::boost::begin(Search), ::boost::end(Search)), m_Comp(Comp) {}
|
||||||
|
last_finderF(
|
||||||
|
search_iterator_type SearchBegin,
|
||||||
|
search_iterator_type SearchEnd,
|
||||||
|
PredicateT Comp ) :
|
||||||
|
m_Search(SearchBegin, SearchEnd), m_Comp(Comp) {}
|
||||||
|
|
||||||
|
// Operation
|
||||||
|
template< typename ForwardIteratorT >
|
||||||
|
iterator_range<ForwardIteratorT>
|
||||||
|
operator()(
|
||||||
|
ForwardIteratorT Begin,
|
||||||
|
ForwardIteratorT End ) const
|
||||||
|
{
|
||||||
|
typedef iterator_range<ForwardIteratorT> result_type;
|
||||||
|
|
||||||
|
if( boost::empty(m_Search) )
|
||||||
|
return result_type( End, End );
|
||||||
|
|
||||||
|
typedef BOOST_STRING_TYPENAME
|
||||||
|
std::iterator_traits<ForwardIteratorT>::iterator_category category;
|
||||||
|
|
||||||
|
return findit( Begin, End, category() );
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
// forward iterator
|
||||||
|
template< typename ForwardIteratorT >
|
||||||
|
iterator_range<ForwardIteratorT>
|
||||||
|
findit(
|
||||||
|
ForwardIteratorT Begin,
|
||||||
|
ForwardIteratorT End,
|
||||||
|
std::forward_iterator_tag ) const
|
||||||
|
{
|
||||||
|
typedef iterator_range<ForwardIteratorT> result_type;
|
||||||
|
|
||||||
|
first_finder_type first_finder(
|
||||||
|
m_Search.begin(), m_Search.end(), m_Comp );
|
||||||
|
|
||||||
|
result_type M=first_finder( Begin, End );
|
||||||
|
result_type Last=M;
|
||||||
|
|
||||||
|
while( M )
|
||||||
|
{
|
||||||
|
Last=M;
|
||||||
|
M=first_finder( ::boost::end(M), End );
|
||||||
|
}
|
||||||
|
|
||||||
|
return Last;
|
||||||
|
}
|
||||||
|
|
||||||
|
// bidirectional iterator
|
||||||
|
template< typename ForwardIteratorT >
|
||||||
|
iterator_range<ForwardIteratorT>
|
||||||
|
findit(
|
||||||
|
ForwardIteratorT Begin,
|
||||||
|
ForwardIteratorT End,
|
||||||
|
std::bidirectional_iterator_tag ) const
|
||||||
|
{
|
||||||
|
typedef iterator_range<ForwardIteratorT> result_type;
|
||||||
|
typedef ForwardIteratorT input_iterator_type;
|
||||||
|
|
||||||
|
// Outer loop
|
||||||
|
for(input_iterator_type OuterIt=End;
|
||||||
|
OuterIt!=Begin; )
|
||||||
|
{
|
||||||
|
input_iterator_type OuterIt2=--OuterIt;
|
||||||
|
|
||||||
|
input_iterator_type InnerIt=OuterIt2;
|
||||||
|
search_iterator_type SubstrIt=m_Search.begin();
|
||||||
|
for(;
|
||||||
|
InnerIt!=End && SubstrIt!=m_Search.end();
|
||||||
|
++InnerIt,++SubstrIt)
|
||||||
|
{
|
||||||
|
if( !( m_Comp(*InnerIt,*SubstrIt) ) )
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Substring matching succeeded
|
||||||
|
if( SubstrIt==m_Search.end() )
|
||||||
|
return result_type( OuterIt2, InnerIt );
|
||||||
|
}
|
||||||
|
|
||||||
|
return result_type( End, End );
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
iterator_range<search_iterator_type> m_Search;
|
||||||
|
PredicateT m_Comp;
|
||||||
|
};
|
||||||
|
|
||||||
|
// find n-th functor -----------------------------------------------//
|
||||||
|
|
||||||
|
// find the n-th match of a subsequence in the sequence ( functor )
|
||||||
|
/*
|
||||||
|
Returns a pair <begin,end> marking the subsequence in the sequence.
|
||||||
|
If the find fails, returns <End,End>
|
||||||
|
*/
|
||||||
|
template<typename SearchIteratorT, typename PredicateT>
|
||||||
|
struct nth_finderF
|
||||||
|
{
|
||||||
|
typedef SearchIteratorT search_iterator_type;
|
||||||
|
typedef first_finderF<
|
||||||
|
search_iterator_type,
|
||||||
|
PredicateT> first_finder_type;
|
||||||
|
typedef last_finderF<
|
||||||
|
search_iterator_type,
|
||||||
|
PredicateT> last_finder_type;
|
||||||
|
|
||||||
|
// Construction
|
||||||
|
template< typename SearchT >
|
||||||
|
nth_finderF(
|
||||||
|
const SearchT& Search,
|
||||||
|
int Nth,
|
||||||
|
PredicateT Comp) :
|
||||||
|
m_Search(::boost::begin(Search), ::boost::end(Search)),
|
||||||
|
m_Nth(Nth),
|
||||||
|
m_Comp(Comp) {}
|
||||||
|
nth_finderF(
|
||||||
|
search_iterator_type SearchBegin,
|
||||||
|
search_iterator_type SearchEnd,
|
||||||
|
int Nth,
|
||||||
|
PredicateT Comp) :
|
||||||
|
m_Search(SearchBegin, SearchEnd),
|
||||||
|
m_Nth(Nth),
|
||||||
|
m_Comp(Comp) {}
|
||||||
|
|
||||||
|
// Operation
|
||||||
|
template< typename ForwardIteratorT >
|
||||||
|
iterator_range<ForwardIteratorT>
|
||||||
|
operator()(
|
||||||
|
ForwardIteratorT Begin,
|
||||||
|
ForwardIteratorT End ) const
|
||||||
|
{
|
||||||
|
if(m_Nth>=0)
|
||||||
|
{
|
||||||
|
return find_forward(Begin, End, m_Nth);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return find_backward(Begin, End, -m_Nth);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
// Implementation helpers
|
||||||
|
template< typename ForwardIteratorT >
|
||||||
|
iterator_range<ForwardIteratorT>
|
||||||
|
find_forward(
|
||||||
|
ForwardIteratorT Begin,
|
||||||
|
ForwardIteratorT End,
|
||||||
|
unsigned int N) const
|
||||||
|
{
|
||||||
|
typedef iterator_range<ForwardIteratorT> result_type;
|
||||||
|
|
||||||
|
// Sanity check
|
||||||
|
if( boost::empty(m_Search) )
|
||||||
|
return result_type( End, End );
|
||||||
|
|
||||||
|
// Instantiate find functor
|
||||||
|
first_finder_type first_finder(
|
||||||
|
m_Search.begin(), m_Search.end(), m_Comp );
|
||||||
|
|
||||||
|
result_type M( Begin, Begin );
|
||||||
|
|
||||||
|
for( unsigned int n=0; n<=N; ++n )
|
||||||
|
{
|
||||||
|
// find next match
|
||||||
|
M=first_finder( ::boost::end(M), End );
|
||||||
|
|
||||||
|
if ( !M )
|
||||||
|
{
|
||||||
|
// Subsequence not found, return
|
||||||
|
return M;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return M;
|
||||||
|
}
|
||||||
|
|
||||||
|
template< typename ForwardIteratorT >
|
||||||
|
iterator_range<ForwardIteratorT>
|
||||||
|
find_backward(
|
||||||
|
ForwardIteratorT Begin,
|
||||||
|
ForwardIteratorT End,
|
||||||
|
unsigned int N) const
|
||||||
|
{
|
||||||
|
typedef iterator_range<ForwardIteratorT> result_type;
|
||||||
|
|
||||||
|
// Sanity check
|
||||||
|
if( boost::empty(m_Search) )
|
||||||
|
return result_type( End, End );
|
||||||
|
|
||||||
|
// Instantiate find functor
|
||||||
|
last_finder_type last_finder(
|
||||||
|
m_Search.begin(), m_Search.end(), m_Comp );
|
||||||
|
|
||||||
|
result_type M( End, End );
|
||||||
|
|
||||||
|
for( unsigned int n=1; n<=N; ++n )
|
||||||
|
{
|
||||||
|
// find next match
|
||||||
|
M=last_finder( Begin, ::boost::begin(M) );
|
||||||
|
|
||||||
|
if ( !M )
|
||||||
|
{
|
||||||
|
// Subsequence not found, return
|
||||||
|
return M;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return M;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
iterator_range<search_iterator_type> m_Search;
|
||||||
|
int m_Nth;
|
||||||
|
PredicateT m_Comp;
|
||||||
|
};
|
||||||
|
|
||||||
|
// find head/tail implementation helpers ---------------------------//
|
||||||
|
|
||||||
|
template<typename ForwardIteratorT>
|
||||||
|
iterator_range<ForwardIteratorT>
|
||||||
|
find_head_impl(
|
||||||
|
ForwardIteratorT Begin,
|
||||||
|
ForwardIteratorT End,
|
||||||
|
unsigned int N,
|
||||||
|
std::forward_iterator_tag )
|
||||||
|
{
|
||||||
|
typedef ForwardIteratorT input_iterator_type;
|
||||||
|
typedef iterator_range<ForwardIteratorT> result_type;
|
||||||
|
|
||||||
|
input_iterator_type It=Begin;
|
||||||
|
for( unsigned int Index=0; Index<N && It!=End; ++Index,++It )
|
||||||
|
;
|
||||||
|
|
||||||
|
return result_type( Begin, It );
|
||||||
|
}
|
||||||
|
|
||||||
|
template< typename ForwardIteratorT >
|
||||||
|
iterator_range<ForwardIteratorT>
|
||||||
|
find_head_impl(
|
||||||
|
ForwardIteratorT Begin,
|
||||||
|
ForwardIteratorT End,
|
||||||
|
unsigned int N,
|
||||||
|
std::random_access_iterator_tag )
|
||||||
|
{
|
||||||
|
typedef iterator_range<ForwardIteratorT> result_type;
|
||||||
|
|
||||||
|
if ( (End<=Begin) || ( static_cast<unsigned int>(End-Begin) < N ) )
|
||||||
|
return result_type( Begin, End );
|
||||||
|
|
||||||
|
return result_type(Begin,Begin+N);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find head implementation
|
||||||
|
template<typename ForwardIteratorT>
|
||||||
|
iterator_range<ForwardIteratorT>
|
||||||
|
find_head_impl(
|
||||||
|
ForwardIteratorT Begin,
|
||||||
|
ForwardIteratorT End,
|
||||||
|
unsigned int N )
|
||||||
|
{
|
||||||
|
typedef BOOST_STRING_TYPENAME
|
||||||
|
std::iterator_traits<ForwardIteratorT>::iterator_category category;
|
||||||
|
|
||||||
|
return ::boost::algorithm::detail::find_head_impl( Begin, End, N, category() );
|
||||||
|
}
|
||||||
|
|
||||||
|
template< typename ForwardIteratorT >
|
||||||
|
iterator_range<ForwardIteratorT>
|
||||||
|
find_tail_impl(
|
||||||
|
ForwardIteratorT Begin,
|
||||||
|
ForwardIteratorT End,
|
||||||
|
unsigned int N,
|
||||||
|
std::forward_iterator_tag )
|
||||||
|
{
|
||||||
|
typedef ForwardIteratorT input_iterator_type;
|
||||||
|
typedef iterator_range<ForwardIteratorT> result_type;
|
||||||
|
|
||||||
|
unsigned int Index=0;
|
||||||
|
input_iterator_type It=Begin;
|
||||||
|
input_iterator_type It2=Begin;
|
||||||
|
|
||||||
|
// Advance It2 by N increments
|
||||||
|
for( Index=0; Index<N && It2!=End; ++Index,++It2 )
|
||||||
|
;
|
||||||
|
|
||||||
|
// Advance It, It2 to the end
|
||||||
|
for(; It2!=End; ++It,++It2 )
|
||||||
|
;
|
||||||
|
|
||||||
|
return result_type( It, It2 );
|
||||||
|
}
|
||||||
|
|
||||||
|
template< typename ForwardIteratorT >
|
||||||
|
iterator_range<ForwardIteratorT>
|
||||||
|
find_tail_impl(
|
||||||
|
ForwardIteratorT Begin,
|
||||||
|
ForwardIteratorT End,
|
||||||
|
unsigned int N,
|
||||||
|
std::bidirectional_iterator_tag )
|
||||||
|
{
|
||||||
|
typedef ForwardIteratorT input_iterator_type;
|
||||||
|
typedef iterator_range<ForwardIteratorT> result_type;
|
||||||
|
|
||||||
|
input_iterator_type It=End;
|
||||||
|
for( unsigned int Index=0; Index<N && It!=Begin; ++Index,--It )
|
||||||
|
;
|
||||||
|
|
||||||
|
return result_type( It, End );
|
||||||
|
}
|
||||||
|
|
||||||
|
template< typename ForwardIteratorT >
|
||||||
|
iterator_range<ForwardIteratorT>
|
||||||
|
find_tail_impl(
|
||||||
|
ForwardIteratorT Begin,
|
||||||
|
ForwardIteratorT End,
|
||||||
|
unsigned int N,
|
||||||
|
std::random_access_iterator_tag )
|
||||||
|
{
|
||||||
|
typedef iterator_range<ForwardIteratorT> result_type;
|
||||||
|
|
||||||
|
if ( (End<=Begin) || ( static_cast<unsigned int>(End-Begin) < N ) )
|
||||||
|
return result_type( Begin, End );
|
||||||
|
|
||||||
|
return result_type( End-N, End );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Operation
|
||||||
|
template< typename ForwardIteratorT >
|
||||||
|
iterator_range<ForwardIteratorT>
|
||||||
|
find_tail_impl(
|
||||||
|
ForwardIteratorT Begin,
|
||||||
|
ForwardIteratorT End,
|
||||||
|
unsigned int N )
|
||||||
|
{
|
||||||
|
typedef BOOST_STRING_TYPENAME
|
||||||
|
std::iterator_traits<ForwardIteratorT>::iterator_category category;
|
||||||
|
|
||||||
|
return ::boost::algorithm::detail::find_tail_impl( Begin, End, N, category() );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// find head functor -----------------------------------------------//
|
||||||
|
|
||||||
|
|
||||||
|
// find a head in the sequence ( functor )
|
||||||
|
/*
|
||||||
|
This functor find a head of the specified range. For
|
||||||
|
a specified N, the head is a subsequence of N starting
|
||||||
|
elements of the range.
|
||||||
|
*/
|
||||||
|
struct head_finderF
|
||||||
|
{
|
||||||
|
// Construction
|
||||||
|
head_finderF( int N ) : m_N(N) {}
|
||||||
|
|
||||||
|
// Operation
|
||||||
|
template< typename ForwardIteratorT >
|
||||||
|
iterator_range<ForwardIteratorT>
|
||||||
|
operator()(
|
||||||
|
ForwardIteratorT Begin,
|
||||||
|
ForwardIteratorT End ) const
|
||||||
|
{
|
||||||
|
if(m_N>=0)
|
||||||
|
{
|
||||||
|
return ::boost::algorithm::detail::find_head_impl( Begin, End, m_N );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
iterator_range<ForwardIteratorT> Res=
|
||||||
|
::boost::algorithm::detail::find_tail_impl( Begin, End, -m_N );
|
||||||
|
|
||||||
|
return ::boost::make_iterator_range(Begin, Res.begin());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
int m_N;
|
||||||
|
};
|
||||||
|
|
||||||
|
// find tail functor -----------------------------------------------//
|
||||||
|
|
||||||
|
|
||||||
|
// find a tail in the sequence ( functor )
|
||||||
|
/*
|
||||||
|
This functor find a tail of the specified range. For
|
||||||
|
a specified N, the head is a subsequence of N starting
|
||||||
|
elements of the range.
|
||||||
|
*/
|
||||||
|
struct tail_finderF
|
||||||
|
{
|
||||||
|
// Construction
|
||||||
|
tail_finderF( int N ) : m_N(N) {}
|
||||||
|
|
||||||
|
// Operation
|
||||||
|
template< typename ForwardIteratorT >
|
||||||
|
iterator_range<ForwardIteratorT>
|
||||||
|
operator()(
|
||||||
|
ForwardIteratorT Begin,
|
||||||
|
ForwardIteratorT End ) const
|
||||||
|
{
|
||||||
|
if(m_N>=0)
|
||||||
|
{
|
||||||
|
return ::boost::algorithm::detail::find_tail_impl( Begin, End, m_N );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
iterator_range<ForwardIteratorT> Res=
|
||||||
|
::boost::algorithm::detail::find_head_impl( Begin, End, -m_N );
|
||||||
|
|
||||||
|
return ::boost::make_iterator_range(Res.end(), End);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
int m_N;
|
||||||
|
};
|
||||||
|
|
||||||
|
// find token functor -----------------------------------------------//
|
||||||
|
|
||||||
|
// find a token in a sequence ( functor )
|
||||||
|
/*
|
||||||
|
This find functor finds a token specified be a predicate
|
||||||
|
in a sequence. It is equivalent of std::find algorithm,
|
||||||
|
with an exception that it return range instead of a single
|
||||||
|
iterator.
|
||||||
|
|
||||||
|
If bCompress is set to true, adjacent matching tokens are
|
||||||
|
concatenated into one match.
|
||||||
|
*/
|
||||||
|
template< typename PredicateT >
|
||||||
|
struct token_finderF
|
||||||
|
{
|
||||||
|
// Construction
|
||||||
|
token_finderF(
|
||||||
|
PredicateT Pred,
|
||||||
|
token_compress_mode_type eCompress=token_compress_off ) :
|
||||||
|
m_Pred(Pred), m_eCompress(eCompress) {}
|
||||||
|
|
||||||
|
// Operation
|
||||||
|
template< typename ForwardIteratorT >
|
||||||
|
iterator_range<ForwardIteratorT>
|
||||||
|
operator()(
|
||||||
|
ForwardIteratorT Begin,
|
||||||
|
ForwardIteratorT End ) const
|
||||||
|
{
|
||||||
|
typedef iterator_range<ForwardIteratorT> result_type;
|
||||||
|
|
||||||
|
ForwardIteratorT It=std::find_if( Begin, End, m_Pred );
|
||||||
|
|
||||||
|
if( It==End )
|
||||||
|
{
|
||||||
|
return result_type( End, End );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ForwardIteratorT It2=It;
|
||||||
|
|
||||||
|
if( m_eCompress==token_compress_on )
|
||||||
|
{
|
||||||
|
// Find first non-matching character
|
||||||
|
while( It2!=End && m_Pred(*It2) ) ++It2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Advance by one position
|
||||||
|
++It2;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result_type( It, It2 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
PredicateT m_Pred;
|
||||||
|
token_compress_mode_type m_eCompress;
|
||||||
|
};
|
||||||
|
|
||||||
|
// find range functor -----------------------------------------------//
|
||||||
|
|
||||||
|
// find a range in the sequence ( functor )
|
||||||
|
/*
|
||||||
|
This functor actually does not perform any find operation.
|
||||||
|
It always returns given iterator range as a result.
|
||||||
|
*/
|
||||||
|
template<typename ForwardIterator1T>
|
||||||
|
struct range_finderF
|
||||||
|
{
|
||||||
|
typedef ForwardIterator1T input_iterator_type;
|
||||||
|
typedef iterator_range<input_iterator_type> result_type;
|
||||||
|
|
||||||
|
// Construction
|
||||||
|
range_finderF(
|
||||||
|
input_iterator_type Begin,
|
||||||
|
input_iterator_type End ) : m_Range(Begin, End) {}
|
||||||
|
|
||||||
|
range_finderF(const iterator_range<input_iterator_type>& Range) :
|
||||||
|
m_Range(Range) {}
|
||||||
|
|
||||||
|
// Operation
|
||||||
|
template< typename ForwardIterator2T >
|
||||||
|
iterator_range<ForwardIterator2T>
|
||||||
|
operator()(
|
||||||
|
ForwardIterator2T,
|
||||||
|
ForwardIterator2T ) const
|
||||||
|
{
|
||||||
|
#if BOOST_WORKAROUND( __MWERKS__, <= 0x3003 )
|
||||||
|
return iterator_range<const ForwardIterator2T>(this->m_Range);
|
||||||
|
#else
|
||||||
|
return m_Range;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
iterator_range<input_iterator_type> m_Range;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace detail
|
||||||
|
} // namespace algorithm
|
||||||
|
} // namespace boost
|
||||||
|
|
||||||
|
#endif // BOOST_STRING_FINDER_DETAIL_HPP
|
95
extern/boost/boost/algorithm/string/detail/trim.hpp
vendored
Normal file
95
extern/boost/boost/algorithm/string/detail/trim.hpp
vendored
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
// Boost string_algo library trim.hpp header file ---------------------------//
|
||||||
|
|
||||||
|
// Copyright Pavol Droba 2002-2003.
|
||||||
|
//
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
|
// See http://www.boost.org/ for updates, documentation, and revision history.
|
||||||
|
|
||||||
|
#ifndef BOOST_STRING_TRIM_DETAIL_HPP
|
||||||
|
#define BOOST_STRING_TRIM_DETAIL_HPP
|
||||||
|
|
||||||
|
#include <boost/algorithm/string/config.hpp>
|
||||||
|
#include <iterator>
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace algorithm {
|
||||||
|
namespace detail {
|
||||||
|
|
||||||
|
// trim iterator helper -----------------------------------------------//
|
||||||
|
|
||||||
|
template< typename ForwardIteratorT, typename PredicateT >
|
||||||
|
inline ForwardIteratorT trim_end_iter_select(
|
||||||
|
ForwardIteratorT InBegin,
|
||||||
|
ForwardIteratorT InEnd,
|
||||||
|
PredicateT IsSpace,
|
||||||
|
std::forward_iterator_tag )
|
||||||
|
{
|
||||||
|
ForwardIteratorT TrimIt=InBegin;
|
||||||
|
|
||||||
|
for( ForwardIteratorT It=InBegin; It!=InEnd; ++It )
|
||||||
|
{
|
||||||
|
if ( !IsSpace(*It) )
|
||||||
|
{
|
||||||
|
TrimIt=It;
|
||||||
|
++TrimIt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return TrimIt;
|
||||||
|
}
|
||||||
|
|
||||||
|
template< typename ForwardIteratorT, typename PredicateT >
|
||||||
|
inline ForwardIteratorT trim_end_iter_select(
|
||||||
|
ForwardIteratorT InBegin,
|
||||||
|
ForwardIteratorT InEnd,
|
||||||
|
PredicateT IsSpace,
|
||||||
|
std::bidirectional_iterator_tag )
|
||||||
|
{
|
||||||
|
for( ForwardIteratorT It=InEnd; It!=InBegin; )
|
||||||
|
{
|
||||||
|
if ( !IsSpace(*(--It)) )
|
||||||
|
return ++It;
|
||||||
|
}
|
||||||
|
|
||||||
|
return InBegin;
|
||||||
|
}
|
||||||
|
// Search for first non matching character from the beginning of the sequence
|
||||||
|
template< typename ForwardIteratorT, typename PredicateT >
|
||||||
|
inline ForwardIteratorT trim_begin(
|
||||||
|
ForwardIteratorT InBegin,
|
||||||
|
ForwardIteratorT InEnd,
|
||||||
|
PredicateT IsSpace )
|
||||||
|
{
|
||||||
|
ForwardIteratorT It=InBegin;
|
||||||
|
for(; It!=InEnd; ++It )
|
||||||
|
{
|
||||||
|
if (!IsSpace(*It))
|
||||||
|
return It;
|
||||||
|
}
|
||||||
|
|
||||||
|
return It;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Search for first non matching character from the end of the sequence
|
||||||
|
template< typename ForwardIteratorT, typename PredicateT >
|
||||||
|
inline ForwardIteratorT trim_end(
|
||||||
|
ForwardIteratorT InBegin,
|
||||||
|
ForwardIteratorT InEnd,
|
||||||
|
PredicateT IsSpace )
|
||||||
|
{
|
||||||
|
typedef BOOST_STRING_TYPENAME
|
||||||
|
std::iterator_traits<ForwardIteratorT>::iterator_category category;
|
||||||
|
|
||||||
|
return ::boost::algorithm::detail::trim_end_iter_select( InBegin, InEnd, IsSpace, category() );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace detail
|
||||||
|
} // namespace algorithm
|
||||||
|
} // namespace boost
|
||||||
|
|
||||||
|
|
||||||
|
#endif // BOOST_STRING_TRIM_DETAIL_HPP
|
107
extern/boost/boost/algorithm/string/detail/util.hpp
vendored
Normal file
107
extern/boost/boost/algorithm/string/detail/util.hpp
vendored
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
// Boost string_algo library util.hpp header file ---------------------------//
|
||||||
|
|
||||||
|
// Copyright Pavol Droba 2002-2003.
|
||||||
|
//
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
|
// See http://www.boost.org/ for updates, documentation, and revision history.
|
||||||
|
|
||||||
|
#ifndef BOOST_STRING_UTIL_DETAIL_HPP
|
||||||
|
#define BOOST_STRING_UTIL_DETAIL_HPP
|
||||||
|
|
||||||
|
#include <boost/algorithm/string/config.hpp>
|
||||||
|
#include <functional>
|
||||||
|
#include <boost/range/iterator_range_core.hpp>
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace algorithm {
|
||||||
|
namespace detail {
|
||||||
|
|
||||||
|
// empty container -----------------------------------------------//
|
||||||
|
|
||||||
|
// empty_container
|
||||||
|
/*
|
||||||
|
This class represents always empty container,
|
||||||
|
containing elements of type CharT.
|
||||||
|
|
||||||
|
It is supposed to be used in a const version only
|
||||||
|
*/
|
||||||
|
template< typename CharT >
|
||||||
|
struct empty_container
|
||||||
|
{
|
||||||
|
typedef empty_container<CharT> type;
|
||||||
|
typedef CharT value_type;
|
||||||
|
typedef std::size_t size_type;
|
||||||
|
typedef std::ptrdiff_t difference_type;
|
||||||
|
typedef const value_type& reference;
|
||||||
|
typedef const value_type& const_reference;
|
||||||
|
typedef const value_type* iterator;
|
||||||
|
typedef const value_type* const_iterator;
|
||||||
|
|
||||||
|
|
||||||
|
// Operations
|
||||||
|
const_iterator begin() const
|
||||||
|
{
|
||||||
|
return reinterpret_cast<const_iterator>(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
const_iterator end() const
|
||||||
|
{
|
||||||
|
return reinterpret_cast<const_iterator>(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool empty() const
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_type size() const
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// bounded copy algorithm -----------------------------------------------//
|
||||||
|
|
||||||
|
// Bounded version of the std::copy algorithm
|
||||||
|
template<typename InputIteratorT, typename OutputIteratorT>
|
||||||
|
inline OutputIteratorT bounded_copy(
|
||||||
|
InputIteratorT First,
|
||||||
|
InputIteratorT Last,
|
||||||
|
OutputIteratorT DestFirst,
|
||||||
|
OutputIteratorT DestLast )
|
||||||
|
{
|
||||||
|
InputIteratorT InputIt=First;
|
||||||
|
OutputIteratorT OutputIt=DestFirst;
|
||||||
|
for(; InputIt!=Last && OutputIt!=DestLast; InputIt++, OutputIt++ )
|
||||||
|
{
|
||||||
|
*OutputIt=*InputIt;
|
||||||
|
}
|
||||||
|
|
||||||
|
return OutputIt;
|
||||||
|
}
|
||||||
|
|
||||||
|
// iterator range utilities -----------------------------------------//
|
||||||
|
|
||||||
|
// copy range functor
|
||||||
|
template<
|
||||||
|
typename SeqT,
|
||||||
|
typename IteratorT=BOOST_STRING_TYPENAME SeqT::const_iterator >
|
||||||
|
struct copy_iterator_rangeF
|
||||||
|
{
|
||||||
|
typedef iterator_range<IteratorT> argument_type;
|
||||||
|
typedef SeqT result_type;
|
||||||
|
SeqT operator()( const iterator_range<IteratorT>& Range ) const
|
||||||
|
{
|
||||||
|
return copy_range<SeqT>(Range);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace detail
|
||||||
|
} // namespace algorithm
|
||||||
|
} // namespace boost
|
||||||
|
|
||||||
|
|
||||||
|
#endif // BOOST_STRING_UTIL_DETAIL_HPP
|
388
extern/boost/boost/algorithm/string/find_iterator.hpp
vendored
Normal file
388
extern/boost/boost/algorithm/string/find_iterator.hpp
vendored
Normal file
@ -0,0 +1,388 @@
|
|||||||
|
// Boost string_algo library find_iterator.hpp header file ---------------------------//
|
||||||
|
|
||||||
|
// Copyright Pavol Droba 2002-2004.
|
||||||
|
//
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
|
// See http://www.boost.org/ for updates, documentation, and revision history.
|
||||||
|
|
||||||
|
#ifndef BOOST_STRING_FIND_ITERATOR_HPP
|
||||||
|
#define BOOST_STRING_FIND_ITERATOR_HPP
|
||||||
|
|
||||||
|
#include <boost/algorithm/string/config.hpp>
|
||||||
|
#include <boost/iterator/iterator_facade.hpp>
|
||||||
|
#include <boost/iterator/iterator_categories.hpp>
|
||||||
|
|
||||||
|
#include <boost/range/iterator_range_core.hpp>
|
||||||
|
#include <boost/range/begin.hpp>
|
||||||
|
#include <boost/range/end.hpp>
|
||||||
|
#include <boost/range/iterator.hpp>
|
||||||
|
#include <boost/range/as_literal.hpp>
|
||||||
|
|
||||||
|
#include <boost/algorithm/string/detail/find_iterator.hpp>
|
||||||
|
|
||||||
|
/*! \file
|
||||||
|
Defines find iterator classes. Find iterator repeatedly applies a Finder
|
||||||
|
to the specified input string to search for matches. Dereferencing
|
||||||
|
the iterator yields the current match or a range between the last and the current
|
||||||
|
match depending on the iterator used.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace algorithm {
|
||||||
|
|
||||||
|
// find_iterator -----------------------------------------------//
|
||||||
|
|
||||||
|
//! find_iterator
|
||||||
|
/*!
|
||||||
|
Find iterator encapsulates a Finder and allows
|
||||||
|
for incremental searching in a string.
|
||||||
|
Each increment moves the iterator to the next match.
|
||||||
|
|
||||||
|
Find iterator is a readable forward traversal iterator.
|
||||||
|
|
||||||
|
Dereferencing the iterator yields an iterator_range delimiting
|
||||||
|
the current match.
|
||||||
|
*/
|
||||||
|
template<typename IteratorT>
|
||||||
|
class find_iterator :
|
||||||
|
public iterator_facade<
|
||||||
|
find_iterator<IteratorT>,
|
||||||
|
const iterator_range<IteratorT>,
|
||||||
|
forward_traversal_tag >,
|
||||||
|
private detail::find_iterator_base<IteratorT>
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
// facade support
|
||||||
|
friend class ::boost::iterator_core_access;
|
||||||
|
|
||||||
|
private:
|
||||||
|
// typedefs
|
||||||
|
|
||||||
|
typedef detail::find_iterator_base<IteratorT> base_type;
|
||||||
|
typedef BOOST_STRING_TYPENAME
|
||||||
|
base_type::input_iterator_type input_iterator_type;
|
||||||
|
typedef BOOST_STRING_TYPENAME
|
||||||
|
base_type::match_type match_type;
|
||||||
|
|
||||||
|
public:
|
||||||
|
//! Default constructor
|
||||||
|
/*!
|
||||||
|
Construct null iterator. All null iterators are equal.
|
||||||
|
|
||||||
|
\post eof()==true
|
||||||
|
*/
|
||||||
|
find_iterator() {}
|
||||||
|
|
||||||
|
//! Copy constructor
|
||||||
|
/*!
|
||||||
|
Construct a copy of the find_iterator
|
||||||
|
*/
|
||||||
|
find_iterator( const find_iterator& Other ) :
|
||||||
|
base_type(Other),
|
||||||
|
m_Match(Other.m_Match),
|
||||||
|
m_End(Other.m_End) {}
|
||||||
|
|
||||||
|
//! Constructor
|
||||||
|
/*!
|
||||||
|
Construct new find_iterator for a given finder
|
||||||
|
and a range.
|
||||||
|
*/
|
||||||
|
template<typename FinderT>
|
||||||
|
find_iterator(
|
||||||
|
IteratorT Begin,
|
||||||
|
IteratorT End,
|
||||||
|
FinderT Finder ) :
|
||||||
|
detail::find_iterator_base<IteratorT>(Finder,0),
|
||||||
|
m_Match(Begin,Begin),
|
||||||
|
m_End(End)
|
||||||
|
{
|
||||||
|
increment();
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Constructor
|
||||||
|
/*!
|
||||||
|
Construct new find_iterator for a given finder
|
||||||
|
and a range.
|
||||||
|
*/
|
||||||
|
template<typename FinderT, typename RangeT>
|
||||||
|
find_iterator(
|
||||||
|
RangeT& Col,
|
||||||
|
FinderT Finder ) :
|
||||||
|
detail::find_iterator_base<IteratorT>(Finder,0)
|
||||||
|
{
|
||||||
|
iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_col(::boost::as_literal(Col));
|
||||||
|
m_Match=::boost::make_iterator_range(::boost::begin(lit_col), ::boost::begin(lit_col));
|
||||||
|
m_End=::boost::end(lit_col);
|
||||||
|
|
||||||
|
increment();
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
// iterator operations
|
||||||
|
|
||||||
|
// dereference
|
||||||
|
const match_type& dereference() const
|
||||||
|
{
|
||||||
|
return m_Match;
|
||||||
|
}
|
||||||
|
|
||||||
|
// increment
|
||||||
|
void increment()
|
||||||
|
{
|
||||||
|
m_Match=this->do_find(m_Match.end(),m_End);
|
||||||
|
}
|
||||||
|
|
||||||
|
// comparison
|
||||||
|
bool equal( const find_iterator& Other ) const
|
||||||
|
{
|
||||||
|
bool bEof=eof();
|
||||||
|
bool bOtherEof=Other.eof();
|
||||||
|
|
||||||
|
return bEof || bOtherEof ? bEof==bOtherEof :
|
||||||
|
(
|
||||||
|
m_Match==Other.m_Match &&
|
||||||
|
m_End==Other.m_End
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
// operations
|
||||||
|
|
||||||
|
//! Eof check
|
||||||
|
/*!
|
||||||
|
Check the eof condition. Eof condition means that
|
||||||
|
there is nothing more to be searched i.e. find_iterator
|
||||||
|
is after the last match.
|
||||||
|
*/
|
||||||
|
bool eof() const
|
||||||
|
{
|
||||||
|
return
|
||||||
|
this->is_null() ||
|
||||||
|
(
|
||||||
|
m_Match.begin() == m_End &&
|
||||||
|
m_Match.end() == m_End
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
// Attributes
|
||||||
|
match_type m_Match;
|
||||||
|
input_iterator_type m_End;
|
||||||
|
};
|
||||||
|
|
||||||
|
//! find iterator construction helper
|
||||||
|
/*!
|
||||||
|
* Construct a find iterator to iterate through the specified string
|
||||||
|
*/
|
||||||
|
template<typename RangeT, typename FinderT>
|
||||||
|
inline find_iterator<
|
||||||
|
BOOST_STRING_TYPENAME range_iterator<RangeT>::type>
|
||||||
|
make_find_iterator(
|
||||||
|
RangeT& Collection,
|
||||||
|
FinderT Finder)
|
||||||
|
{
|
||||||
|
return find_iterator<BOOST_STRING_TYPENAME range_iterator<RangeT>::type>(
|
||||||
|
Collection, Finder);
|
||||||
|
}
|
||||||
|
|
||||||
|
// split iterator -----------------------------------------------//
|
||||||
|
|
||||||
|
//! split_iterator
|
||||||
|
/*!
|
||||||
|
Split iterator encapsulates a Finder and allows
|
||||||
|
for incremental searching in a string.
|
||||||
|
Unlike the find iterator, split iterator iterates
|
||||||
|
through gaps between matches.
|
||||||
|
|
||||||
|
Find iterator is a readable forward traversal iterator.
|
||||||
|
|
||||||
|
Dereferencing the iterator yields an iterator_range delimiting
|
||||||
|
the current match.
|
||||||
|
*/
|
||||||
|
template<typename IteratorT>
|
||||||
|
class split_iterator :
|
||||||
|
public iterator_facade<
|
||||||
|
split_iterator<IteratorT>,
|
||||||
|
const iterator_range<IteratorT>,
|
||||||
|
forward_traversal_tag >,
|
||||||
|
private detail::find_iterator_base<IteratorT>
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
// facade support
|
||||||
|
friend class ::boost::iterator_core_access;
|
||||||
|
|
||||||
|
private:
|
||||||
|
// typedefs
|
||||||
|
|
||||||
|
typedef detail::find_iterator_base<IteratorT> base_type;
|
||||||
|
typedef BOOST_STRING_TYPENAME
|
||||||
|
base_type::input_iterator_type input_iterator_type;
|
||||||
|
typedef BOOST_STRING_TYPENAME
|
||||||
|
base_type::match_type match_type;
|
||||||
|
|
||||||
|
public:
|
||||||
|
//! Default constructor
|
||||||
|
/*!
|
||||||
|
Construct null iterator. All null iterators are equal.
|
||||||
|
|
||||||
|
\post eof()==true
|
||||||
|
*/
|
||||||
|
split_iterator() :
|
||||||
|
m_Next(),
|
||||||
|
m_End(),
|
||||||
|
m_bEof(true)
|
||||||
|
{}
|
||||||
|
|
||||||
|
//! Copy constructor
|
||||||
|
/*!
|
||||||
|
Construct a copy of the split_iterator
|
||||||
|
*/
|
||||||
|
split_iterator( const split_iterator& Other ) :
|
||||||
|
base_type(Other),
|
||||||
|
m_Match(Other.m_Match),
|
||||||
|
m_Next(Other.m_Next),
|
||||||
|
m_End(Other.m_End),
|
||||||
|
m_bEof(Other.m_bEof)
|
||||||
|
{}
|
||||||
|
|
||||||
|
//! Constructor
|
||||||
|
/*!
|
||||||
|
Construct new split_iterator for a given finder
|
||||||
|
and a range.
|
||||||
|
*/
|
||||||
|
template<typename FinderT>
|
||||||
|
split_iterator(
|
||||||
|
IteratorT Begin,
|
||||||
|
IteratorT End,
|
||||||
|
FinderT Finder ) :
|
||||||
|
detail::find_iterator_base<IteratorT>(Finder,0),
|
||||||
|
m_Match(Begin,Begin),
|
||||||
|
m_Next(Begin),
|
||||||
|
m_End(End),
|
||||||
|
m_bEof(false)
|
||||||
|
{
|
||||||
|
// force the correct behavior for empty sequences and yield at least one token
|
||||||
|
if(Begin!=End)
|
||||||
|
{
|
||||||
|
increment();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//! Constructor
|
||||||
|
/*!
|
||||||
|
Construct new split_iterator for a given finder
|
||||||
|
and a collection.
|
||||||
|
*/
|
||||||
|
template<typename FinderT, typename RangeT>
|
||||||
|
split_iterator(
|
||||||
|
RangeT& Col,
|
||||||
|
FinderT Finder ) :
|
||||||
|
detail::find_iterator_base<IteratorT>(Finder,0),
|
||||||
|
m_bEof(false)
|
||||||
|
{
|
||||||
|
iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_col(::boost::as_literal(Col));
|
||||||
|
m_Match=make_iterator_range(::boost::begin(lit_col), ::boost::begin(lit_col));
|
||||||
|
m_Next=::boost::begin(lit_col);
|
||||||
|
m_End=::boost::end(lit_col);
|
||||||
|
|
||||||
|
// force the correct behavior for empty sequences and yield at least one token
|
||||||
|
if(m_Next!=m_End)
|
||||||
|
{
|
||||||
|
increment();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
// iterator operations
|
||||||
|
|
||||||
|
// dereference
|
||||||
|
const match_type& dereference() const
|
||||||
|
{
|
||||||
|
return m_Match;
|
||||||
|
}
|
||||||
|
|
||||||
|
// increment
|
||||||
|
void increment()
|
||||||
|
{
|
||||||
|
match_type FindMatch=this->do_find( m_Next, m_End );
|
||||||
|
|
||||||
|
if(FindMatch.begin()==m_End && FindMatch.end()==m_End)
|
||||||
|
{
|
||||||
|
if(m_Match.end()==m_End)
|
||||||
|
{
|
||||||
|
// Mark iterator as eof
|
||||||
|
m_bEof=true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_Match=match_type( m_Next, FindMatch.begin() );
|
||||||
|
m_Next=FindMatch.end();
|
||||||
|
}
|
||||||
|
|
||||||
|
// comparison
|
||||||
|
bool equal( const split_iterator& Other ) const
|
||||||
|
{
|
||||||
|
bool bEof=eof();
|
||||||
|
bool bOtherEof=Other.eof();
|
||||||
|
|
||||||
|
return bEof || bOtherEof ? bEof==bOtherEof :
|
||||||
|
(
|
||||||
|
m_Match==Other.m_Match &&
|
||||||
|
m_Next==Other.m_Next &&
|
||||||
|
m_End==Other.m_End
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
// operations
|
||||||
|
|
||||||
|
//! Eof check
|
||||||
|
/*!
|
||||||
|
Check the eof condition. Eof condition means that
|
||||||
|
there is nothing more to be searched i.e. find_iterator
|
||||||
|
is after the last match.
|
||||||
|
*/
|
||||||
|
bool eof() const
|
||||||
|
{
|
||||||
|
return this->is_null() || m_bEof;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
// Attributes
|
||||||
|
match_type m_Match;
|
||||||
|
input_iterator_type m_Next;
|
||||||
|
input_iterator_type m_End;
|
||||||
|
bool m_bEof;
|
||||||
|
};
|
||||||
|
|
||||||
|
//! split iterator construction helper
|
||||||
|
/*!
|
||||||
|
* Construct a split iterator to iterate through the specified collection
|
||||||
|
*/
|
||||||
|
template<typename RangeT, typename FinderT>
|
||||||
|
inline split_iterator<
|
||||||
|
BOOST_STRING_TYPENAME range_iterator<RangeT>::type>
|
||||||
|
make_split_iterator(
|
||||||
|
RangeT& Collection,
|
||||||
|
FinderT Finder)
|
||||||
|
{
|
||||||
|
return split_iterator<BOOST_STRING_TYPENAME range_iterator<RangeT>::type>(
|
||||||
|
Collection, Finder);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace algorithm
|
||||||
|
|
||||||
|
// pull names to the boost namespace
|
||||||
|
using algorithm::find_iterator;
|
||||||
|
using algorithm::make_find_iterator;
|
||||||
|
using algorithm::split_iterator;
|
||||||
|
using algorithm::make_split_iterator;
|
||||||
|
|
||||||
|
} // namespace boost
|
||||||
|
|
||||||
|
|
||||||
|
#endif // BOOST_STRING_FIND_ITERATOR_HPP
|
266
extern/boost/boost/algorithm/string/finder.hpp
vendored
Normal file
266
extern/boost/boost/algorithm/string/finder.hpp
vendored
Normal file
@ -0,0 +1,266 @@
|
|||||||
|
// Boost string_algo library finder.hpp header file ---------------------------//
|
||||||
|
|
||||||
|
// Copyright Pavol Droba 2002-2006.
|
||||||
|
//
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
|
// See http://www.boost.org/ for updates, documentation, and revision history.
|
||||||
|
|
||||||
|
#ifndef BOOST_STRING_FINDER_HPP
|
||||||
|
#define BOOST_STRING_FINDER_HPP
|
||||||
|
|
||||||
|
#include <boost/algorithm/string/config.hpp>
|
||||||
|
|
||||||
|
#include <boost/range/iterator_range_core.hpp>
|
||||||
|
#include <boost/range/begin.hpp>
|
||||||
|
#include <boost/range/end.hpp>
|
||||||
|
#include <boost/range/iterator.hpp>
|
||||||
|
#include <boost/range/const_iterator.hpp>
|
||||||
|
|
||||||
|
#include <boost/algorithm/string/constants.hpp>
|
||||||
|
#include <boost/algorithm/string/detail/finder.hpp>
|
||||||
|
#include <boost/algorithm/string/compare.hpp>
|
||||||
|
|
||||||
|
/*! \file
|
||||||
|
Defines Finder generators. Finder object is a functor which is able to
|
||||||
|
find a substring matching a specific criteria in the input.
|
||||||
|
Finders are used as a pluggable components for replace, find
|
||||||
|
and split facilities. This header contains generator functions
|
||||||
|
for finders provided in this library.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace algorithm {
|
||||||
|
|
||||||
|
// Finder generators ------------------------------------------//
|
||||||
|
|
||||||
|
//! "First" finder
|
||||||
|
/*!
|
||||||
|
Construct the \c first_finder. The finder searches for the first
|
||||||
|
occurrence of the string in a given input.
|
||||||
|
The result is given as an \c iterator_range delimiting the match.
|
||||||
|
|
||||||
|
\param Search A substring to be searched for.
|
||||||
|
\return An instance of the \c first_finder object
|
||||||
|
*/
|
||||||
|
template<typename RangeT>
|
||||||
|
inline detail::first_finderF<
|
||||||
|
BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
|
||||||
|
is_equal>
|
||||||
|
first_finder( const RangeT& Search )
|
||||||
|
{
|
||||||
|
return
|
||||||
|
detail::first_finderF<
|
||||||
|
BOOST_STRING_TYPENAME
|
||||||
|
range_const_iterator<RangeT>::type,
|
||||||
|
is_equal>( ::boost::as_literal(Search), is_equal() ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
//! "First" finder
|
||||||
|
/*!
|
||||||
|
\overload
|
||||||
|
*/
|
||||||
|
template<typename RangeT,typename PredicateT>
|
||||||
|
inline detail::first_finderF<
|
||||||
|
BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
|
||||||
|
PredicateT>
|
||||||
|
first_finder(
|
||||||
|
const RangeT& Search, PredicateT Comp )
|
||||||
|
{
|
||||||
|
return
|
||||||
|
detail::first_finderF<
|
||||||
|
BOOST_STRING_TYPENAME
|
||||||
|
range_const_iterator<RangeT>::type,
|
||||||
|
PredicateT>( ::boost::as_literal(Search), Comp );
|
||||||
|
}
|
||||||
|
|
||||||
|
//! "Last" finder
|
||||||
|
/*!
|
||||||
|
Construct the \c last_finder. The finder searches for the last
|
||||||
|
occurrence of the string in a given input.
|
||||||
|
The result is given as an \c iterator_range delimiting the match.
|
||||||
|
|
||||||
|
\param Search A substring to be searched for.
|
||||||
|
\return An instance of the \c last_finder object
|
||||||
|
*/
|
||||||
|
template<typename RangeT>
|
||||||
|
inline detail::last_finderF<
|
||||||
|
BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
|
||||||
|
is_equal>
|
||||||
|
last_finder( const RangeT& Search )
|
||||||
|
{
|
||||||
|
return
|
||||||
|
detail::last_finderF<
|
||||||
|
BOOST_STRING_TYPENAME
|
||||||
|
range_const_iterator<RangeT>::type,
|
||||||
|
is_equal>( ::boost::as_literal(Search), is_equal() );
|
||||||
|
}
|
||||||
|
//! "Last" finder
|
||||||
|
/*!
|
||||||
|
\overload
|
||||||
|
*/
|
||||||
|
template<typename RangeT, typename PredicateT>
|
||||||
|
inline detail::last_finderF<
|
||||||
|
BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
|
||||||
|
PredicateT>
|
||||||
|
last_finder( const RangeT& Search, PredicateT Comp )
|
||||||
|
{
|
||||||
|
return
|
||||||
|
detail::last_finderF<
|
||||||
|
BOOST_STRING_TYPENAME
|
||||||
|
range_const_iterator<RangeT>::type,
|
||||||
|
PredicateT>( ::boost::as_literal(Search), Comp ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
//! "Nth" finder
|
||||||
|
/*!
|
||||||
|
Construct the \c nth_finder. The finder searches for the n-th (zero-indexed)
|
||||||
|
occurrence of the string in a given input.
|
||||||
|
The result is given as an \c iterator_range delimiting the match.
|
||||||
|
|
||||||
|
\param Search A substring to be searched for.
|
||||||
|
\param Nth An index of the match to be find
|
||||||
|
\return An instance of the \c nth_finder object
|
||||||
|
*/
|
||||||
|
template<typename RangeT>
|
||||||
|
inline detail::nth_finderF<
|
||||||
|
BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
|
||||||
|
is_equal>
|
||||||
|
nth_finder(
|
||||||
|
const RangeT& Search,
|
||||||
|
int Nth)
|
||||||
|
{
|
||||||
|
return
|
||||||
|
detail::nth_finderF<
|
||||||
|
BOOST_STRING_TYPENAME
|
||||||
|
range_const_iterator<RangeT>::type,
|
||||||
|
is_equal>( ::boost::as_literal(Search), Nth, is_equal() ) ;
|
||||||
|
}
|
||||||
|
//! "Nth" finder
|
||||||
|
/*!
|
||||||
|
\overload
|
||||||
|
*/
|
||||||
|
template<typename RangeT, typename PredicateT>
|
||||||
|
inline detail::nth_finderF<
|
||||||
|
BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type,
|
||||||
|
PredicateT>
|
||||||
|
nth_finder(
|
||||||
|
const RangeT& Search,
|
||||||
|
int Nth,
|
||||||
|
PredicateT Comp )
|
||||||
|
{
|
||||||
|
return
|
||||||
|
detail::nth_finderF<
|
||||||
|
BOOST_STRING_TYPENAME
|
||||||
|
range_const_iterator<RangeT>::type,
|
||||||
|
PredicateT>( ::boost::as_literal(Search), Nth, Comp );
|
||||||
|
}
|
||||||
|
|
||||||
|
//! "Head" finder
|
||||||
|
/*!
|
||||||
|
Construct the \c head_finder. The finder returns a head of a given
|
||||||
|
input. The head is a prefix of a string up to n elements in
|
||||||
|
size. If an input has less then n elements, whole input is
|
||||||
|
considered a head.
|
||||||
|
The result is given as an \c iterator_range delimiting the match.
|
||||||
|
|
||||||
|
\param N The size of the head
|
||||||
|
\return An instance of the \c head_finder object
|
||||||
|
*/
|
||||||
|
inline detail::head_finderF
|
||||||
|
head_finder( int N )
|
||||||
|
{
|
||||||
|
return detail::head_finderF(N);
|
||||||
|
}
|
||||||
|
|
||||||
|
//! "Tail" finder
|
||||||
|
/*!
|
||||||
|
Construct the \c tail_finder. The finder returns a tail of a given
|
||||||
|
input. The tail is a suffix of a string up to n elements in
|
||||||
|
size. If an input has less then n elements, whole input is
|
||||||
|
considered a head.
|
||||||
|
The result is given as an \c iterator_range delimiting the match.
|
||||||
|
|
||||||
|
\param N The size of the head
|
||||||
|
\return An instance of the \c tail_finder object
|
||||||
|
*/
|
||||||
|
inline detail::tail_finderF
|
||||||
|
tail_finder( int N )
|
||||||
|
{
|
||||||
|
return detail::tail_finderF(N);
|
||||||
|
}
|
||||||
|
|
||||||
|
//! "Token" finder
|
||||||
|
/*!
|
||||||
|
Construct the \c token_finder. The finder searches for a token
|
||||||
|
specified by a predicate. It is similar to std::find_if
|
||||||
|
algorithm, with an exception that it return a range of
|
||||||
|
instead of a single iterator.
|
||||||
|
|
||||||
|
If "compress token mode" is enabled, adjacent matching tokens are
|
||||||
|
concatenated into one match. Thus the finder can be used to
|
||||||
|
search for continuous segments of characters satisfying the
|
||||||
|
given predicate.
|
||||||
|
|
||||||
|
The result is given as an \c iterator_range delimiting the match.
|
||||||
|
|
||||||
|
\param Pred An element selection predicate
|
||||||
|
\param eCompress Compress flag
|
||||||
|
\return An instance of the \c token_finder object
|
||||||
|
*/
|
||||||
|
template< typename PredicateT >
|
||||||
|
inline detail::token_finderF<PredicateT>
|
||||||
|
token_finder(
|
||||||
|
PredicateT Pred,
|
||||||
|
token_compress_mode_type eCompress=token_compress_off )
|
||||||
|
{
|
||||||
|
return detail::token_finderF<PredicateT>( Pred, eCompress );
|
||||||
|
}
|
||||||
|
|
||||||
|
//! "Range" finder
|
||||||
|
/*!
|
||||||
|
Construct the \c range_finder. The finder does not perform
|
||||||
|
any operation. It simply returns the given range for
|
||||||
|
any input.
|
||||||
|
|
||||||
|
\param Begin Beginning of the range
|
||||||
|
\param End End of the range
|
||||||
|
\return An instance of the \c range_finger object
|
||||||
|
*/
|
||||||
|
template< typename ForwardIteratorT >
|
||||||
|
inline detail::range_finderF<ForwardIteratorT>
|
||||||
|
range_finder(
|
||||||
|
ForwardIteratorT Begin,
|
||||||
|
ForwardIteratorT End )
|
||||||
|
{
|
||||||
|
return detail::range_finderF<ForwardIteratorT>( Begin, End );
|
||||||
|
}
|
||||||
|
|
||||||
|
//! "Range" finder
|
||||||
|
/*!
|
||||||
|
\overload
|
||||||
|
*/
|
||||||
|
template< typename ForwardIteratorT >
|
||||||
|
inline detail::range_finderF<ForwardIteratorT>
|
||||||
|
range_finder( iterator_range<ForwardIteratorT> Range )
|
||||||
|
{
|
||||||
|
return detail::range_finderF<ForwardIteratorT>( Range );
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace algorithm
|
||||||
|
|
||||||
|
// pull the names to the boost namespace
|
||||||
|
using algorithm::first_finder;
|
||||||
|
using algorithm::last_finder;
|
||||||
|
using algorithm::nth_finder;
|
||||||
|
using algorithm::head_finder;
|
||||||
|
using algorithm::tail_finder;
|
||||||
|
using algorithm::token_finder;
|
||||||
|
using algorithm::range_finder;
|
||||||
|
|
||||||
|
} // namespace boost
|
||||||
|
|
||||||
|
|
||||||
|
#endif // BOOST_STRING_FINDER_HPP
|
201
extern/boost/boost/algorithm/string/iter_find.hpp
vendored
Normal file
201
extern/boost/boost/algorithm/string/iter_find.hpp
vendored
Normal file
@ -0,0 +1,201 @@
|
|||||||
|
// Boost string_algo library iter_find.hpp header file ---------------------------//
|
||||||
|
|
||||||
|
// Copyright Pavol Droba 2002-2003.
|
||||||
|
//
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
|
// See http://www.boost.org/ for updates, documentation, and revision history.
|
||||||
|
|
||||||
|
#ifndef BOOST_STRING_ITER_FIND_HPP
|
||||||
|
#define BOOST_STRING_ITER_FIND_HPP
|
||||||
|
|
||||||
|
#include <boost/algorithm/string/config.hpp>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <iterator>
|
||||||
|
#include <boost/iterator/transform_iterator.hpp>
|
||||||
|
|
||||||
|
#include <boost/range/iterator_range_core.hpp>
|
||||||
|
#include <boost/range/begin.hpp>
|
||||||
|
#include <boost/range/end.hpp>
|
||||||
|
#include <boost/range/iterator.hpp>
|
||||||
|
#include <boost/range/value_type.hpp>
|
||||||
|
#include <boost/range/as_literal.hpp>
|
||||||
|
|
||||||
|
#include <boost/algorithm/string/concept.hpp>
|
||||||
|
#include <boost/algorithm/string/find_iterator.hpp>
|
||||||
|
#include <boost/algorithm/string/detail/util.hpp>
|
||||||
|
|
||||||
|
/*! \file
|
||||||
|
Defines generic split algorithms. Split algorithms can be
|
||||||
|
used to divide a sequence into several part according
|
||||||
|
to a given criteria. Result is given as a 'container
|
||||||
|
of containers' where elements are copies or references
|
||||||
|
to extracted parts.
|
||||||
|
|
||||||
|
There are two algorithms provided. One iterates over matching
|
||||||
|
substrings, the other one over the gaps between these matches.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace algorithm {
|
||||||
|
|
||||||
|
// iterate find ---------------------------------------------------//
|
||||||
|
|
||||||
|
//! Iter find algorithm
|
||||||
|
/*!
|
||||||
|
This algorithm executes a given finder in iteration on the input,
|
||||||
|
until the end of input is reached, or no match is found.
|
||||||
|
Iteration is done using built-in find_iterator, so the real
|
||||||
|
searching is performed only when needed.
|
||||||
|
In each iteration new match is found and added to the result.
|
||||||
|
|
||||||
|
\param Result A 'container container' to contain the result of search.
|
||||||
|
Both outer and inner container must have constructor taking a pair
|
||||||
|
of iterators as an argument.
|
||||||
|
Typical type of the result is
|
||||||
|
\c std::vector<boost::iterator_range<iterator>>
|
||||||
|
(each element of such a vector will container a range delimiting
|
||||||
|
a match).
|
||||||
|
\param Input A container which will be searched.
|
||||||
|
\param Finder A Finder object used for searching
|
||||||
|
\return A reference to the result
|
||||||
|
|
||||||
|
\note Prior content of the result will be overwritten.
|
||||||
|
*/
|
||||||
|
template<
|
||||||
|
typename SequenceSequenceT,
|
||||||
|
typename RangeT,
|
||||||
|
typename FinderT >
|
||||||
|
inline SequenceSequenceT&
|
||||||
|
iter_find(
|
||||||
|
SequenceSequenceT& Result,
|
||||||
|
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||||
|
RangeT&& Input,
|
||||||
|
#else
|
||||||
|
RangeT& Input,
|
||||||
|
#endif
|
||||||
|
FinderT Finder )
|
||||||
|
{
|
||||||
|
BOOST_CONCEPT_ASSERT((
|
||||||
|
FinderConcept<
|
||||||
|
FinderT,
|
||||||
|
BOOST_STRING_TYPENAME range_iterator<RangeT>::type>
|
||||||
|
));
|
||||||
|
|
||||||
|
iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_input(::boost::as_literal(Input));
|
||||||
|
|
||||||
|
typedef BOOST_STRING_TYPENAME
|
||||||
|
range_iterator<RangeT>::type input_iterator_type;
|
||||||
|
typedef find_iterator<input_iterator_type> find_iterator_type;
|
||||||
|
typedef detail::copy_iterator_rangeF<
|
||||||
|
BOOST_STRING_TYPENAME
|
||||||
|
range_value<SequenceSequenceT>::type,
|
||||||
|
input_iterator_type> copy_range_type;
|
||||||
|
|
||||||
|
input_iterator_type InputEnd=::boost::end(lit_input);
|
||||||
|
|
||||||
|
typedef transform_iterator<copy_range_type, find_iterator_type>
|
||||||
|
transform_iter_type;
|
||||||
|
|
||||||
|
transform_iter_type itBegin=
|
||||||
|
::boost::make_transform_iterator(
|
||||||
|
find_iterator_type( ::boost::begin(lit_input), InputEnd, Finder ),
|
||||||
|
copy_range_type());
|
||||||
|
|
||||||
|
transform_iter_type itEnd=
|
||||||
|
::boost::make_transform_iterator(
|
||||||
|
find_iterator_type(),
|
||||||
|
copy_range_type());
|
||||||
|
|
||||||
|
SequenceSequenceT Tmp(itBegin, itEnd);
|
||||||
|
|
||||||
|
Result.swap(Tmp);
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// iterate split ---------------------------------------------------//
|
||||||
|
|
||||||
|
//! Split find algorithm
|
||||||
|
/*!
|
||||||
|
This algorithm executes a given finder in iteration on the input,
|
||||||
|
until the end of input is reached, or no match is found.
|
||||||
|
Iteration is done using built-in find_iterator, so the real
|
||||||
|
searching is performed only when needed.
|
||||||
|
Each match is used as a separator of segments. These segments are then
|
||||||
|
returned in the result.
|
||||||
|
|
||||||
|
\param Result A 'container container' to contain the result of search.
|
||||||
|
Both outer and inner container must have constructor taking a pair
|
||||||
|
of iterators as an argument.
|
||||||
|
Typical type of the result is
|
||||||
|
\c std::vector<boost::iterator_range<iterator>>
|
||||||
|
(each element of such a vector will container a range delimiting
|
||||||
|
a match).
|
||||||
|
\param Input A container which will be searched.
|
||||||
|
\param Finder A finder object used for searching
|
||||||
|
\return A reference to the result
|
||||||
|
|
||||||
|
\note Prior content of the result will be overwritten.
|
||||||
|
*/
|
||||||
|
template<
|
||||||
|
typename SequenceSequenceT,
|
||||||
|
typename RangeT,
|
||||||
|
typename FinderT >
|
||||||
|
inline SequenceSequenceT&
|
||||||
|
iter_split(
|
||||||
|
SequenceSequenceT& Result,
|
||||||
|
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||||
|
RangeT&& Input,
|
||||||
|
#else
|
||||||
|
RangeT& Input,
|
||||||
|
#endif
|
||||||
|
FinderT Finder )
|
||||||
|
{
|
||||||
|
BOOST_CONCEPT_ASSERT((
|
||||||
|
FinderConcept<FinderT,
|
||||||
|
BOOST_STRING_TYPENAME range_iterator<RangeT>::type>
|
||||||
|
));
|
||||||
|
|
||||||
|
iterator_range<BOOST_STRING_TYPENAME range_iterator<RangeT>::type> lit_input(::boost::as_literal(Input));
|
||||||
|
|
||||||
|
typedef BOOST_STRING_TYPENAME
|
||||||
|
range_iterator<RangeT>::type input_iterator_type;
|
||||||
|
typedef split_iterator<input_iterator_type> find_iterator_type;
|
||||||
|
typedef detail::copy_iterator_rangeF<
|
||||||
|
BOOST_STRING_TYPENAME
|
||||||
|
range_value<SequenceSequenceT>::type,
|
||||||
|
input_iterator_type> copy_range_type;
|
||||||
|
|
||||||
|
input_iterator_type InputEnd=::boost::end(lit_input);
|
||||||
|
|
||||||
|
typedef transform_iterator<copy_range_type, find_iterator_type>
|
||||||
|
transform_iter_type;
|
||||||
|
|
||||||
|
transform_iter_type itBegin=
|
||||||
|
::boost::make_transform_iterator(
|
||||||
|
find_iterator_type( ::boost::begin(lit_input), InputEnd, Finder ),
|
||||||
|
copy_range_type() );
|
||||||
|
|
||||||
|
transform_iter_type itEnd=
|
||||||
|
::boost::make_transform_iterator(
|
||||||
|
find_iterator_type(),
|
||||||
|
copy_range_type() );
|
||||||
|
|
||||||
|
SequenceSequenceT Tmp(itBegin, itEnd);
|
||||||
|
|
||||||
|
Result.swap(Tmp);
|
||||||
|
return Result;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace algorithm
|
||||||
|
|
||||||
|
// pull names to the boost namespace
|
||||||
|
using algorithm::iter_find;
|
||||||
|
using algorithm::iter_split;
|
||||||
|
|
||||||
|
} // namespace boost
|
||||||
|
|
||||||
|
|
||||||
|
#endif // BOOST_STRING_ITER_FIND_HPP
|
42
extern/boost/boost/algorithm/string/predicate_facade.hpp
vendored
Normal file
42
extern/boost/boost/algorithm/string/predicate_facade.hpp
vendored
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
// Boost string_algo library predicate_facade.hpp header file ---------------------------//
|
||||||
|
|
||||||
|
// Copyright Pavol Droba 2002-2003.
|
||||||
|
//
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
|
// See http://www.boost.org/ for updates, documentation, and revision history.
|
||||||
|
|
||||||
|
#ifndef BOOST_STRING_PREDICATE_FACADE_HPP
|
||||||
|
#define BOOST_STRING_PREDICATE_FACADE_HPP
|
||||||
|
|
||||||
|
#include <boost/algorithm/string/config.hpp>
|
||||||
|
|
||||||
|
/*
|
||||||
|
\file boost/algorith/string/predicate_facade.hpp
|
||||||
|
This file contains predicate_facade definition. This template class is used
|
||||||
|
to identify classification predicates, so they can be combined using
|
||||||
|
composition operators.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace algorithm {
|
||||||
|
|
||||||
|
// predicate facade ------------------------------------------------------//
|
||||||
|
|
||||||
|
//! Predicate facade
|
||||||
|
/*!
|
||||||
|
This class allows to recognize classification
|
||||||
|
predicates, so that they can be combined using
|
||||||
|
composition operators.
|
||||||
|
Every classification predicate must be derived from this class.
|
||||||
|
*/
|
||||||
|
template<typename Derived>
|
||||||
|
struct predicate_facade {};
|
||||||
|
|
||||||
|
} // namespace algorithm
|
||||||
|
} // namespace boost
|
||||||
|
|
||||||
|
|
||||||
|
#endif // BOOST_STRING_CLASSIFICATION_DETAIL_HPP
|
175
extern/boost/boost/algorithm/string/split.hpp
vendored
Normal file
175
extern/boost/boost/algorithm/string/split.hpp
vendored
Normal file
@ -0,0 +1,175 @@
|
|||||||
|
// Boost string_algo library split.hpp header file ---------------------------//
|
||||||
|
|
||||||
|
// Copyright Pavol Droba 2002-2006.
|
||||||
|
//
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
|
// See http://www.boost.org/ for updates, documentation, and revision history.
|
||||||
|
|
||||||
|
#ifndef BOOST_STRING_SPLIT_HPP
|
||||||
|
#define BOOST_STRING_SPLIT_HPP
|
||||||
|
|
||||||
|
#include <boost/algorithm/string/config.hpp>
|
||||||
|
|
||||||
|
#include <boost/algorithm/string/iter_find.hpp>
|
||||||
|
#include <boost/algorithm/string/finder.hpp>
|
||||||
|
#include <boost/algorithm/string/compare.hpp>
|
||||||
|
|
||||||
|
/*! \file
|
||||||
|
Defines basic split algorithms.
|
||||||
|
Split algorithms can be used to divide a string
|
||||||
|
into several parts according to given criteria.
|
||||||
|
|
||||||
|
Each part is copied and added as a new element to the
|
||||||
|
output container.
|
||||||
|
Thus the result container must be able to hold copies
|
||||||
|
of the matches (in a compatible structure like std::string) or
|
||||||
|
a reference to it (e.g. using the iterator range class).
|
||||||
|
Examples of such a container are \c std::vector<std::string>
|
||||||
|
or \c std::list<boost::iterator_range<std::string::iterator>>
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace algorithm {
|
||||||
|
|
||||||
|
// find_all ------------------------------------------------------------//
|
||||||
|
|
||||||
|
//! Find all algorithm
|
||||||
|
/*!
|
||||||
|
This algorithm finds all occurrences of the search string
|
||||||
|
in the input.
|
||||||
|
|
||||||
|
Each part is copied and added as a new element to the
|
||||||
|
output container.
|
||||||
|
Thus the result container must be able to hold copies
|
||||||
|
of the matches (in a compatible structure like std::string) or
|
||||||
|
a reference to it (e.g. using the iterator range class).
|
||||||
|
Examples of such a container are \c std::vector<std::string>
|
||||||
|
or \c std::list<boost::iterator_range<std::string::iterator>>
|
||||||
|
|
||||||
|
\param Result A container that can hold copies of references to the substrings
|
||||||
|
\param Input A container which will be searched.
|
||||||
|
\param Search A substring to be searched for.
|
||||||
|
\return A reference the result
|
||||||
|
|
||||||
|
\note Prior content of the result will be overwritten.
|
||||||
|
|
||||||
|
\note This function provides the strong exception-safety guarantee
|
||||||
|
*/
|
||||||
|
template< typename SequenceSequenceT, typename Range1T, typename Range2T >
|
||||||
|
inline SequenceSequenceT& find_all(
|
||||||
|
SequenceSequenceT& Result,
|
||||||
|
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||||
|
Range1T&& Input,
|
||||||
|
#else
|
||||||
|
Range1T& Input,
|
||||||
|
#endif
|
||||||
|
const Range2T& Search)
|
||||||
|
{
|
||||||
|
return ::boost::algorithm::iter_find(
|
||||||
|
Result,
|
||||||
|
Input,
|
||||||
|
::boost::algorithm::first_finder(Search) );
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Find all algorithm ( case insensitive )
|
||||||
|
/*!
|
||||||
|
This algorithm finds all occurrences of the search string
|
||||||
|
in the input.
|
||||||
|
Each part is copied and added as a new element to the
|
||||||
|
output container. Thus the result container must be able to hold copies
|
||||||
|
of the matches (in a compatible structure like std::string) or
|
||||||
|
a reference to it (e.g. using the iterator range class).
|
||||||
|
Examples of such a container are \c std::vector<std::string>
|
||||||
|
or \c std::list<boost::iterator_range<std::string::iterator>>
|
||||||
|
|
||||||
|
Searching is case insensitive.
|
||||||
|
|
||||||
|
\param Result A container that can hold copies of references to the substrings
|
||||||
|
\param Input A container which will be searched.
|
||||||
|
\param Search A substring to be searched for.
|
||||||
|
\param Loc A locale used for case insensitive comparison
|
||||||
|
\return A reference the result
|
||||||
|
|
||||||
|
\note Prior content of the result will be overwritten.
|
||||||
|
|
||||||
|
\note This function provides the strong exception-safety guarantee
|
||||||
|
*/
|
||||||
|
template< typename SequenceSequenceT, typename Range1T, typename Range2T >
|
||||||
|
inline SequenceSequenceT& ifind_all(
|
||||||
|
SequenceSequenceT& Result,
|
||||||
|
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||||
|
Range1T&& Input,
|
||||||
|
#else
|
||||||
|
Range1T& Input,
|
||||||
|
#endif
|
||||||
|
const Range2T& Search,
|
||||||
|
const std::locale& Loc=std::locale() )
|
||||||
|
{
|
||||||
|
return ::boost::algorithm::iter_find(
|
||||||
|
Result,
|
||||||
|
Input,
|
||||||
|
::boost::algorithm::first_finder(Search, is_iequal(Loc) ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// tokenize -------------------------------------------------------------//
|
||||||
|
|
||||||
|
//! Split algorithm
|
||||||
|
/*!
|
||||||
|
Tokenize expression. This function is equivalent to C strtok. Input
|
||||||
|
sequence is split into tokens, separated by separators. Separators
|
||||||
|
are given by means of the predicate.
|
||||||
|
|
||||||
|
Each part is copied and added as a new element to the
|
||||||
|
output container.
|
||||||
|
Thus the result container must be able to hold copies
|
||||||
|
of the matches (in a compatible structure like std::string) or
|
||||||
|
a reference to it (e.g. using the iterator range class).
|
||||||
|
Examples of such a container are \c std::vector<std::string>
|
||||||
|
or \c std::list<boost::iterator_range<std::string::iterator>>
|
||||||
|
|
||||||
|
\param Result A container that can hold copies of references to the substrings
|
||||||
|
\param Input A container which will be searched.
|
||||||
|
\param Pred A predicate to identify separators. This predicate is
|
||||||
|
supposed to return true if a given element is a separator.
|
||||||
|
\param eCompress If eCompress argument is set to token_compress_on, adjacent
|
||||||
|
separators are merged together. Otherwise, every two separators
|
||||||
|
delimit a token.
|
||||||
|
\return A reference the result
|
||||||
|
|
||||||
|
\note Prior content of the result will be overwritten.
|
||||||
|
|
||||||
|
\note This function provides the strong exception-safety guarantee
|
||||||
|
*/
|
||||||
|
template< typename SequenceSequenceT, typename RangeT, typename PredicateT >
|
||||||
|
inline SequenceSequenceT& split(
|
||||||
|
SequenceSequenceT& Result,
|
||||||
|
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||||
|
RangeT&& Input,
|
||||||
|
#else
|
||||||
|
RangeT& Input,
|
||||||
|
#endif
|
||||||
|
PredicateT Pred,
|
||||||
|
token_compress_mode_type eCompress=token_compress_off )
|
||||||
|
{
|
||||||
|
return ::boost::algorithm::iter_split(
|
||||||
|
Result,
|
||||||
|
Input,
|
||||||
|
::boost::algorithm::token_finder( Pred, eCompress ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace algorithm
|
||||||
|
|
||||||
|
// pull names to the boost namespace
|
||||||
|
using algorithm::find_all;
|
||||||
|
using algorithm::ifind_all;
|
||||||
|
using algorithm::split;
|
||||||
|
|
||||||
|
} // namespace boost
|
||||||
|
|
||||||
|
|
||||||
|
#endif // BOOST_STRING_SPLIT_HPP
|
||||||
|
|
398
extern/boost/boost/algorithm/string/trim.hpp
vendored
Normal file
398
extern/boost/boost/algorithm/string/trim.hpp
vendored
Normal file
@ -0,0 +1,398 @@
|
|||||||
|
// Boost string_algo library trim.hpp header file ---------------------------//
|
||||||
|
|
||||||
|
// Copyright Pavol Droba 2002-2003.
|
||||||
|
//
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
// (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
|
// See http://www.boost.org/ for updates, documentation, and revision history.
|
||||||
|
|
||||||
|
#ifndef BOOST_STRING_TRIM_HPP
|
||||||
|
#define BOOST_STRING_TRIM_HPP
|
||||||
|
|
||||||
|
#include <boost/algorithm/string/config.hpp>
|
||||||
|
|
||||||
|
#include <boost/range/begin.hpp>
|
||||||
|
#include <boost/range/end.hpp>
|
||||||
|
#include <boost/range/const_iterator.hpp>
|
||||||
|
#include <boost/range/as_literal.hpp>
|
||||||
|
#include <boost/range/iterator_range_core.hpp>
|
||||||
|
|
||||||
|
#include <boost/algorithm/string/detail/trim.hpp>
|
||||||
|
#include <boost/algorithm/string/classification.hpp>
|
||||||
|
#include <locale>
|
||||||
|
|
||||||
|
/*! \file
|
||||||
|
Defines trim algorithms.
|
||||||
|
Trim algorithms are used to remove trailing and leading spaces from a
|
||||||
|
sequence (string). Space is recognized using given locales.
|
||||||
|
|
||||||
|
Parametric (\c _if) variants use a predicate (functor) to select which characters
|
||||||
|
are to be trimmed..
|
||||||
|
Functions take a selection predicate as a parameter, which is used to determine
|
||||||
|
whether a character is a space. Common predicates are provided in classification.hpp header.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace algorithm {
|
||||||
|
|
||||||
|
// left trim -----------------------------------------------//
|
||||||
|
|
||||||
|
|
||||||
|
//! Left trim - parametric
|
||||||
|
/*!
|
||||||
|
Remove all leading spaces from the input.
|
||||||
|
The supplied predicate is used to determine which characters are considered spaces.
|
||||||
|
The result is a trimmed copy of the input. It is returned as a sequence
|
||||||
|
or copied to the output iterator
|
||||||
|
|
||||||
|
\param Output An output iterator to which the result will be copied
|
||||||
|
\param Input An input range
|
||||||
|
\param IsSpace A unary predicate identifying spaces
|
||||||
|
\return
|
||||||
|
An output iterator pointing just after the last inserted character or
|
||||||
|
a copy of the input
|
||||||
|
|
||||||
|
\note The second variant of this function provides the strong exception-safety guarantee
|
||||||
|
*/
|
||||||
|
template<typename OutputIteratorT, typename RangeT, typename PredicateT>
|
||||||
|
inline OutputIteratorT trim_left_copy_if(
|
||||||
|
OutputIteratorT Output,
|
||||||
|
const RangeT& Input,
|
||||||
|
PredicateT IsSpace)
|
||||||
|
{
|
||||||
|
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_range(::boost::as_literal(Input));
|
||||||
|
|
||||||
|
std::copy(
|
||||||
|
::boost::algorithm::detail::trim_begin(
|
||||||
|
::boost::begin(lit_range),
|
||||||
|
::boost::end(lit_range),
|
||||||
|
IsSpace ),
|
||||||
|
::boost::end(lit_range),
|
||||||
|
Output);
|
||||||
|
|
||||||
|
return Output;
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Left trim - parametric
|
||||||
|
/*!
|
||||||
|
\overload
|
||||||
|
*/
|
||||||
|
template<typename SequenceT, typename PredicateT>
|
||||||
|
inline SequenceT trim_left_copy_if(const SequenceT& Input, PredicateT IsSpace)
|
||||||
|
{
|
||||||
|
return SequenceT(
|
||||||
|
::boost::algorithm::detail::trim_begin(
|
||||||
|
::boost::begin(Input),
|
||||||
|
::boost::end(Input),
|
||||||
|
IsSpace ),
|
||||||
|
::boost::end(Input));
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Left trim - parametric
|
||||||
|
/*!
|
||||||
|
Remove all leading spaces from the input.
|
||||||
|
The result is a trimmed copy of the input.
|
||||||
|
|
||||||
|
\param Input An input sequence
|
||||||
|
\param Loc a locale used for 'space' classification
|
||||||
|
\return A trimmed copy of the input
|
||||||
|
|
||||||
|
\note This function provides the strong exception-safety guarantee
|
||||||
|
*/
|
||||||
|
template<typename SequenceT>
|
||||||
|
inline SequenceT trim_left_copy(const SequenceT& Input, const std::locale& Loc=std::locale())
|
||||||
|
{
|
||||||
|
return
|
||||||
|
::boost::algorithm::trim_left_copy_if(
|
||||||
|
Input,
|
||||||
|
is_space(Loc));
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Left trim
|
||||||
|
/*!
|
||||||
|
Remove all leading spaces from the input. The supplied predicate is
|
||||||
|
used to determine which characters are considered spaces.
|
||||||
|
The input sequence is modified in-place.
|
||||||
|
|
||||||
|
\param Input An input sequence
|
||||||
|
\param IsSpace A unary predicate identifying spaces
|
||||||
|
*/
|
||||||
|
template<typename SequenceT, typename PredicateT>
|
||||||
|
inline void trim_left_if(SequenceT& Input, PredicateT IsSpace)
|
||||||
|
{
|
||||||
|
Input.erase(
|
||||||
|
::boost::begin(Input),
|
||||||
|
::boost::algorithm::detail::trim_begin(
|
||||||
|
::boost::begin(Input),
|
||||||
|
::boost::end(Input),
|
||||||
|
IsSpace));
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Left trim
|
||||||
|
/*!
|
||||||
|
Remove all leading spaces from the input.
|
||||||
|
The Input sequence is modified in-place.
|
||||||
|
|
||||||
|
\param Input An input sequence
|
||||||
|
\param Loc A locale used for 'space' classification
|
||||||
|
*/
|
||||||
|
template<typename SequenceT>
|
||||||
|
inline void trim_left(SequenceT& Input, const std::locale& Loc=std::locale())
|
||||||
|
{
|
||||||
|
::boost::algorithm::trim_left_if(
|
||||||
|
Input,
|
||||||
|
is_space(Loc));
|
||||||
|
}
|
||||||
|
|
||||||
|
// right trim -----------------------------------------------//
|
||||||
|
|
||||||
|
//! Right trim - parametric
|
||||||
|
/*!
|
||||||
|
Remove all trailing spaces from the input.
|
||||||
|
The supplied predicate is used to determine which characters are considered spaces.
|
||||||
|
The result is a trimmed copy of the input. It is returned as a sequence
|
||||||
|
or copied to the output iterator
|
||||||
|
|
||||||
|
\param Output An output iterator to which the result will be copied
|
||||||
|
\param Input An input range
|
||||||
|
\param IsSpace A unary predicate identifying spaces
|
||||||
|
\return
|
||||||
|
An output iterator pointing just after the last inserted character or
|
||||||
|
a copy of the input
|
||||||
|
|
||||||
|
\note The second variant of this function provides the strong exception-safety guarantee
|
||||||
|
*/
|
||||||
|
template<typename OutputIteratorT, typename RangeT, typename PredicateT>
|
||||||
|
inline OutputIteratorT trim_right_copy_if(
|
||||||
|
OutputIteratorT Output,
|
||||||
|
const RangeT& Input,
|
||||||
|
PredicateT IsSpace )
|
||||||
|
{
|
||||||
|
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_range(::boost::as_literal(Input));
|
||||||
|
|
||||||
|
std::copy(
|
||||||
|
::boost::begin(lit_range),
|
||||||
|
::boost::algorithm::detail::trim_end(
|
||||||
|
::boost::begin(lit_range),
|
||||||
|
::boost::end(lit_range),
|
||||||
|
IsSpace ),
|
||||||
|
Output );
|
||||||
|
|
||||||
|
return Output;
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Right trim - parametric
|
||||||
|
/*!
|
||||||
|
\overload
|
||||||
|
*/
|
||||||
|
template<typename SequenceT, typename PredicateT>
|
||||||
|
inline SequenceT trim_right_copy_if(const SequenceT& Input, PredicateT IsSpace)
|
||||||
|
{
|
||||||
|
return SequenceT(
|
||||||
|
::boost::begin(Input),
|
||||||
|
::boost::algorithm::detail::trim_end(
|
||||||
|
::boost::begin(Input),
|
||||||
|
::boost::end(Input),
|
||||||
|
IsSpace)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Right trim
|
||||||
|
/*!
|
||||||
|
Remove all trailing spaces from the input.
|
||||||
|
The result is a trimmed copy of the input
|
||||||
|
|
||||||
|
\param Input An input sequence
|
||||||
|
\param Loc A locale used for 'space' classification
|
||||||
|
\return A trimmed copy of the input
|
||||||
|
|
||||||
|
\note This function provides the strong exception-safety guarantee
|
||||||
|
*/
|
||||||
|
template<typename SequenceT>
|
||||||
|
inline SequenceT trim_right_copy(const SequenceT& Input, const std::locale& Loc=std::locale())
|
||||||
|
{
|
||||||
|
return
|
||||||
|
::boost::algorithm::trim_right_copy_if(
|
||||||
|
Input,
|
||||||
|
is_space(Loc));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//! Right trim - parametric
|
||||||
|
/*!
|
||||||
|
Remove all trailing spaces from the input.
|
||||||
|
The supplied predicate is used to determine which characters are considered spaces.
|
||||||
|
The input sequence is modified in-place.
|
||||||
|
|
||||||
|
\param Input An input sequence
|
||||||
|
\param IsSpace A unary predicate identifying spaces
|
||||||
|
*/
|
||||||
|
template<typename SequenceT, typename PredicateT>
|
||||||
|
inline void trim_right_if(SequenceT& Input, PredicateT IsSpace)
|
||||||
|
{
|
||||||
|
Input.erase(
|
||||||
|
::boost::algorithm::detail::trim_end(
|
||||||
|
::boost::begin(Input),
|
||||||
|
::boost::end(Input),
|
||||||
|
IsSpace ),
|
||||||
|
::boost::end(Input)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//! Right trim
|
||||||
|
/*!
|
||||||
|
Remove all trailing spaces from the input.
|
||||||
|
The input sequence is modified in-place.
|
||||||
|
|
||||||
|
\param Input An input sequence
|
||||||
|
\param Loc A locale used for 'space' classification
|
||||||
|
*/
|
||||||
|
template<typename SequenceT>
|
||||||
|
inline void trim_right(SequenceT& Input, const std::locale& Loc=std::locale())
|
||||||
|
{
|
||||||
|
::boost::algorithm::trim_right_if(
|
||||||
|
Input,
|
||||||
|
is_space(Loc) );
|
||||||
|
}
|
||||||
|
|
||||||
|
// both side trim -----------------------------------------------//
|
||||||
|
|
||||||
|
//! Trim - parametric
|
||||||
|
/*!
|
||||||
|
Remove all trailing and leading spaces from the input.
|
||||||
|
The supplied predicate is used to determine which characters are considered spaces.
|
||||||
|
The result is a trimmed copy of the input. It is returned as a sequence
|
||||||
|
or copied to the output iterator
|
||||||
|
|
||||||
|
\param Output An output iterator to which the result will be copied
|
||||||
|
\param Input An input range
|
||||||
|
\param IsSpace A unary predicate identifying spaces
|
||||||
|
\return
|
||||||
|
An output iterator pointing just after the last inserted character or
|
||||||
|
a copy of the input
|
||||||
|
|
||||||
|
\note The second variant of this function provides the strong exception-safety guarantee
|
||||||
|
*/
|
||||||
|
template<typename OutputIteratorT, typename RangeT, typename PredicateT>
|
||||||
|
inline OutputIteratorT trim_copy_if(
|
||||||
|
OutputIteratorT Output,
|
||||||
|
const RangeT& Input,
|
||||||
|
PredicateT IsSpace)
|
||||||
|
{
|
||||||
|
iterator_range<BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type> lit_range(::boost::as_literal(Input));
|
||||||
|
|
||||||
|
BOOST_STRING_TYPENAME
|
||||||
|
range_const_iterator<RangeT>::type TrimEnd=
|
||||||
|
::boost::algorithm::detail::trim_end(
|
||||||
|
::boost::begin(lit_range),
|
||||||
|
::boost::end(lit_range),
|
||||||
|
IsSpace);
|
||||||
|
|
||||||
|
std::copy(
|
||||||
|
detail::trim_begin(
|
||||||
|
::boost::begin(lit_range), TrimEnd, IsSpace),
|
||||||
|
TrimEnd,
|
||||||
|
Output
|
||||||
|
);
|
||||||
|
|
||||||
|
return Output;
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Trim - parametric
|
||||||
|
/*!
|
||||||
|
\overload
|
||||||
|
*/
|
||||||
|
template<typename SequenceT, typename PredicateT>
|
||||||
|
inline SequenceT trim_copy_if(const SequenceT& Input, PredicateT IsSpace)
|
||||||
|
{
|
||||||
|
BOOST_STRING_TYPENAME
|
||||||
|
range_const_iterator<SequenceT>::type TrimEnd=
|
||||||
|
::boost::algorithm::detail::trim_end(
|
||||||
|
::boost::begin(Input),
|
||||||
|
::boost::end(Input),
|
||||||
|
IsSpace);
|
||||||
|
|
||||||
|
return SequenceT(
|
||||||
|
detail::trim_begin(
|
||||||
|
::boost::begin(Input),
|
||||||
|
TrimEnd,
|
||||||
|
IsSpace),
|
||||||
|
TrimEnd
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Trim
|
||||||
|
/*!
|
||||||
|
Remove all leading and trailing spaces from the input.
|
||||||
|
The result is a trimmed copy of the input
|
||||||
|
|
||||||
|
\param Input An input sequence
|
||||||
|
\param Loc A locale used for 'space' classification
|
||||||
|
\return A trimmed copy of the input
|
||||||
|
|
||||||
|
\note This function provides the strong exception-safety guarantee
|
||||||
|
*/
|
||||||
|
template<typename SequenceT>
|
||||||
|
inline SequenceT trim_copy( const SequenceT& Input, const std::locale& Loc=std::locale() )
|
||||||
|
{
|
||||||
|
return
|
||||||
|
::boost::algorithm::trim_copy_if(
|
||||||
|
Input,
|
||||||
|
is_space(Loc) );
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Trim
|
||||||
|
/*!
|
||||||
|
Remove all leading and trailing spaces from the input.
|
||||||
|
The supplied predicate is used to determine which characters are considered spaces.
|
||||||
|
The input sequence is modified in-place.
|
||||||
|
|
||||||
|
\param Input An input sequence
|
||||||
|
\param IsSpace A unary predicate identifying spaces
|
||||||
|
*/
|
||||||
|
template<typename SequenceT, typename PredicateT>
|
||||||
|
inline void trim_if(SequenceT& Input, PredicateT IsSpace)
|
||||||
|
{
|
||||||
|
::boost::algorithm::trim_right_if( Input, IsSpace );
|
||||||
|
::boost::algorithm::trim_left_if( Input, IsSpace );
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Trim
|
||||||
|
/*!
|
||||||
|
Remove all leading and trailing spaces from the input.
|
||||||
|
The input sequence is modified in-place.
|
||||||
|
|
||||||
|
\param Input An input sequence
|
||||||
|
\param Loc A locale used for 'space' classification
|
||||||
|
*/
|
||||||
|
template<typename SequenceT>
|
||||||
|
inline void trim(SequenceT& Input, const std::locale& Loc=std::locale())
|
||||||
|
{
|
||||||
|
::boost::algorithm::trim_if(
|
||||||
|
Input,
|
||||||
|
is_space( Loc ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace algorithm
|
||||||
|
|
||||||
|
// pull names to the boost namespace
|
||||||
|
using algorithm::trim_left;
|
||||||
|
using algorithm::trim_left_if;
|
||||||
|
using algorithm::trim_left_copy;
|
||||||
|
using algorithm::trim_left_copy_if;
|
||||||
|
using algorithm::trim_right;
|
||||||
|
using algorithm::trim_right_if;
|
||||||
|
using algorithm::trim_right_copy;
|
||||||
|
using algorithm::trim_right_copy_if;
|
||||||
|
using algorithm::trim;
|
||||||
|
using algorithm::trim_if;
|
||||||
|
using algorithm::trim_copy;
|
||||||
|
using algorithm::trim_copy_if;
|
||||||
|
|
||||||
|
} // namespace boost
|
||||||
|
|
||||||
|
#endif // BOOST_STRING_TRIM_HPP
|
19
extern/boost/boost/align/align.hpp
vendored
Normal file
19
extern/boost/boost/align/align.hpp
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2014-2015 Glen Joseph Fernandes
|
||||||
|
(glenjofe@gmail.com)
|
||||||
|
|
||||||
|
Distributed under the Boost Software License, Version 1.0.
|
||||||
|
(http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*/
|
||||||
|
#ifndef BOOST_ALIGN_ALIGN_HPP
|
||||||
|
#define BOOST_ALIGN_ALIGN_HPP
|
||||||
|
|
||||||
|
#include <boost/config.hpp>
|
||||||
|
|
||||||
|
#if !defined(BOOST_NO_CXX11_STD_ALIGN) && !defined(BOOST_LIBSTDCXX_VERSION)
|
||||||
|
#include <boost/align/detail/align_cxx11.hpp>
|
||||||
|
#else
|
||||||
|
#include <boost/align/detail/align.hpp>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
47
extern/boost/boost/align/aligned_alloc.hpp
vendored
Normal file
47
extern/boost/boost/align/aligned_alloc.hpp
vendored
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2014-2015 Glen Joseph Fernandes
|
||||||
|
(glenjofe@gmail.com)
|
||||||
|
|
||||||
|
Distributed under the Boost Software License, Version 1.0.
|
||||||
|
(http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*/
|
||||||
|
#ifndef BOOST_ALIGN_ALIGNED_ALLOC_HPP
|
||||||
|
#define BOOST_ALIGN_ALIGNED_ALLOC_HPP
|
||||||
|
|
||||||
|
#include <boost/config.hpp>
|
||||||
|
|
||||||
|
#if defined(BOOST_HAS_UNISTD_H)
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__APPLE__) || defined(__APPLE_CC__) || defined(macintosh)
|
||||||
|
#include <AvailabilityMacros.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(BOOST_ALIGN_USE_ALIGN)
|
||||||
|
#include <boost/align/detail/aligned_alloc.hpp>
|
||||||
|
#elif defined(BOOST_ALIGN_USE_NEW)
|
||||||
|
#include <boost/align/detail/aligned_alloc_new.hpp>
|
||||||
|
#elif defined(_MSC_VER) && !defined(UNDER_CE)
|
||||||
|
#include <boost/align/detail/aligned_alloc_msvc.hpp>
|
||||||
|
#elif defined(__MINGW32__) && (__MSVCRT_VERSION__ >= 0x0700)
|
||||||
|
#include <boost/align/detail/aligned_alloc_msvc.hpp>
|
||||||
|
#elif defined(__MINGW32__)
|
||||||
|
#include <boost/align/detail/aligned_alloc_mingw.hpp>
|
||||||
|
#elif MAC_OS_X_VERSION_MIN_REQUIRED >= 1090
|
||||||
|
#include <boost/align/detail/aligned_alloc_posix.hpp>
|
||||||
|
#elif MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
|
||||||
|
#include <boost/align/detail/aligned_alloc_macos.hpp>
|
||||||
|
#elif defined(__ANDROID__)
|
||||||
|
#include <boost/align/detail/aligned_alloc_android.hpp>
|
||||||
|
#elif defined(__SunOS_5_11) || defined(__SunOS_5_12)
|
||||||
|
#include <boost/align/detail/aligned_alloc_posix.hpp>
|
||||||
|
#elif defined(sun) || defined(__sun)
|
||||||
|
#include <boost/align/detail/aligned_alloc_sunos.hpp>
|
||||||
|
#elif (_POSIX_C_SOURCE >= 200112L) || (_XOPEN_SOURCE >= 600)
|
||||||
|
#include <boost/align/detail/aligned_alloc_posix.hpp>
|
||||||
|
#else
|
||||||
|
#include <boost/align/detail/aligned_alloc.hpp>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
54
extern/boost/boost/align/alignment_of.hpp
vendored
Normal file
54
extern/boost/boost/align/alignment_of.hpp
vendored
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2014-2016 Glen Joseph Fernandes
|
||||||
|
(glenjofe@gmail.com)
|
||||||
|
|
||||||
|
Distributed under the Boost Software License, Version 1.0.
|
||||||
|
(http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*/
|
||||||
|
#ifndef BOOST_ALIGN_ALIGNMENT_OF_HPP
|
||||||
|
#define BOOST_ALIGN_ALIGNMENT_OF_HPP
|
||||||
|
|
||||||
|
#include <boost/align/detail/element_type.hpp>
|
||||||
|
#include <boost/align/alignment_of_forward.hpp>
|
||||||
|
|
||||||
|
#if defined(_MSC_VER) && defined(__clang__)
|
||||||
|
#include <boost/align/detail/alignment_of_cxx11.hpp>
|
||||||
|
#elif defined(BOOST_MSVC)
|
||||||
|
#include <boost/align/detail/alignment_of_msvc.hpp>
|
||||||
|
#elif defined(__GNUC__) && defined(__unix__) && !defined(__LP64__)
|
||||||
|
#include <boost/align/detail/alignment_of.hpp>
|
||||||
|
#elif defined(BOOST_CLANG) && !defined(__x86_64__)
|
||||||
|
#include <boost/align/detail/alignment_of.hpp>
|
||||||
|
#elif !defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS)
|
||||||
|
#include <boost/align/detail/alignment_of_cxx11.hpp>
|
||||||
|
#elif defined(__ghs__) && (__GHS_VERSION_NUMBER >= 600)
|
||||||
|
#include <boost/align/detail/alignment_of_gcc.hpp>
|
||||||
|
#elif defined(BOOST_CODEGEARC)
|
||||||
|
#include <boost/align/detail/alignment_of_codegear.hpp>
|
||||||
|
#elif defined(BOOST_CLANG)
|
||||||
|
#include <boost/align/detail/alignment_of_clang.hpp>
|
||||||
|
#elif __GNUC__ > 4
|
||||||
|
#include <boost/align/detail/alignment_of_gcc.hpp>
|
||||||
|
#elif (__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)
|
||||||
|
#include <boost/align/detail/alignment_of_gcc.hpp>
|
||||||
|
#else
|
||||||
|
#include <boost/align/detail/alignment_of.hpp>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace alignment {
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
struct alignment_of
|
||||||
|
: detail::alignment_of<typename
|
||||||
|
detail::element_type<T>::type>::type { };
|
||||||
|
|
||||||
|
#if !defined(BOOST_NO_CXX14_VARIABLE_TEMPLATES)
|
||||||
|
template<class T>
|
||||||
|
constexpr std::size_t alignment_of_v = alignment_of<T>::value;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
} /* alignment */
|
||||||
|
} /* boost */
|
||||||
|
|
||||||
|
#endif
|
20
extern/boost/boost/align/alignment_of_forward.hpp
vendored
Normal file
20
extern/boost/boost/align/alignment_of_forward.hpp
vendored
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2014 Glen Joseph Fernandes
|
||||||
|
(glenjofe@gmail.com)
|
||||||
|
|
||||||
|
Distributed under the Boost Software License, Version 1.0.
|
||||||
|
(http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*/
|
||||||
|
#ifndef BOOST_ALIGN_ALIGNMENT_OF_FORWARD_HPP
|
||||||
|
#define BOOST_ALIGN_ALIGNMENT_OF_FORWARD_HPP
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace alignment {
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
struct alignment_of;
|
||||||
|
|
||||||
|
} /* alignment */
|
||||||
|
} /* boost */
|
||||||
|
|
||||||
|
#endif
|
38
extern/boost/boost/align/detail/align.hpp
vendored
Normal file
38
extern/boost/boost/align/detail/align.hpp
vendored
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2014-2020 Glen Joseph Fernandes
|
||||||
|
(glenjofe@gmail.com)
|
||||||
|
|
||||||
|
Distributed under the Boost Software License, Version 1.0.
|
||||||
|
(http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*/
|
||||||
|
#ifndef BOOST_ALIGN_DETAIL_ALIGN_HPP
|
||||||
|
#define BOOST_ALIGN_DETAIL_ALIGN_HPP
|
||||||
|
|
||||||
|
#include <boost/align/detail/is_alignment.hpp>
|
||||||
|
#include <boost/assert.hpp>
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace alignment {
|
||||||
|
|
||||||
|
inline void*
|
||||||
|
align(std::size_t alignment, std::size_t size, void*& ptr,
|
||||||
|
std::size_t& space)
|
||||||
|
{
|
||||||
|
BOOST_ASSERT(boost::alignment::detail::is_alignment(alignment));
|
||||||
|
if (size <= space) {
|
||||||
|
char* p = reinterpret_cast<char*>(~(alignment - 1) &
|
||||||
|
(reinterpret_cast<std::size_t>(ptr) + alignment - 1));
|
||||||
|
std::size_t n = p - static_cast<char*>(ptr);
|
||||||
|
if (n <= space - size) {
|
||||||
|
ptr = p;
|
||||||
|
space -= n;
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
} /* alignment */
|
||||||
|
} /* boost */
|
||||||
|
|
||||||
|
#endif
|
21
extern/boost/boost/align/detail/align_cxx11.hpp
vendored
Normal file
21
extern/boost/boost/align/detail/align_cxx11.hpp
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2014 Glen Joseph Fernandes
|
||||||
|
(glenjofe@gmail.com)
|
||||||
|
|
||||||
|
Distributed under the Boost Software License, Version 1.0.
|
||||||
|
(http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*/
|
||||||
|
#ifndef BOOST_ALIGN_DETAIL_ALIGN_CXX11_HPP
|
||||||
|
#define BOOST_ALIGN_DETAIL_ALIGN_CXX11_HPP
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace alignment {
|
||||||
|
|
||||||
|
using std::align;
|
||||||
|
|
||||||
|
} /* alignment */
|
||||||
|
} /* boost */
|
||||||
|
|
||||||
|
#endif
|
52
extern/boost/boost/align/detail/aligned_alloc.hpp
vendored
Normal file
52
extern/boost/boost/align/detail/aligned_alloc.hpp
vendored
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2014-2015 Glen Joseph Fernandes
|
||||||
|
(glenjofe@gmail.com)
|
||||||
|
|
||||||
|
Distributed under the Boost Software License, Version 1.0.
|
||||||
|
(http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*/
|
||||||
|
#ifndef BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_HPP
|
||||||
|
#define BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_HPP
|
||||||
|
|
||||||
|
#include <boost/align/detail/is_alignment.hpp>
|
||||||
|
#include <boost/align/align.hpp>
|
||||||
|
#include <boost/align/alignment_of.hpp>
|
||||||
|
#include <boost/assert.hpp>
|
||||||
|
#include <cstdlib>
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace alignment {
|
||||||
|
|
||||||
|
inline void*
|
||||||
|
aligned_alloc(std::size_t alignment, std::size_t size) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
BOOST_ASSERT(detail::is_alignment(alignment));
|
||||||
|
enum {
|
||||||
|
N = alignment_of<void*>::value
|
||||||
|
};
|
||||||
|
if (alignment < N) {
|
||||||
|
alignment = N;
|
||||||
|
}
|
||||||
|
std::size_t n = size + alignment - N;
|
||||||
|
void* p = std::malloc(sizeof(void*) + n);
|
||||||
|
if (p) {
|
||||||
|
void* r = static_cast<char*>(p) + sizeof(void*);
|
||||||
|
(void)boost::alignment::align(alignment, size, r, n);
|
||||||
|
*(static_cast<void**>(r) - 1) = p;
|
||||||
|
p = r;
|
||||||
|
}
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void
|
||||||
|
aligned_free(void* ptr) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
if (ptr) {
|
||||||
|
std::free(*(static_cast<void**>(ptr) - 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} /* alignment */
|
||||||
|
} /* boost */
|
||||||
|
|
||||||
|
#endif
|
34
extern/boost/boost/align/detail/aligned_alloc_android.hpp
vendored
Normal file
34
extern/boost/boost/align/detail/aligned_alloc_android.hpp
vendored
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2014 Glen Joseph Fernandes
|
||||||
|
(glenjofe@gmail.com)
|
||||||
|
|
||||||
|
Distributed under the Boost Software License, Version 1.0.
|
||||||
|
(http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*/
|
||||||
|
#ifndef BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_ANDROID_HPP
|
||||||
|
#define BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_ANDROID_HPP
|
||||||
|
|
||||||
|
#include <boost/align/detail/is_alignment.hpp>
|
||||||
|
#include <boost/assert.hpp>
|
||||||
|
#include <malloc.h>
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace alignment {
|
||||||
|
|
||||||
|
inline void*
|
||||||
|
aligned_alloc(std::size_t alignment, std::size_t size) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
BOOST_ASSERT(detail::is_alignment(alignment));
|
||||||
|
return ::memalign(alignment, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void
|
||||||
|
aligned_free(void* ptr) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
::free(ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
} /* alignment */
|
||||||
|
} /* boost */
|
||||||
|
|
||||||
|
#endif
|
44
extern/boost/boost/align/detail/aligned_alloc_macos.hpp
vendored
Normal file
44
extern/boost/boost/align/detail/aligned_alloc_macos.hpp
vendored
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2014 Glen Joseph Fernandes
|
||||||
|
(glenjofe@gmail.com)
|
||||||
|
|
||||||
|
Distributed under the Boost Software License, Version 1.0.
|
||||||
|
(http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*/
|
||||||
|
#ifndef BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_MACOS_HPP
|
||||||
|
#define BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_MACOS_HPP
|
||||||
|
|
||||||
|
#include <boost/align/detail/is_alignment.hpp>
|
||||||
|
#include <boost/assert.hpp>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace alignment {
|
||||||
|
|
||||||
|
inline void*
|
||||||
|
aligned_alloc(std::size_t alignment, std::size_t size) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
BOOST_ASSERT(detail::is_alignment(alignment));
|
||||||
|
if (size == 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (alignment < sizeof(void*)) {
|
||||||
|
alignment = sizeof(void*);
|
||||||
|
}
|
||||||
|
void* p;
|
||||||
|
if (::posix_memalign(&p, alignment, size) != 0) {
|
||||||
|
p = 0;
|
||||||
|
}
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void
|
||||||
|
aligned_free(void* ptr) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
::free(ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
} /* alignment */
|
||||||
|
} /* boost */
|
||||||
|
|
||||||
|
#endif
|
34
extern/boost/boost/align/detail/aligned_alloc_mingw.hpp
vendored
Normal file
34
extern/boost/boost/align/detail/aligned_alloc_mingw.hpp
vendored
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2020 Glen Joseph Fernandes
|
||||||
|
(glenjofe@gmail.com)
|
||||||
|
|
||||||
|
Distributed under the Boost Software License, Version 1.0.
|
||||||
|
(http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*/
|
||||||
|
#ifndef BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_MINGW_HPP
|
||||||
|
#define BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_MINGW_HPP
|
||||||
|
|
||||||
|
#include <boost/align/detail/is_alignment.hpp>
|
||||||
|
#include <boost/assert.hpp>
|
||||||
|
#include <malloc.h>
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace alignment {
|
||||||
|
|
||||||
|
inline void*
|
||||||
|
aligned_alloc(std::size_t alignment, std::size_t size) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
BOOST_ASSERT(detail::is_alignment(alignment));
|
||||||
|
return ::__mingw_aligned_malloc(size, alignment);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void
|
||||||
|
aligned_free(void* ptr) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
::__mingw_aligned_free(ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
} /* alignment */
|
||||||
|
} /* boost */
|
||||||
|
|
||||||
|
#endif
|
34
extern/boost/boost/align/detail/aligned_alloc_msvc.hpp
vendored
Normal file
34
extern/boost/boost/align/detail/aligned_alloc_msvc.hpp
vendored
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2014 Glen Joseph Fernandes
|
||||||
|
(glenjofe@gmail.com)
|
||||||
|
|
||||||
|
Distributed under the Boost Software License, Version 1.0.
|
||||||
|
(http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*/
|
||||||
|
#ifndef BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_MSVC_HPP
|
||||||
|
#define BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_MSVC_HPP
|
||||||
|
|
||||||
|
#include <boost/align/detail/is_alignment.hpp>
|
||||||
|
#include <boost/assert.hpp>
|
||||||
|
#include <malloc.h>
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace alignment {
|
||||||
|
|
||||||
|
inline void*
|
||||||
|
aligned_alloc(std::size_t alignment, std::size_t size) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
BOOST_ASSERT(detail::is_alignment(alignment));
|
||||||
|
return ::_aligned_malloc(size, alignment);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void
|
||||||
|
aligned_free(void* ptr) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
::_aligned_free(ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
} /* alignment */
|
||||||
|
} /* boost */
|
||||||
|
|
||||||
|
#endif
|
52
extern/boost/boost/align/detail/aligned_alloc_new.hpp
vendored
Normal file
52
extern/boost/boost/align/detail/aligned_alloc_new.hpp
vendored
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2014-2015 Glen Joseph Fernandes
|
||||||
|
(glenjofe@gmail.com)
|
||||||
|
|
||||||
|
Distributed under the Boost Software License, Version 1.0.
|
||||||
|
(http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*/
|
||||||
|
#ifndef BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_NEW_HPP
|
||||||
|
#define BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_NEW_HPP
|
||||||
|
|
||||||
|
#include <boost/align/detail/is_alignment.hpp>
|
||||||
|
#include <boost/align/align.hpp>
|
||||||
|
#include <boost/align/alignment_of.hpp>
|
||||||
|
#include <boost/assert.hpp>
|
||||||
|
#include <new>
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace alignment {
|
||||||
|
|
||||||
|
inline void*
|
||||||
|
aligned_alloc(std::size_t alignment, std::size_t size) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
BOOST_ASSERT(detail::is_alignment(alignment));
|
||||||
|
enum {
|
||||||
|
N = alignment_of<void*>::value
|
||||||
|
};
|
||||||
|
if (alignment < N) {
|
||||||
|
alignment = N;
|
||||||
|
}
|
||||||
|
std::size_t n = size + alignment - N;
|
||||||
|
void* p = ::operator new(sizeof(void*) + n, std::nothrow);
|
||||||
|
if (p) {
|
||||||
|
void* r = static_cast<char*>(p) + sizeof(void*);
|
||||||
|
(void)boost::alignment::align(alignment, size, r, n);
|
||||||
|
*(static_cast<void**>(r) - 1) = p;
|
||||||
|
p = r;
|
||||||
|
}
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void
|
||||||
|
aligned_free(void* ptr) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
if (ptr) {
|
||||||
|
::operator delete(*(static_cast<void**>(ptr) - 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} /* alignment */
|
||||||
|
} /* boost */
|
||||||
|
|
||||||
|
#endif
|
41
extern/boost/boost/align/detail/aligned_alloc_posix.hpp
vendored
Normal file
41
extern/boost/boost/align/detail/aligned_alloc_posix.hpp
vendored
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2014 Glen Joseph Fernandes
|
||||||
|
(glenjofe@gmail.com)
|
||||||
|
|
||||||
|
Distributed under the Boost Software License, Version 1.0.
|
||||||
|
(http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*/
|
||||||
|
#ifndef BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_POSIX_HPP
|
||||||
|
#define BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_POSIX_HPP
|
||||||
|
|
||||||
|
#include <boost/align/detail/is_alignment.hpp>
|
||||||
|
#include <boost/assert.hpp>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace alignment {
|
||||||
|
|
||||||
|
inline void*
|
||||||
|
aligned_alloc(std::size_t alignment, std::size_t size) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
BOOST_ASSERT(detail::is_alignment(alignment));
|
||||||
|
if (alignment < sizeof(void*)) {
|
||||||
|
alignment = sizeof(void*);
|
||||||
|
}
|
||||||
|
void* p;
|
||||||
|
if (::posix_memalign(&p, alignment, size) != 0) {
|
||||||
|
p = 0;
|
||||||
|
}
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void
|
||||||
|
aligned_free(void* ptr) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
::free(ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
} /* alignment */
|
||||||
|
} /* boost */
|
||||||
|
|
||||||
|
#endif
|
34
extern/boost/boost/align/detail/aligned_alloc_sunos.hpp
vendored
Normal file
34
extern/boost/boost/align/detail/aligned_alloc_sunos.hpp
vendored
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2014 Glen Joseph Fernandes
|
||||||
|
(glenjofe@gmail.com)
|
||||||
|
|
||||||
|
Distributed under the Boost Software License, Version 1.0.
|
||||||
|
(http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*/
|
||||||
|
#ifndef BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_SUNOS_HPP
|
||||||
|
#define BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_SUNOS_HPP
|
||||||
|
|
||||||
|
#include <boost/align/detail/is_alignment.hpp>
|
||||||
|
#include <boost/assert.hpp>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace alignment {
|
||||||
|
|
||||||
|
inline void*
|
||||||
|
aligned_alloc(std::size_t alignment, std::size_t size) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
BOOST_ASSERT(detail::is_alignment(alignment));
|
||||||
|
return ::memalign(alignment, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void
|
||||||
|
aligned_free(void* ptr) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
::free(ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
} /* alignment */
|
||||||
|
} /* boost */
|
||||||
|
|
||||||
|
#endif
|
31
extern/boost/boost/align/detail/alignment_of.hpp
vendored
Normal file
31
extern/boost/boost/align/detail/alignment_of.hpp
vendored
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2014-2015 Glen Joseph Fernandes
|
||||||
|
(glenjofe@gmail.com)
|
||||||
|
|
||||||
|
Distributed under the Boost Software License, Version 1.0.
|
||||||
|
(http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*/
|
||||||
|
#ifndef BOOST_ALIGN_DETAIL_ALIGNMENT_OF_HPP
|
||||||
|
#define BOOST_ALIGN_DETAIL_ALIGNMENT_OF_HPP
|
||||||
|
|
||||||
|
#include <boost/align/detail/min_size.hpp>
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace alignment {
|
||||||
|
namespace detail {
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
struct offset_value {
|
||||||
|
char value;
|
||||||
|
T object;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
struct alignment_of
|
||||||
|
: min_size<sizeof(T), sizeof(offset_value<T>) - sizeof(T)> { };
|
||||||
|
|
||||||
|
} /* detail */
|
||||||
|
} /* alignment */
|
||||||
|
} /* boost */
|
||||||
|
|
||||||
|
#endif
|
26
extern/boost/boost/align/detail/alignment_of_clang.hpp
vendored
Normal file
26
extern/boost/boost/align/detail/alignment_of_clang.hpp
vendored
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2014 Glen Joseph Fernandes
|
||||||
|
(glenjofe@gmail.com)
|
||||||
|
|
||||||
|
Distributed under the Boost Software License, Version 1.0.
|
||||||
|
(http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*/
|
||||||
|
#ifndef BOOST_ALIGN_DETAIL_ALIGNMENT_OF_CLANG_HPP
|
||||||
|
#define BOOST_ALIGN_DETAIL_ALIGNMENT_OF_CLANG_HPP
|
||||||
|
|
||||||
|
#include <boost/align/detail/integral_constant.hpp>
|
||||||
|
#include <cstddef>
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace alignment {
|
||||||
|
namespace detail {
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
struct alignment_of
|
||||||
|
: integral_constant<std::size_t, __alignof(T)> { };
|
||||||
|
|
||||||
|
} /* detail */
|
||||||
|
} /* alignment */
|
||||||
|
} /* boost */
|
||||||
|
|
||||||
|
#endif
|
26
extern/boost/boost/align/detail/alignment_of_codegear.hpp
vendored
Normal file
26
extern/boost/boost/align/detail/alignment_of_codegear.hpp
vendored
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2014 Glen Joseph Fernandes
|
||||||
|
(glenjofe@gmail.com)
|
||||||
|
|
||||||
|
Distributed under the Boost Software License, Version 1.0.
|
||||||
|
(http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*/
|
||||||
|
#ifndef BOOST_ALIGN_DETAIL_ALIGNMENT_OF_CODEGEAR_HPP
|
||||||
|
#define BOOST_ALIGN_DETAIL_ALIGNMENT_OF_CODEGEAR_HPP
|
||||||
|
|
||||||
|
#include <boost/align/detail/integral_constant.hpp>
|
||||||
|
#include <cstddef>
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace alignment {
|
||||||
|
namespace detail {
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
struct alignment_of
|
||||||
|
: integral_constant<std::size_t, alignof(T)> { };
|
||||||
|
|
||||||
|
} /* detail */
|
||||||
|
} /* alignment */
|
||||||
|
} /* boost */
|
||||||
|
|
||||||
|
#endif
|
23
extern/boost/boost/align/detail/alignment_of_cxx11.hpp
vendored
Normal file
23
extern/boost/boost/align/detail/alignment_of_cxx11.hpp
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2014 Glen Joseph Fernandes
|
||||||
|
(glenjofe@gmail.com)
|
||||||
|
|
||||||
|
Distributed under the Boost Software License, Version 1.0.
|
||||||
|
(http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*/
|
||||||
|
#ifndef BOOST_ALIGN_DETAIL_ALIGNMENT_OF_CXX11_HPP
|
||||||
|
#define BOOST_ALIGN_DETAIL_ALIGNMENT_OF_CXX11_HPP
|
||||||
|
|
||||||
|
#include <type_traits>
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace alignment {
|
||||||
|
namespace detail {
|
||||||
|
|
||||||
|
using std::alignment_of;
|
||||||
|
|
||||||
|
} /* detail */
|
||||||
|
} /* alignment */
|
||||||
|
} /* boost */
|
||||||
|
|
||||||
|
#endif
|
26
extern/boost/boost/align/detail/alignment_of_gcc.hpp
vendored
Normal file
26
extern/boost/boost/align/detail/alignment_of_gcc.hpp
vendored
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2014 Glen Joseph Fernandes
|
||||||
|
(glenjofe@gmail.com)
|
||||||
|
|
||||||
|
Distributed under the Boost Software License, Version 1.0.
|
||||||
|
(http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*/
|
||||||
|
#ifndef BOOST_ALIGN_DETAIL_ALIGNMENT_OF_GCC_HPP
|
||||||
|
#define BOOST_ALIGN_DETAIL_ALIGNMENT_OF_GCC_HPP
|
||||||
|
|
||||||
|
#include <boost/align/detail/integral_constant.hpp>
|
||||||
|
#include <cstddef>
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace alignment {
|
||||||
|
namespace detail {
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
struct alignment_of
|
||||||
|
: integral_constant<std::size_t, __alignof__(T)> { };
|
||||||
|
|
||||||
|
} /* detail */
|
||||||
|
} /* alignment */
|
||||||
|
} /* boost */
|
||||||
|
|
||||||
|
#endif
|
32
extern/boost/boost/align/detail/alignment_of_msvc.hpp
vendored
Normal file
32
extern/boost/boost/align/detail/alignment_of_msvc.hpp
vendored
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2014-2015 Glen Joseph Fernandes
|
||||||
|
(glenjofe@gmail.com)
|
||||||
|
|
||||||
|
Distributed under the Boost Software License, Version 1.0.
|
||||||
|
(http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*/
|
||||||
|
#ifndef BOOST_ALIGN_DETAIL_ALIGNMENT_OF_MSVC_HPP
|
||||||
|
#define BOOST_ALIGN_DETAIL_ALIGNMENT_OF_MSVC_HPP
|
||||||
|
|
||||||
|
#include <boost/align/detail/min_size.hpp>
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace alignment {
|
||||||
|
namespace detail {
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
struct offset_value {
|
||||||
|
T first;
|
||||||
|
char value;
|
||||||
|
T second;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
struct alignment_of
|
||||||
|
: min_size<sizeof(T), sizeof(offset_value<T>) - (sizeof(T) << 1)> { };
|
||||||
|
|
||||||
|
} /* detail */
|
||||||
|
} /* alignment */
|
||||||
|
} /* boost */
|
||||||
|
|
||||||
|
#endif
|
91
extern/boost/boost/align/detail/element_type.hpp
vendored
Normal file
91
extern/boost/boost/align/detail/element_type.hpp
vendored
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015 Glen Joseph Fernandes
|
||||||
|
(glenjofe@gmail.com)
|
||||||
|
|
||||||
|
Distributed under the Boost Software License, Version 1.0.
|
||||||
|
(http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*/
|
||||||
|
#ifndef BOOST_ALIGN_DETAIL_ELEMENT_TYPE_HPP
|
||||||
|
#define BOOST_ALIGN_DETAIL_ELEMENT_TYPE_HPP
|
||||||
|
|
||||||
|
#include <boost/config.hpp>
|
||||||
|
|
||||||
|
#if !defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS)
|
||||||
|
#include <type_traits>
|
||||||
|
#else
|
||||||
|
#include <cstddef>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace alignment {
|
||||||
|
namespace detail {
|
||||||
|
|
||||||
|
#if !defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS)
|
||||||
|
using std::remove_reference;
|
||||||
|
using std::remove_all_extents;
|
||||||
|
using std::remove_cv;
|
||||||
|
#else
|
||||||
|
template<class T>
|
||||||
|
struct remove_reference {
|
||||||
|
typedef T type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
struct remove_reference<T&> {
|
||||||
|
typedef T type;
|
||||||
|
};
|
||||||
|
|
||||||
|
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||||
|
template<class T>
|
||||||
|
struct remove_reference<T&&> {
|
||||||
|
typedef T type;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
struct remove_all_extents {
|
||||||
|
typedef T type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
struct remove_all_extents<T[]> {
|
||||||
|
typedef typename remove_all_extents<T>::type type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<class T, std::size_t N>
|
||||||
|
struct remove_all_extents<T[N]> {
|
||||||
|
typedef typename remove_all_extents<T>::type type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
struct remove_cv {
|
||||||
|
typedef T type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
struct remove_cv<const T> {
|
||||||
|
typedef T type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
struct remove_cv<volatile T> {
|
||||||
|
typedef T type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
struct remove_cv<const volatile T> {
|
||||||
|
typedef T type;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
struct element_type {
|
||||||
|
typedef typename remove_cv<typename remove_all_extents<typename
|
||||||
|
remove_reference<T>::type>::type>::type type;
|
||||||
|
};
|
||||||
|
|
||||||
|
} /* detail */
|
||||||
|
} /* alignment */
|
||||||
|
} /* boost */
|
||||||
|
|
||||||
|
#endif
|
53
extern/boost/boost/align/detail/integral_constant.hpp
vendored
Normal file
53
extern/boost/boost/align/detail/integral_constant.hpp
vendored
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2014-2016 Glen Joseph Fernandes
|
||||||
|
(glenjofe@gmail.com)
|
||||||
|
|
||||||
|
Distributed under the Boost Software License, Version 1.0.
|
||||||
|
(http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*/
|
||||||
|
#ifndef BOOST_ALIGN_DETAIL_INTEGRAL_CONSTANT_HPP
|
||||||
|
#define BOOST_ALIGN_DETAIL_INTEGRAL_CONSTANT_HPP
|
||||||
|
|
||||||
|
#include <boost/config.hpp>
|
||||||
|
|
||||||
|
#if !defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS)
|
||||||
|
#include <type_traits>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace alignment {
|
||||||
|
namespace detail {
|
||||||
|
|
||||||
|
#if !defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS)
|
||||||
|
using std::integral_constant;
|
||||||
|
using std::true_type;
|
||||||
|
using std::false_type;
|
||||||
|
#else
|
||||||
|
template<class T, T Value>
|
||||||
|
struct integral_constant {
|
||||||
|
typedef T value_type;
|
||||||
|
typedef integral_constant type;
|
||||||
|
|
||||||
|
BOOST_CONSTEXPR operator value_type() const BOOST_NOEXCEPT {
|
||||||
|
return Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_CONSTEXPR value_type operator()() const BOOST_NOEXCEPT {
|
||||||
|
return Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_STATIC_CONSTEXPR T value = Value;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<class T, T Value>
|
||||||
|
BOOST_CONSTEXPR_OR_CONST T integral_constant<T, Value>::value;
|
||||||
|
|
||||||
|
typedef integral_constant<bool, true> true_type;
|
||||||
|
typedef integral_constant<bool, false> false_type;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
} /* detail */
|
||||||
|
} /* alignment */
|
||||||
|
} /* boost */
|
||||||
|
|
||||||
|
#endif
|
28
extern/boost/boost/align/detail/is_alignment.hpp
vendored
Normal file
28
extern/boost/boost/align/detail/is_alignment.hpp
vendored
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2014 Glen Joseph Fernandes
|
||||||
|
(glenjofe@gmail.com)
|
||||||
|
|
||||||
|
Distributed under the Boost Software License, Version 1.0.
|
||||||
|
(http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*/
|
||||||
|
#ifndef BOOST_ALIGN_DETAIL_IS_ALIGNMENT_HPP
|
||||||
|
#define BOOST_ALIGN_DETAIL_IS_ALIGNMENT_HPP
|
||||||
|
|
||||||
|
#include <boost/config.hpp>
|
||||||
|
#include <cstddef>
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace alignment {
|
||||||
|
namespace detail {
|
||||||
|
|
||||||
|
BOOST_CONSTEXPR inline bool
|
||||||
|
is_alignment(std::size_t value) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
return (value > 0) && ((value & (value - 1)) == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
} /* detail */
|
||||||
|
} /* alignment */
|
||||||
|
} /* boost */
|
||||||
|
|
||||||
|
#endif
|
26
extern/boost/boost/align/detail/min_size.hpp
vendored
Normal file
26
extern/boost/boost/align/detail/min_size.hpp
vendored
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2014 Glen Joseph Fernandes
|
||||||
|
(glenjofe@gmail.com)
|
||||||
|
|
||||||
|
Distributed under the Boost Software License, Version 1.0.
|
||||||
|
(http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*/
|
||||||
|
#ifndef BOOST_ALIGN_DETAIL_MIN_SIZE_HPP
|
||||||
|
#define BOOST_ALIGN_DETAIL_MIN_SIZE_HPP
|
||||||
|
|
||||||
|
#include <boost/align/detail/integral_constant.hpp>
|
||||||
|
#include <cstddef>
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace alignment {
|
||||||
|
namespace detail {
|
||||||
|
|
||||||
|
template<std::size_t A, std::size_t B>
|
||||||
|
struct min_size
|
||||||
|
: integral_constant<std::size_t, (A < B) ? A : B> { };
|
||||||
|
|
||||||
|
} /* detail */
|
||||||
|
} /* alignment */
|
||||||
|
} /* boost */
|
||||||
|
|
||||||
|
#endif
|
456
extern/boost/boost/array.hpp
vendored
Normal file
456
extern/boost/boost/array.hpp
vendored
Normal file
@ -0,0 +1,456 @@
|
|||||||
|
/* The following code declares class array,
|
||||||
|
* an STL container (as wrapper) for arrays of constant size.
|
||||||
|
*
|
||||||
|
* See
|
||||||
|
* http://www.boost.org/libs/array/
|
||||||
|
* for documentation.
|
||||||
|
*
|
||||||
|
* The original author site is at: http://www.josuttis.com/
|
||||||
|
*
|
||||||
|
* (C) Copyright Nicolai M. Josuttis 2001.
|
||||||
|
*
|
||||||
|
* Distributed under the Boost Software License, Version 1.0. (See
|
||||||
|
* accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
* http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*
|
||||||
|
* 9 Jan 2013 - (mtc) Added constexpr
|
||||||
|
* 14 Apr 2012 - (mtc) Added support for boost::hash
|
||||||
|
* 28 Dec 2010 - (mtc) Added cbegin and cend (and crbegin and crend) for C++Ox compatibility.
|
||||||
|
* 10 Mar 2010 - (mtc) fill method added, matching resolution of the standard library working group.
|
||||||
|
* See <http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#776> or Trac issue #3168
|
||||||
|
* Eventually, we should remove "assign" which is now a synonym for "fill" (Marshall Clow)
|
||||||
|
* 10 Mar 2010 - added workaround for SUNCC and !STLPort [trac #3893] (Marshall Clow)
|
||||||
|
* 29 Jan 2004 - c_array() added, BOOST_NO_PRIVATE_IN_AGGREGATE removed (Nico Josuttis)
|
||||||
|
* 23 Aug 2002 - fix for Non-MSVC compilers combined with MSVC libraries.
|
||||||
|
* 05 Aug 2001 - minor update (Nico Josuttis)
|
||||||
|
* 20 Jan 2001 - STLport fix (Beman Dawes)
|
||||||
|
* 29 Sep 2000 - Initial Revision (Nico Josuttis)
|
||||||
|
*
|
||||||
|
* Jan 29, 2004
|
||||||
|
*/
|
||||||
|
#ifndef BOOST_ARRAY_HPP
|
||||||
|
#define BOOST_ARRAY_HPP
|
||||||
|
|
||||||
|
#include <boost/detail/workaround.hpp>
|
||||||
|
|
||||||
|
#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
|
||||||
|
# pragma warning(push)
|
||||||
|
# pragma warning(disable:4996) // 'std::equal': Function call with parameters that may be unsafe
|
||||||
|
# pragma warning(disable:4510) // boost::array<T,N>' : default constructor could not be generated
|
||||||
|
# pragma warning(disable:4610) // warning C4610: class 'boost::array<T,N>' can never be instantiated - user defined constructor required
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <cstddef>
|
||||||
|
#include <iterator>
|
||||||
|
#include <stdexcept>
|
||||||
|
#include <boost/assert.hpp>
|
||||||
|
#include <boost/static_assert.hpp>
|
||||||
|
#include <boost/swap.hpp>
|
||||||
|
|
||||||
|
#include <boost/throw_exception.hpp>
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
|
// FIXES for broken compilers
|
||||||
|
#include <boost/config.hpp>
|
||||||
|
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
|
||||||
|
template<class T, std::size_t N>
|
||||||
|
class array {
|
||||||
|
public:
|
||||||
|
T elems[N]; // fixed-size array of elements of type T
|
||||||
|
|
||||||
|
public:
|
||||||
|
// type definitions
|
||||||
|
typedef T value_type;
|
||||||
|
typedef T* iterator;
|
||||||
|
typedef const T* const_iterator;
|
||||||
|
typedef T& reference;
|
||||||
|
typedef const T& const_reference;
|
||||||
|
typedef std::size_t size_type;
|
||||||
|
typedef std::ptrdiff_t difference_type;
|
||||||
|
|
||||||
|
// iterator support
|
||||||
|
iterator begin() { return elems; }
|
||||||
|
const_iterator begin() const { return elems; }
|
||||||
|
const_iterator cbegin() const { return elems; }
|
||||||
|
|
||||||
|
iterator end() { return elems+N; }
|
||||||
|
const_iterator end() const { return elems+N; }
|
||||||
|
const_iterator cend() const { return elems+N; }
|
||||||
|
|
||||||
|
// reverse iterator support
|
||||||
|
#if !defined(BOOST_MSVC_STD_ITERATOR) && !defined(BOOST_NO_STD_ITERATOR_TRAITS)
|
||||||
|
typedef std::reverse_iterator<iterator> reverse_iterator;
|
||||||
|
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
|
||||||
|
#elif defined(_RWSTD_NO_CLASS_PARTIAL_SPEC)
|
||||||
|
typedef std::reverse_iterator<iterator, std::random_access_iterator_tag,
|
||||||
|
value_type, reference, iterator, difference_type> reverse_iterator;
|
||||||
|
typedef std::reverse_iterator<const_iterator, std::random_access_iterator_tag,
|
||||||
|
value_type, const_reference, const_iterator, difference_type> const_reverse_iterator;
|
||||||
|
#else
|
||||||
|
// workaround for broken reverse_iterator implementations
|
||||||
|
typedef std::reverse_iterator<iterator,T> reverse_iterator;
|
||||||
|
typedef std::reverse_iterator<const_iterator,T> const_reverse_iterator;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
reverse_iterator rbegin() { return reverse_iterator(end()); }
|
||||||
|
const_reverse_iterator rbegin() const {
|
||||||
|
return const_reverse_iterator(end());
|
||||||
|
}
|
||||||
|
const_reverse_iterator crbegin() const {
|
||||||
|
return const_reverse_iterator(end());
|
||||||
|
}
|
||||||
|
|
||||||
|
reverse_iterator rend() { return reverse_iterator(begin()); }
|
||||||
|
const_reverse_iterator rend() const {
|
||||||
|
return const_reverse_iterator(begin());
|
||||||
|
}
|
||||||
|
const_reverse_iterator crend() const {
|
||||||
|
return const_reverse_iterator(begin());
|
||||||
|
}
|
||||||
|
|
||||||
|
// operator[]
|
||||||
|
reference operator[](size_type i)
|
||||||
|
{
|
||||||
|
return BOOST_ASSERT_MSG( i < N, "out of range" ), elems[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*BOOST_CONSTEXPR*/ const_reference operator[](size_type i) const
|
||||||
|
{
|
||||||
|
return BOOST_ASSERT_MSG( i < N, "out of range" ), elems[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
// at() with range check
|
||||||
|
reference at(size_type i) { return rangecheck(i), elems[i]; }
|
||||||
|
/*BOOST_CONSTEXPR*/ const_reference at(size_type i) const { return rangecheck(i), elems[i]; }
|
||||||
|
|
||||||
|
// front() and back()
|
||||||
|
reference front()
|
||||||
|
{
|
||||||
|
return elems[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_CONSTEXPR const_reference front() const
|
||||||
|
{
|
||||||
|
return elems[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
reference back()
|
||||||
|
{
|
||||||
|
return elems[N-1];
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_CONSTEXPR const_reference back() const
|
||||||
|
{
|
||||||
|
return elems[N-1];
|
||||||
|
}
|
||||||
|
|
||||||
|
// size is constant
|
||||||
|
static BOOST_CONSTEXPR size_type size() { return N; }
|
||||||
|
static BOOST_CONSTEXPR bool empty() { return false; }
|
||||||
|
static BOOST_CONSTEXPR size_type max_size() { return N; }
|
||||||
|
enum { static_size = N };
|
||||||
|
|
||||||
|
// swap (note: linear complexity)
|
||||||
|
void swap (array<T,N>& y) {
|
||||||
|
for (size_type i = 0; i < N; ++i)
|
||||||
|
boost::swap(elems[i],y.elems[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// direct access to data (read-only)
|
||||||
|
const T* data() const { return elems; }
|
||||||
|
T* data() { return elems; }
|
||||||
|
|
||||||
|
// use array as C array (direct read/write access to data)
|
||||||
|
T* c_array() { return elems; }
|
||||||
|
|
||||||
|
// assignment with type conversion
|
||||||
|
template <typename T2>
|
||||||
|
array<T,N>& operator= (const array<T2,N>& rhs) {
|
||||||
|
std::copy(rhs.begin(),rhs.end(), begin());
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
// assign one value to all elements
|
||||||
|
void assign (const T& value) { fill ( value ); } // A synonym for fill
|
||||||
|
void fill (const T& value)
|
||||||
|
{
|
||||||
|
std::fill_n(begin(),size(),value);
|
||||||
|
}
|
||||||
|
|
||||||
|
// check range (may be private because it is static)
|
||||||
|
static BOOST_CONSTEXPR bool rangecheck (size_type i) {
|
||||||
|
return i >= size() ? boost::throw_exception(std::out_of_range ("array<>: index out of range")), true : true;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
template< class T >
|
||||||
|
class array< T, 0 > {
|
||||||
|
|
||||||
|
public:
|
||||||
|
// type definitions
|
||||||
|
typedef T value_type;
|
||||||
|
typedef T* iterator;
|
||||||
|
typedef const T* const_iterator;
|
||||||
|
typedef T& reference;
|
||||||
|
typedef const T& const_reference;
|
||||||
|
typedef std::size_t size_type;
|
||||||
|
typedef std::ptrdiff_t difference_type;
|
||||||
|
|
||||||
|
// iterator support
|
||||||
|
iterator begin() { return iterator( reinterpret_cast< T * >( this ) ); }
|
||||||
|
const_iterator begin() const { return const_iterator( reinterpret_cast< const T * >( this ) ); }
|
||||||
|
const_iterator cbegin() const { return const_iterator( reinterpret_cast< const T * >( this ) ); }
|
||||||
|
|
||||||
|
iterator end() { return begin(); }
|
||||||
|
const_iterator end() const { return begin(); }
|
||||||
|
const_iterator cend() const { return cbegin(); }
|
||||||
|
|
||||||
|
// reverse iterator support
|
||||||
|
#if !defined(BOOST_MSVC_STD_ITERATOR) && !defined(BOOST_NO_STD_ITERATOR_TRAITS)
|
||||||
|
typedef std::reverse_iterator<iterator> reverse_iterator;
|
||||||
|
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
|
||||||
|
#elif defined(_RWSTD_NO_CLASS_PARTIAL_SPEC)
|
||||||
|
typedef std::reverse_iterator<iterator, std::random_access_iterator_tag,
|
||||||
|
value_type, reference, iterator, difference_type> reverse_iterator;
|
||||||
|
typedef std::reverse_iterator<const_iterator, std::random_access_iterator_tag,
|
||||||
|
value_type, const_reference, const_iterator, difference_type> const_reverse_iterator;
|
||||||
|
#else
|
||||||
|
// workaround for broken reverse_iterator implementations
|
||||||
|
typedef std::reverse_iterator<iterator,T> reverse_iterator;
|
||||||
|
typedef std::reverse_iterator<const_iterator,T> const_reverse_iterator;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
reverse_iterator rbegin() { return reverse_iterator(end()); }
|
||||||
|
const_reverse_iterator rbegin() const {
|
||||||
|
return const_reverse_iterator(end());
|
||||||
|
}
|
||||||
|
const_reverse_iterator crbegin() const {
|
||||||
|
return const_reverse_iterator(end());
|
||||||
|
}
|
||||||
|
|
||||||
|
reverse_iterator rend() { return reverse_iterator(begin()); }
|
||||||
|
const_reverse_iterator rend() const {
|
||||||
|
return const_reverse_iterator(begin());
|
||||||
|
}
|
||||||
|
const_reverse_iterator crend() const {
|
||||||
|
return const_reverse_iterator(begin());
|
||||||
|
}
|
||||||
|
|
||||||
|
// operator[]
|
||||||
|
reference operator[](size_type /*i*/)
|
||||||
|
{
|
||||||
|
return failed_rangecheck();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*BOOST_CONSTEXPR*/ const_reference operator[](size_type /*i*/) const
|
||||||
|
{
|
||||||
|
return failed_rangecheck();
|
||||||
|
}
|
||||||
|
|
||||||
|
// at() with range check
|
||||||
|
reference at(size_type /*i*/) { return failed_rangecheck(); }
|
||||||
|
/*BOOST_CONSTEXPR*/ const_reference at(size_type /*i*/) const { return failed_rangecheck(); }
|
||||||
|
|
||||||
|
// front() and back()
|
||||||
|
reference front()
|
||||||
|
{
|
||||||
|
return failed_rangecheck();
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_CONSTEXPR const_reference front() const
|
||||||
|
{
|
||||||
|
return failed_rangecheck();
|
||||||
|
}
|
||||||
|
|
||||||
|
reference back()
|
||||||
|
{
|
||||||
|
return failed_rangecheck();
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_CONSTEXPR const_reference back() const
|
||||||
|
{
|
||||||
|
return failed_rangecheck();
|
||||||
|
}
|
||||||
|
|
||||||
|
// size is constant
|
||||||
|
static BOOST_CONSTEXPR size_type size() { return 0; }
|
||||||
|
static BOOST_CONSTEXPR bool empty() { return true; }
|
||||||
|
static BOOST_CONSTEXPR size_type max_size() { return 0; }
|
||||||
|
enum { static_size = 0 };
|
||||||
|
|
||||||
|
void swap (array<T,0>& /*y*/) {
|
||||||
|
}
|
||||||
|
|
||||||
|
// direct access to data (read-only)
|
||||||
|
const T* data() const { return 0; }
|
||||||
|
T* data() { return 0; }
|
||||||
|
|
||||||
|
// use array as C array (direct read/write access to data)
|
||||||
|
T* c_array() { return 0; }
|
||||||
|
|
||||||
|
// assignment with type conversion
|
||||||
|
template <typename T2>
|
||||||
|
array<T,0>& operator= (const array<T2,0>& ) {
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
// assign one value to all elements
|
||||||
|
void assign (const T& value) { fill ( value ); }
|
||||||
|
void fill (const T& ) {}
|
||||||
|
|
||||||
|
// check range (may be private because it is static)
|
||||||
|
static reference failed_rangecheck () {
|
||||||
|
std::out_of_range e("attempt to access element of an empty array");
|
||||||
|
boost::throw_exception(e);
|
||||||
|
#if defined(BOOST_NO_EXCEPTIONS) || (!defined(BOOST_MSVC) && !defined(__PATHSCALE__))
|
||||||
|
//
|
||||||
|
// We need to return something here to keep
|
||||||
|
// some compilers happy: however we will never
|
||||||
|
// actually get here....
|
||||||
|
//
|
||||||
|
static T placeholder;
|
||||||
|
return placeholder;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// comparisons
|
||||||
|
template<class T, std::size_t N>
|
||||||
|
bool operator== (const array<T,N>& x, const array<T,N>& y) {
|
||||||
|
return std::equal(x.begin(), x.end(), y.begin());
|
||||||
|
}
|
||||||
|
template<class T, std::size_t N>
|
||||||
|
bool operator< (const array<T,N>& x, const array<T,N>& y) {
|
||||||
|
return std::lexicographical_compare(x.begin(),x.end(),y.begin(),y.end());
|
||||||
|
}
|
||||||
|
template<class T, std::size_t N>
|
||||||
|
bool operator!= (const array<T,N>& x, const array<T,N>& y) {
|
||||||
|
return !(x==y);
|
||||||
|
}
|
||||||
|
template<class T, std::size_t N>
|
||||||
|
bool operator> (const array<T,N>& x, const array<T,N>& y) {
|
||||||
|
return y<x;
|
||||||
|
}
|
||||||
|
template<class T, std::size_t N>
|
||||||
|
bool operator<= (const array<T,N>& x, const array<T,N>& y) {
|
||||||
|
return !(y<x);
|
||||||
|
}
|
||||||
|
template<class T, std::size_t N>
|
||||||
|
bool operator>= (const array<T,N>& x, const array<T,N>& y) {
|
||||||
|
return !(x<y);
|
||||||
|
}
|
||||||
|
|
||||||
|
// global swap()
|
||||||
|
template<class T, std::size_t N>
|
||||||
|
inline void swap (array<T,N>& x, array<T,N>& y) {
|
||||||
|
x.swap(y);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(__SUNPRO_CC)
|
||||||
|
// Trac ticket #4757; the Sun Solaris compiler can't handle
|
||||||
|
// syntax like 'T(&get_c_array(boost::array<T,N>& arg))[N]'
|
||||||
|
//
|
||||||
|
// We can't just use this for all compilers, because the
|
||||||
|
// borland compilers can't handle this form.
|
||||||
|
namespace detail {
|
||||||
|
template <typename T, std::size_t N> struct c_array
|
||||||
|
{
|
||||||
|
typedef T type[N];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// Specific for boost::array: simply returns its elems data member.
|
||||||
|
template <typename T, std::size_t N>
|
||||||
|
typename detail::c_array<T,N>::type& get_c_array(boost::array<T,N>& arg)
|
||||||
|
{
|
||||||
|
return arg.elems;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Specific for boost::array: simply returns its elems data member.
|
||||||
|
template <typename T, std::size_t N>
|
||||||
|
typename detail::c_array<T,N>::type const& get_c_array(const boost::array<T,N>& arg)
|
||||||
|
{
|
||||||
|
return arg.elems;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
// Specific for boost::array: simply returns its elems data member.
|
||||||
|
template <typename T, std::size_t N>
|
||||||
|
T(&get_c_array(boost::array<T,N>& arg))[N]
|
||||||
|
{
|
||||||
|
return arg.elems;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Const version.
|
||||||
|
template <typename T, std::size_t N>
|
||||||
|
const T(&get_c_array(const boost::array<T,N>& arg))[N]
|
||||||
|
{
|
||||||
|
return arg.elems;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
// Overload for std::array, assuming that std::array will have
|
||||||
|
// explicit conversion functions as discussed at the WG21 meeting
|
||||||
|
// in Summit, March 2009.
|
||||||
|
template <typename T, std::size_t N>
|
||||||
|
T(&get_c_array(std::array<T,N>& arg))[N]
|
||||||
|
{
|
||||||
|
return static_cast<T(&)[N]>(arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Const version.
|
||||||
|
template <typename T, std::size_t N>
|
||||||
|
const T(&get_c_array(const std::array<T,N>& arg))[N]
|
||||||
|
{
|
||||||
|
return static_cast<T(&)[N]>(arg);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
template <class It> std::size_t hash_range(It, It);
|
||||||
|
|
||||||
|
template<class T, std::size_t N>
|
||||||
|
std::size_t hash_value(const array<T,N>& arr)
|
||||||
|
{
|
||||||
|
return boost::hash_range(arr.begin(), arr.end());
|
||||||
|
}
|
||||||
|
|
||||||
|
template <size_t Idx, typename T, size_t N>
|
||||||
|
T &get(boost::array<T,N> &arr) BOOST_NOEXCEPT {
|
||||||
|
BOOST_STATIC_ASSERT_MSG ( Idx < N, "boost::get<>(boost::array &) index out of range" );
|
||||||
|
return arr[Idx];
|
||||||
|
}
|
||||||
|
|
||||||
|
template <size_t Idx, typename T, size_t N>
|
||||||
|
const T &get(const boost::array<T,N> &arr) BOOST_NOEXCEPT {
|
||||||
|
BOOST_STATIC_ASSERT_MSG ( Idx < N, "boost::get<>(const boost::array &) index out of range" );
|
||||||
|
return arr[Idx];
|
||||||
|
}
|
||||||
|
|
||||||
|
} /* namespace boost */
|
||||||
|
|
||||||
|
#ifndef BOOST_NO_CXX11_HDR_ARRAY
|
||||||
|
// If we don't have std::array, I'm assuming that we don't have std::get
|
||||||
|
namespace std {
|
||||||
|
template <size_t Idx, typename T, size_t N>
|
||||||
|
T &get(boost::array<T,N> &arr) BOOST_NOEXCEPT {
|
||||||
|
BOOST_STATIC_ASSERT_MSG ( Idx < N, "std::get<>(boost::array &) index out of range" );
|
||||||
|
return arr[Idx];
|
||||||
|
}
|
||||||
|
|
||||||
|
template <size_t Idx, typename T, size_t N>
|
||||||
|
const T &get(const boost::array<T,N> &arr) BOOST_NOEXCEPT {
|
||||||
|
BOOST_STATIC_ASSERT_MSG ( Idx < N, "std::get<>(const boost::array &) index out of range" );
|
||||||
|
return arr[Idx];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
|
||||||
|
# pragma warning(pop)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /*BOOST_ARRAY_HPP*/
|
85
extern/boost/boost/assert.hpp
vendored
Normal file
85
extern/boost/boost/assert.hpp
vendored
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
//
|
||||||
|
// boost/assert.hpp - BOOST_ASSERT(expr)
|
||||||
|
// BOOST_ASSERT_MSG(expr, msg)
|
||||||
|
// BOOST_VERIFY(expr)
|
||||||
|
// BOOST_VERIFY_MSG(expr, msg)
|
||||||
|
// BOOST_ASSERT_IS_VOID
|
||||||
|
//
|
||||||
|
// Copyright (c) 2001, 2002 Peter Dimov and Multi Media Ltd.
|
||||||
|
// Copyright (c) 2007, 2014 Peter Dimov
|
||||||
|
// Copyright (c) Beman Dawes 2011
|
||||||
|
// Copyright (c) 2015 Ion Gaztanaga
|
||||||
|
//
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
// See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
// http://www.boost.org/LICENSE_1_0.txt
|
||||||
|
//
|
||||||
|
// Note: There are no include guards. This is intentional.
|
||||||
|
//
|
||||||
|
// See http://www.boost.org/libs/assert/assert.html for documentation.
|
||||||
|
//
|
||||||
|
|
||||||
|
//
|
||||||
|
// Stop inspect complaining about use of 'assert':
|
||||||
|
//
|
||||||
|
// boostinspect:naassert_macro
|
||||||
|
//
|
||||||
|
|
||||||
|
//
|
||||||
|
// BOOST_ASSERT, BOOST_ASSERT_MSG, BOOST_ASSERT_IS_VOID
|
||||||
|
//
|
||||||
|
|
||||||
|
#undef BOOST_ASSERT
|
||||||
|
#undef BOOST_ASSERT_MSG
|
||||||
|
#undef BOOST_ASSERT_IS_VOID
|
||||||
|
|
||||||
|
#if defined(BOOST_DISABLE_ASSERTS) || ( defined(BOOST_ENABLE_ASSERT_DEBUG_HANDLER) && defined(NDEBUG) )
|
||||||
|
|
||||||
|
# define BOOST_ASSERT(expr) ((void)0)
|
||||||
|
# define BOOST_ASSERT_MSG(expr, msg) ((void)0)
|
||||||
|
# define BOOST_ASSERT_IS_VOID
|
||||||
|
|
||||||
|
#elif defined(BOOST_ENABLE_ASSERT_HANDLER) || ( defined(BOOST_ENABLE_ASSERT_DEBUG_HANDLER) && !defined(NDEBUG) )
|
||||||
|
|
||||||
|
#include <boost/config.hpp> // for BOOST_LIKELY
|
||||||
|
#include <boost/current_function.hpp>
|
||||||
|
|
||||||
|
namespace boost
|
||||||
|
{
|
||||||
|
void assertion_failed(char const * expr, char const * function, char const * file, long line); // user defined
|
||||||
|
void assertion_failed_msg(char const * expr, char const * msg, char const * function, char const * file, long line); // user defined
|
||||||
|
} // namespace boost
|
||||||
|
|
||||||
|
#define BOOST_ASSERT(expr) (BOOST_LIKELY(!!(expr))? ((void)0): ::boost::assertion_failed(#expr, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__))
|
||||||
|
#define BOOST_ASSERT_MSG(expr, msg) (BOOST_LIKELY(!!(expr))? ((void)0): ::boost::assertion_failed_msg(#expr, msg, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__))
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
# include <assert.h> // .h to support old libraries w/o <cassert> - effect is the same
|
||||||
|
|
||||||
|
# define BOOST_ASSERT(expr) assert(expr)
|
||||||
|
# define BOOST_ASSERT_MSG(expr, msg) assert((expr)&&(msg))
|
||||||
|
#if defined(NDEBUG)
|
||||||
|
# define BOOST_ASSERT_IS_VOID
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//
|
||||||
|
// BOOST_VERIFY, BOOST_VERIFY_MSG
|
||||||
|
//
|
||||||
|
|
||||||
|
#undef BOOST_VERIFY
|
||||||
|
#undef BOOST_VERIFY_MSG
|
||||||
|
|
||||||
|
#if defined(BOOST_DISABLE_ASSERTS) || ( !defined(BOOST_ENABLE_ASSERT_HANDLER) && defined(NDEBUG) )
|
||||||
|
|
||||||
|
# define BOOST_VERIFY(expr) ((void)(expr))
|
||||||
|
# define BOOST_VERIFY_MSG(expr, msg) ((void)(expr))
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
# define BOOST_VERIFY(expr) BOOST_ASSERT(expr)
|
||||||
|
# define BOOST_VERIFY_MSG(expr, msg) BOOST_ASSERT_MSG(expr,msg)
|
||||||
|
|
||||||
|
#endif
|
163
extern/boost/boost/assert/source_location.hpp
vendored
Normal file
163
extern/boost/boost/assert/source_location.hpp
vendored
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
#ifndef BOOST_ASSERT_SOURCE_LOCATION_HPP_INCLUDED
|
||||||
|
#define BOOST_ASSERT_SOURCE_LOCATION_HPP_INCLUDED
|
||||||
|
|
||||||
|
// http://www.boost.org/libs/assert
|
||||||
|
//
|
||||||
|
// Copyright 2019, 2021 Peter Dimov
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
// http://www.boost.org/LICENSE_1_0.txt
|
||||||
|
|
||||||
|
#include <boost/current_function.hpp>
|
||||||
|
#include <boost/config.hpp>
|
||||||
|
#include <boost/config/workaround.hpp>
|
||||||
|
#include <boost/cstdint.hpp>
|
||||||
|
#include <iosfwd>
|
||||||
|
#include <string>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
|
#if defined(__cpp_lib_source_location) && __cpp_lib_source_location >= 201907L
|
||||||
|
# include <source_location>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace boost
|
||||||
|
{
|
||||||
|
|
||||||
|
struct source_location
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
|
||||||
|
char const * file_;
|
||||||
|
char const * function_;
|
||||||
|
boost::uint_least32_t line_;
|
||||||
|
boost::uint_least32_t column_;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
BOOST_CONSTEXPR source_location() BOOST_NOEXCEPT: file_( "" ), function_( "" ), line_( 0 ), column_( 0 )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_CONSTEXPR source_location( char const * file, boost::uint_least32_t ln, char const * function, boost::uint_least32_t col = 0 ) BOOST_NOEXCEPT: file_( file ), function_( function ), line_( ln ), column_( col )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(__cpp_lib_source_location) && __cpp_lib_source_location >= 201907L
|
||||||
|
|
||||||
|
BOOST_CONSTEXPR source_location( std::source_location const& loc ) BOOST_NOEXCEPT: file_( loc.file_name() ), function_( loc.function_name() ), line_( loc.line() ), column_( loc.column() )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
BOOST_CONSTEXPR char const * file_name() const BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
return file_;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_CONSTEXPR char const * function_name() const BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
return function_;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_CONSTEXPR boost::uint_least32_t line() const BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
return line_;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_CONSTEXPR boost::uint_least32_t column() const BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
return column_;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(BOOST_MSVC)
|
||||||
|
# pragma warning( push )
|
||||||
|
# pragma warning( disable: 4996 )
|
||||||
|
#endif
|
||||||
|
|
||||||
|
std::string to_string() const
|
||||||
|
{
|
||||||
|
unsigned long ln = line();
|
||||||
|
|
||||||
|
if( ln == 0 )
|
||||||
|
{
|
||||||
|
return "(unknown source location)";
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string r = file_name();
|
||||||
|
|
||||||
|
char buffer[ 16 ];
|
||||||
|
|
||||||
|
std::sprintf( buffer, ":%lu", ln );
|
||||||
|
r += buffer;
|
||||||
|
|
||||||
|
unsigned long co = column();
|
||||||
|
|
||||||
|
if( co )
|
||||||
|
{
|
||||||
|
std::sprintf( buffer, ":%lu", co );
|
||||||
|
r += buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
char const* fn = function_name();
|
||||||
|
|
||||||
|
if( *fn != 0 )
|
||||||
|
{
|
||||||
|
r += " in function '";
|
||||||
|
r += fn;
|
||||||
|
r += '\'';
|
||||||
|
}
|
||||||
|
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(BOOST_MSVC)
|
||||||
|
# pragma warning( pop )
|
||||||
|
#endif
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
template<class E, class T> std::basic_ostream<E, T> & operator<<( std::basic_ostream<E, T> & os, source_location const & loc )
|
||||||
|
{
|
||||||
|
os << loc.to_string();
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace boost
|
||||||
|
|
||||||
|
#if defined(BOOST_DISABLE_CURRENT_LOCATION)
|
||||||
|
|
||||||
|
# define BOOST_CURRENT_LOCATION ::boost::source_location()
|
||||||
|
|
||||||
|
#elif defined(BOOST_MSVC) && BOOST_MSVC >= 1926
|
||||||
|
|
||||||
|
// std::source_location::current() is available in -std:c++20, but fails with consteval errors before 19.31, and doesn't produce
|
||||||
|
// the correct result under 19.31, so prefer the built-ins
|
||||||
|
# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
|
||||||
|
|
||||||
|
#elif defined(__cpp_lib_source_location) && __cpp_lib_source_location >= 201907L
|
||||||
|
|
||||||
|
# define BOOST_CURRENT_LOCATION ::boost::source_location(::std::source_location::current())
|
||||||
|
|
||||||
|
#elif defined(BOOST_CLANG) && BOOST_CLANG_VERSION >= 90000
|
||||||
|
|
||||||
|
# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION(), __builtin_COLUMN())
|
||||||
|
|
||||||
|
#elif defined(BOOST_GCC) && BOOST_GCC >= 70000
|
||||||
|
|
||||||
|
// The built-ins are available in 4.8+, but are not constant expressions until 7
|
||||||
|
# define BOOST_CURRENT_LOCATION ::boost::source_location(__builtin_FILE(), __builtin_LINE(), __builtin_FUNCTION())
|
||||||
|
|
||||||
|
#elif defined(BOOST_GCC) && BOOST_GCC >= 50000
|
||||||
|
|
||||||
|
// __PRETTY_FUNCTION__ is allowed outside functions under GCC, but 4.x suffers from codegen bugs
|
||||||
|
# define BOOST_CURRENT_LOCATION ::boost::source_location(__FILE__, __LINE__, __PRETTY_FUNCTION__)
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
// __func__ macros aren't allowed outside functions, but BOOST_CURRENT_LOCATION is
|
||||||
|
# define BOOST_CURRENT_LOCATION ::boost::source_location(__FILE__, __LINE__, "")
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // #ifndef BOOST_ASSERT_SOURCE_LOCATION_HPP_INCLUDED
|
27
extern/boost/boost/atomic.hpp
vendored
Normal file
27
extern/boost/boost/atomic.hpp
vendored
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#ifndef BOOST_ATOMIC_HPP
|
||||||
|
#define BOOST_ATOMIC_HPP
|
||||||
|
|
||||||
|
// Copyright (c) 2011 Helge Bahmann
|
||||||
|
// Copyright (c) 2020 Andrey Semashev
|
||||||
|
//
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
// See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
// http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
|
// This header includes all Boost.Atomic public headers
|
||||||
|
|
||||||
|
#include <boost/memory_order.hpp>
|
||||||
|
#include <boost/atomic/capabilities.hpp>
|
||||||
|
#include <boost/atomic/atomic.hpp>
|
||||||
|
#include <boost/atomic/atomic_ref.hpp>
|
||||||
|
#include <boost/atomic/atomic_flag.hpp>
|
||||||
|
#include <boost/atomic/ipc_atomic.hpp>
|
||||||
|
#include <boost/atomic/ipc_atomic_ref.hpp>
|
||||||
|
#include <boost/atomic/ipc_atomic_flag.hpp>
|
||||||
|
#include <boost/atomic/fences.hpp>
|
||||||
|
|
||||||
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
277
extern/boost/boost/atomic/atomic.hpp
vendored
Normal file
277
extern/boost/boost/atomic/atomic.hpp
vendored
Normal file
@ -0,0 +1,277 @@
|
|||||||
|
/*
|
||||||
|
* Distributed under the Boost Software License, Version 1.0.
|
||||||
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
* http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2011 Helge Bahmann
|
||||||
|
* Copyright (c) 2013 Tim Blechmann
|
||||||
|
* Copyright (c) 2014, 2020 Andrey Semashev
|
||||||
|
*/
|
||||||
|
/*!
|
||||||
|
* \file atomic/atomic.hpp
|
||||||
|
*
|
||||||
|
* This header contains definition of \c atomic template.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_ATOMIC_HPP_INCLUDED_
|
||||||
|
#define BOOST_ATOMIC_ATOMIC_HPP_INCLUDED_
|
||||||
|
|
||||||
|
#include <cstddef>
|
||||||
|
#include <boost/cstdint.hpp>
|
||||||
|
#include <boost/static_assert.hpp>
|
||||||
|
#include <boost/memory_order.hpp>
|
||||||
|
#include <boost/atomic/capabilities.hpp>
|
||||||
|
#include <boost/atomic/detail/config.hpp>
|
||||||
|
#include <boost/atomic/detail/classify.hpp>
|
||||||
|
#include <boost/atomic/detail/atomic_impl.hpp>
|
||||||
|
#include <boost/atomic/detail/type_traits/is_trivially_copyable.hpp>
|
||||||
|
#include <boost/atomic/detail/type_traits/is_nothrow_default_constructible.hpp>
|
||||||
|
#include <boost/atomic/detail/header.hpp>
|
||||||
|
|
||||||
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace atomics {
|
||||||
|
|
||||||
|
//! Atomic object
|
||||||
|
template< typename T >
|
||||||
|
class atomic :
|
||||||
|
public atomics::detail::base_atomic< T, typename atomics::detail::classify< T >::type, false >
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
typedef atomics::detail::base_atomic< T, typename atomics::detail::classify< T >::type, false > base_type;
|
||||||
|
typedef typename base_type::value_arg_type value_arg_type;
|
||||||
|
|
||||||
|
public:
|
||||||
|
typedef typename base_type::value_type value_type;
|
||||||
|
// Deprecated, use value_type instead
|
||||||
|
BOOST_ATOMIC_DETAIL_STORAGE_DEPRECATED
|
||||||
|
typedef typename base_type::storage_type storage_type;
|
||||||
|
|
||||||
|
BOOST_STATIC_ASSERT_MSG(sizeof(value_type) > 0u, "boost::atomic<T> requires T to be a complete type");
|
||||||
|
#if !defined(BOOST_ATOMIC_DETAIL_NO_CXX11_IS_TRIVIALLY_COPYABLE)
|
||||||
|
BOOST_STATIC_ASSERT_MSG(atomics::detail::is_trivially_copyable< value_type >::value, "boost::atomic<T> requires T to be a trivially copyable type");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
public:
|
||||||
|
BOOST_FORCEINLINE BOOST_ATOMIC_DETAIL_CONSTEXPR_UNION_INIT atomic() BOOST_NOEXCEPT_IF(atomics::detail::is_nothrow_default_constructible< value_type >::value) : base_type()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_FORCEINLINE BOOST_ATOMIC_DETAIL_CONSTEXPR_UNION_INIT atomic(value_arg_type v) BOOST_NOEXCEPT : base_type(v)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_FORCEINLINE value_type operator= (value_arg_type v) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
this->store(v);
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_FORCEINLINE value_type operator= (value_arg_type v) volatile BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
this->store(v);
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_FORCEINLINE operator value_type() const volatile BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
return this->load();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deprecated, use value() instead
|
||||||
|
BOOST_ATOMIC_DETAIL_STORAGE_DEPRECATED
|
||||||
|
BOOST_FORCEINLINE typename base_type::storage_type& storage() BOOST_NOEXCEPT { return base_type::storage(); }
|
||||||
|
BOOST_ATOMIC_DETAIL_STORAGE_DEPRECATED
|
||||||
|
BOOST_FORCEINLINE typename base_type::storage_type volatile& storage() volatile BOOST_NOEXCEPT { return base_type::storage(); }
|
||||||
|
BOOST_ATOMIC_DETAIL_STORAGE_DEPRECATED
|
||||||
|
BOOST_FORCEINLINE typename base_type::storage_type const& storage() const BOOST_NOEXCEPT { return base_type::storage(); }
|
||||||
|
BOOST_ATOMIC_DETAIL_STORAGE_DEPRECATED
|
||||||
|
BOOST_FORCEINLINE typename base_type::storage_type const volatile& storage() const volatile BOOST_NOEXCEPT { return base_type::storage(); }
|
||||||
|
|
||||||
|
BOOST_DELETED_FUNCTION(atomic(atomic const&))
|
||||||
|
BOOST_DELETED_FUNCTION(atomic& operator= (atomic const&))
|
||||||
|
BOOST_DELETED_FUNCTION(atomic& operator= (atomic const&) volatile)
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef atomic< char > atomic_char;
|
||||||
|
typedef atomic< unsigned char > atomic_uchar;
|
||||||
|
typedef atomic< signed char > atomic_schar;
|
||||||
|
typedef atomic< uint8_t > atomic_uint8_t;
|
||||||
|
typedef atomic< int8_t > atomic_int8_t;
|
||||||
|
typedef atomic< unsigned short > atomic_ushort;
|
||||||
|
typedef atomic< short > atomic_short;
|
||||||
|
typedef atomic< uint16_t > atomic_uint16_t;
|
||||||
|
typedef atomic< int16_t > atomic_int16_t;
|
||||||
|
typedef atomic< unsigned int > atomic_uint;
|
||||||
|
typedef atomic< int > atomic_int;
|
||||||
|
typedef atomic< uint32_t > atomic_uint32_t;
|
||||||
|
typedef atomic< int32_t > atomic_int32_t;
|
||||||
|
typedef atomic< unsigned long > atomic_ulong;
|
||||||
|
typedef atomic< long > atomic_long;
|
||||||
|
typedef atomic< uint64_t > atomic_uint64_t;
|
||||||
|
typedef atomic< int64_t > atomic_int64_t;
|
||||||
|
#ifdef BOOST_HAS_LONG_LONG
|
||||||
|
typedef atomic< boost::ulong_long_type > atomic_ullong;
|
||||||
|
typedef atomic< boost::long_long_type > atomic_llong;
|
||||||
|
#endif
|
||||||
|
typedef atomic< void* > atomic_address;
|
||||||
|
typedef atomic< bool > atomic_bool;
|
||||||
|
typedef atomic< wchar_t > atomic_wchar_t;
|
||||||
|
#if defined(__cpp_char8_t) && __cpp_char8_t >= 201811
|
||||||
|
typedef atomic< char8_t > atomic_char8_t;
|
||||||
|
#endif
|
||||||
|
#if !defined(BOOST_NO_CXX11_CHAR16_T)
|
||||||
|
typedef atomic< char16_t > atomic_char16_t;
|
||||||
|
#endif
|
||||||
|
#if !defined(BOOST_NO_CXX11_CHAR32_T)
|
||||||
|
typedef atomic< char32_t > atomic_char32_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef atomic< int_least8_t > atomic_int_least8_t;
|
||||||
|
typedef atomic< uint_least8_t > atomic_uint_least8_t;
|
||||||
|
typedef atomic< int_least16_t > atomic_int_least16_t;
|
||||||
|
typedef atomic< uint_least16_t > atomic_uint_least16_t;
|
||||||
|
typedef atomic< int_least32_t > atomic_int_least32_t;
|
||||||
|
typedef atomic< uint_least32_t > atomic_uint_least32_t;
|
||||||
|
typedef atomic< int_least64_t > atomic_int_least64_t;
|
||||||
|
typedef atomic< uint_least64_t > atomic_uint_least64_t;
|
||||||
|
typedef atomic< int_fast8_t > atomic_int_fast8_t;
|
||||||
|
typedef atomic< uint_fast8_t > atomic_uint_fast8_t;
|
||||||
|
typedef atomic< int_fast16_t > atomic_int_fast16_t;
|
||||||
|
typedef atomic< uint_fast16_t > atomic_uint_fast16_t;
|
||||||
|
typedef atomic< int_fast32_t > atomic_int_fast32_t;
|
||||||
|
typedef atomic< uint_fast32_t > atomic_uint_fast32_t;
|
||||||
|
typedef atomic< int_fast64_t > atomic_int_fast64_t;
|
||||||
|
typedef atomic< uint_fast64_t > atomic_uint_fast64_t;
|
||||||
|
typedef atomic< intmax_t > atomic_intmax_t;
|
||||||
|
typedef atomic< uintmax_t > atomic_uintmax_t;
|
||||||
|
|
||||||
|
#if !defined(BOOST_ATOMIC_NO_FLOATING_POINT)
|
||||||
|
typedef atomic< float > atomic_float_t;
|
||||||
|
typedef atomic< double > atomic_double_t;
|
||||||
|
typedef atomic< long double > atomic_long_double_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef atomic< std::size_t > atomic_size_t;
|
||||||
|
typedef atomic< std::ptrdiff_t > atomic_ptrdiff_t;
|
||||||
|
|
||||||
|
#if defined(BOOST_HAS_INTPTR_T)
|
||||||
|
typedef atomic< boost::intptr_t > atomic_intptr_t;
|
||||||
|
typedef atomic< boost::uintptr_t > atomic_uintptr_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Select the lock-free atomic types that has natively supported waiting/notifying operations.
|
||||||
|
// Prefer 32-bit types the most as those have the best performance on current 32 and 64-bit architectures.
|
||||||
|
#if BOOST_ATOMIC_INT32_LOCK_FREE == 2 && BOOST_ATOMIC_HAS_NATIVE_INT32_WAIT_NOTIFY == 2
|
||||||
|
typedef atomic< uint32_t > atomic_unsigned_lock_free;
|
||||||
|
typedef atomic< int32_t > atomic_signed_lock_free;
|
||||||
|
#elif BOOST_ATOMIC_INT64_LOCK_FREE == 2 && BOOST_ATOMIC_HAS_NATIVE_INT64_WAIT_NOTIFY == 2
|
||||||
|
typedef atomic< uint64_t > atomic_unsigned_lock_free;
|
||||||
|
typedef atomic< int64_t > atomic_signed_lock_free;
|
||||||
|
#elif BOOST_ATOMIC_INT16_LOCK_FREE == 2 && BOOST_ATOMIC_HAS_NATIVE_INT16_WAIT_NOTIFY == 2
|
||||||
|
typedef atomic< uint16_t > atomic_unsigned_lock_free;
|
||||||
|
typedef atomic< int16_t > atomic_signed_lock_free;
|
||||||
|
#elif BOOST_ATOMIC_INT8_LOCK_FREE == 2 && BOOST_ATOMIC_HAS_NATIVE_INT8_WAIT_NOTIFY == 2
|
||||||
|
typedef atomic< uint8_t > atomic_unsigned_lock_free;
|
||||||
|
typedef atomic< int8_t > atomic_signed_lock_free;
|
||||||
|
#elif BOOST_ATOMIC_INT32_LOCK_FREE == 2
|
||||||
|
typedef atomic< uint32_t > atomic_unsigned_lock_free;
|
||||||
|
typedef atomic< int32_t > atomic_signed_lock_free;
|
||||||
|
#elif BOOST_ATOMIC_INT64_LOCK_FREE == 2
|
||||||
|
typedef atomic< uint64_t > atomic_unsigned_lock_free;
|
||||||
|
typedef atomic< int64_t > atomic_signed_lock_free;
|
||||||
|
#elif BOOST_ATOMIC_INT16_LOCK_FREE == 2
|
||||||
|
typedef atomic< uint16_t > atomic_unsigned_lock_free;
|
||||||
|
typedef atomic< int16_t > atomic_signed_lock_free;
|
||||||
|
#elif BOOST_ATOMIC_INT8_LOCK_FREE == 2
|
||||||
|
typedef atomic< uint8_t > atomic_unsigned_lock_free;
|
||||||
|
typedef atomic< int8_t > atomic_signed_lock_free;
|
||||||
|
#else
|
||||||
|
#define BOOST_ATOMIC_DETAIL_NO_LOCK_FREE_TYPEDEFS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
} // namespace atomics
|
||||||
|
|
||||||
|
using atomics::atomic;
|
||||||
|
|
||||||
|
using atomics::atomic_char;
|
||||||
|
using atomics::atomic_uchar;
|
||||||
|
using atomics::atomic_schar;
|
||||||
|
using atomics::atomic_uint8_t;
|
||||||
|
using atomics::atomic_int8_t;
|
||||||
|
using atomics::atomic_ushort;
|
||||||
|
using atomics::atomic_short;
|
||||||
|
using atomics::atomic_uint16_t;
|
||||||
|
using atomics::atomic_int16_t;
|
||||||
|
using atomics::atomic_uint;
|
||||||
|
using atomics::atomic_int;
|
||||||
|
using atomics::atomic_uint32_t;
|
||||||
|
using atomics::atomic_int32_t;
|
||||||
|
using atomics::atomic_ulong;
|
||||||
|
using atomics::atomic_long;
|
||||||
|
using atomics::atomic_uint64_t;
|
||||||
|
using atomics::atomic_int64_t;
|
||||||
|
#ifdef BOOST_HAS_LONG_LONG
|
||||||
|
using atomics::atomic_ullong;
|
||||||
|
using atomics::atomic_llong;
|
||||||
|
#endif
|
||||||
|
using atomics::atomic_address;
|
||||||
|
using atomics::atomic_bool;
|
||||||
|
using atomics::atomic_wchar_t;
|
||||||
|
#if defined(__cpp_char8_t) && __cpp_char8_t >= 201811
|
||||||
|
using atomics::atomic_char8_t;
|
||||||
|
#endif
|
||||||
|
#if !defined(BOOST_NO_CXX11_CHAR16_T)
|
||||||
|
using atomics::atomic_char16_t;
|
||||||
|
#endif
|
||||||
|
#if !defined(BOOST_NO_CXX11_CHAR32_T)
|
||||||
|
using atomics::atomic_char32_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
using atomics::atomic_int_least8_t;
|
||||||
|
using atomics::atomic_uint_least8_t;
|
||||||
|
using atomics::atomic_int_least16_t;
|
||||||
|
using atomics::atomic_uint_least16_t;
|
||||||
|
using atomics::atomic_int_least32_t;
|
||||||
|
using atomics::atomic_uint_least32_t;
|
||||||
|
using atomics::atomic_int_least64_t;
|
||||||
|
using atomics::atomic_uint_least64_t;
|
||||||
|
using atomics::atomic_int_fast8_t;
|
||||||
|
using atomics::atomic_uint_fast8_t;
|
||||||
|
using atomics::atomic_int_fast16_t;
|
||||||
|
using atomics::atomic_uint_fast16_t;
|
||||||
|
using atomics::atomic_int_fast32_t;
|
||||||
|
using atomics::atomic_uint_fast32_t;
|
||||||
|
using atomics::atomic_int_fast64_t;
|
||||||
|
using atomics::atomic_uint_fast64_t;
|
||||||
|
using atomics::atomic_intmax_t;
|
||||||
|
using atomics::atomic_uintmax_t;
|
||||||
|
|
||||||
|
#if !defined(BOOST_ATOMIC_NO_FLOATING_POINT)
|
||||||
|
using atomics::atomic_float_t;
|
||||||
|
using atomics::atomic_double_t;
|
||||||
|
using atomics::atomic_long_double_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
using atomics::atomic_size_t;
|
||||||
|
using atomics::atomic_ptrdiff_t;
|
||||||
|
|
||||||
|
#if defined(BOOST_HAS_INTPTR_T)
|
||||||
|
using atomics::atomic_intptr_t;
|
||||||
|
using atomics::atomic_uintptr_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(BOOST_ATOMIC_DETAIL_NO_LOCK_FREE_TYPEDEFS)
|
||||||
|
using atomics::atomic_unsigned_lock_free;
|
||||||
|
using atomics::atomic_signed_lock_free;
|
||||||
|
#endif
|
||||||
|
#undef BOOST_ATOMIC_DETAIL_NO_LOCK_FREE_TYPEDEFS
|
||||||
|
|
||||||
|
} // namespace boost
|
||||||
|
|
||||||
|
#include <boost/atomic/detail/footer.hpp>
|
||||||
|
|
||||||
|
#endif // BOOST_ATOMIC_ATOMIC_HPP_INCLUDED_
|
42
extern/boost/boost/atomic/atomic_flag.hpp
vendored
Normal file
42
extern/boost/boost/atomic/atomic_flag.hpp
vendored
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
* Distributed under the Boost Software License, Version 1.0.
|
||||||
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
* http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2011 Helge Bahmann
|
||||||
|
* Copyright (c) 2013 Tim Blechmann
|
||||||
|
* Copyright (c) 2014, 2020 Andrey Semashev
|
||||||
|
*/
|
||||||
|
/*!
|
||||||
|
* \file atomic/atomic_flag.hpp
|
||||||
|
*
|
||||||
|
* This header contains definition of \c atomic_flag.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_ATOMIC_FLAG_HPP_INCLUDED_
|
||||||
|
#define BOOST_ATOMIC_ATOMIC_FLAG_HPP_INCLUDED_
|
||||||
|
|
||||||
|
#include <boost/atomic/capabilities.hpp>
|
||||||
|
#include <boost/atomic/detail/config.hpp>
|
||||||
|
#include <boost/atomic/detail/atomic_flag_impl.hpp>
|
||||||
|
#include <boost/atomic/detail/header.hpp>
|
||||||
|
|
||||||
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace atomics {
|
||||||
|
|
||||||
|
//! Atomic flag
|
||||||
|
typedef atomics::detail::atomic_flag_impl< false > atomic_flag;
|
||||||
|
|
||||||
|
} // namespace atomics
|
||||||
|
|
||||||
|
using atomics::atomic_flag;
|
||||||
|
|
||||||
|
} // namespace boost
|
||||||
|
|
||||||
|
#include <boost/atomic/detail/footer.hpp>
|
||||||
|
|
||||||
|
#endif // BOOST_ATOMIC_ATOMIC_FLAG_HPP_INCLUDED_
|
98
extern/boost/boost/atomic/atomic_ref.hpp
vendored
Normal file
98
extern/boost/boost/atomic/atomic_ref.hpp
vendored
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
/*
|
||||||
|
* Distributed under the Boost Software License, Version 1.0.
|
||||||
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
* http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2020-2021 Andrey Semashev
|
||||||
|
*/
|
||||||
|
/*!
|
||||||
|
* \file atomic/atomic_ref.hpp
|
||||||
|
*
|
||||||
|
* This header contains definition of \c atomic_ref template.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_ATOMIC_REF_HPP_INCLUDED_
|
||||||
|
#define BOOST_ATOMIC_ATOMIC_REF_HPP_INCLUDED_
|
||||||
|
|
||||||
|
#include <boost/assert.hpp>
|
||||||
|
#include <boost/static_assert.hpp>
|
||||||
|
#include <boost/memory_order.hpp>
|
||||||
|
#include <boost/atomic/capabilities.hpp>
|
||||||
|
#include <boost/atomic/detail/config.hpp>
|
||||||
|
#include <boost/atomic/detail/intptr.hpp>
|
||||||
|
#include <boost/atomic/detail/classify.hpp>
|
||||||
|
#include <boost/atomic/detail/atomic_ref_impl.hpp>
|
||||||
|
#include <boost/atomic/detail/type_traits/is_trivially_copyable.hpp>
|
||||||
|
#include <boost/atomic/detail/header.hpp>
|
||||||
|
|
||||||
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace atomics {
|
||||||
|
|
||||||
|
//! Atomic reference to external object
|
||||||
|
template< typename T >
|
||||||
|
class atomic_ref :
|
||||||
|
public atomics::detail::base_atomic_ref< T, typename atomics::detail::classify< T >::type, false >
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
typedef atomics::detail::base_atomic_ref< T, typename atomics::detail::classify< T >::type, false > base_type;
|
||||||
|
typedef typename base_type::value_arg_type value_arg_type;
|
||||||
|
|
||||||
|
public:
|
||||||
|
typedef typename base_type::value_type value_type;
|
||||||
|
|
||||||
|
BOOST_STATIC_ASSERT_MSG(sizeof(value_type) > 0u, "boost::atomic_ref<T> requires T to be a complete type");
|
||||||
|
#if !defined(BOOST_ATOMIC_DETAIL_NO_CXX11_IS_TRIVIALLY_COPYABLE)
|
||||||
|
BOOST_STATIC_ASSERT_MSG(atomics::detail::is_trivially_copyable< value_type >::value, "boost::atomic_ref<T> requires T to be a trivially copyable type");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
private:
|
||||||
|
typedef typename base_type::storage_type storage_type;
|
||||||
|
|
||||||
|
public:
|
||||||
|
BOOST_DEFAULTED_FUNCTION(atomic_ref(atomic_ref const& that) BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_DECL, BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_IMPL : base_type(static_cast< base_type const& >(that)) {})
|
||||||
|
BOOST_FORCEINLINE explicit atomic_ref(value_type& v) BOOST_NOEXCEPT : base_type(v)
|
||||||
|
{
|
||||||
|
// Check that referenced object alignment satisfies required alignment
|
||||||
|
BOOST_ASSERT((((atomics::detail::uintptr_t)this->m_value) & (base_type::required_alignment - 1u)) == 0u);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_FORCEINLINE value_type operator= (value_arg_type v) const BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
this->store(v);
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_FORCEINLINE operator value_type() const BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
return this->load();
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_DELETED_FUNCTION(atomic_ref& operator= (atomic_ref const&))
|
||||||
|
};
|
||||||
|
|
||||||
|
#if !defined(BOOST_ATOMIC_DETAIL_NO_CXX17_DEDUCTION_GUIDES)
|
||||||
|
template< typename T >
|
||||||
|
atomic_ref(T&) -> atomic_ref< T >;
|
||||||
|
#endif // !defined(BOOST_ATOMIC_DETAIL_NO_CXX17_DEDUCTION_GUIDES)
|
||||||
|
|
||||||
|
//! Atomic reference factory function
|
||||||
|
template< typename T >
|
||||||
|
BOOST_FORCEINLINE atomic_ref< T > make_atomic_ref(T& value) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
return atomic_ref< T >(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace atomics
|
||||||
|
|
||||||
|
using atomics::atomic_ref;
|
||||||
|
using atomics::make_atomic_ref;
|
||||||
|
|
||||||
|
} // namespace boost
|
||||||
|
|
||||||
|
#include <boost/atomic/detail/footer.hpp>
|
||||||
|
|
||||||
|
#endif // BOOST_ATOMIC_ATOMIC_REF_HPP_INCLUDED_
|
21
extern/boost/boost/atomic/capabilities.hpp
vendored
Normal file
21
extern/boost/boost/atomic/capabilities.hpp
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
* Distributed under the Boost Software License, Version 1.0.
|
||||||
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
* http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2014 Andrey Semashev
|
||||||
|
*/
|
||||||
|
/*!
|
||||||
|
* \file atomic/capabilities.hpp
|
||||||
|
*
|
||||||
|
* This header defines feature capabilities macros.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_CAPABILITIES_HPP_INCLUDED_
|
||||||
|
#define BOOST_ATOMIC_CAPABILITIES_HPP_INCLUDED_
|
||||||
|
|
||||||
|
#include <boost/atomic/detail/config.hpp>
|
||||||
|
#include <boost/atomic/detail/capabilities.hpp>
|
||||||
|
#include <boost/atomic/detail/wait_capabilities.hpp>
|
||||||
|
|
||||||
|
#endif // BOOST_ATOMIC_CAPABILITIES_HPP_INCLUDED_
|
65
extern/boost/boost/atomic/detail/addressof.hpp
vendored
Normal file
65
extern/boost/boost/atomic/detail/addressof.hpp
vendored
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
/*
|
||||||
|
* Distributed under the Boost Software License, Version 1.0.
|
||||||
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
* http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2018 Andrey Semashev
|
||||||
|
*/
|
||||||
|
/*!
|
||||||
|
* \file atomic/detail/addressof.hpp
|
||||||
|
*
|
||||||
|
* This header defines \c addressof helper function. It is similar to \c boost::addressof but it is more
|
||||||
|
* lightweight and also contains a workaround for some compiler warnings.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_DETAIL_ADDRESSOF_HPP_INCLUDED_
|
||||||
|
#define BOOST_ATOMIC_DETAIL_ADDRESSOF_HPP_INCLUDED_
|
||||||
|
|
||||||
|
#include <boost/atomic/detail/config.hpp>
|
||||||
|
#include <boost/atomic/detail/header.hpp>
|
||||||
|
|
||||||
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Detection logic is based on boost/core/addressof.hpp
|
||||||
|
#if defined(BOOST_MSVC_FULL_VER) && BOOST_MSVC_FULL_VER >= 190024215
|
||||||
|
#define BOOST_ATOMIC_DETAIL_HAS_BUILTIN_ADDRESSOF
|
||||||
|
#elif defined(BOOST_GCC) && BOOST_GCC >= 70000
|
||||||
|
#define BOOST_ATOMIC_DETAIL_HAS_BUILTIN_ADDRESSOF
|
||||||
|
#elif defined(__has_builtin)
|
||||||
|
#if __has_builtin(__builtin_addressof)
|
||||||
|
#define BOOST_ATOMIC_DETAIL_HAS_BUILTIN_ADDRESSOF
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace atomics {
|
||||||
|
namespace detail {
|
||||||
|
|
||||||
|
template< typename T >
|
||||||
|
BOOST_FORCEINLINE
|
||||||
|
#if defined(BOOST_ATOMIC_DETAIL_HAS_BUILTIN_ADDRESSOF)
|
||||||
|
BOOST_CONSTEXPR
|
||||||
|
#endif
|
||||||
|
T* addressof(T& value) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
#if defined(BOOST_ATOMIC_DETAIL_HAS_BUILTIN_ADDRESSOF)
|
||||||
|
return __builtin_addressof(value);
|
||||||
|
#else
|
||||||
|
// Note: The point of using a local struct as the intermediate type instead of char is to avoid gcc warnings
|
||||||
|
// if T is a const volatile char*:
|
||||||
|
// warning: casting 'const volatile char* const' to 'const volatile char&' does not dereference pointer
|
||||||
|
// The local struct makes sure T is not related to the cast target type.
|
||||||
|
struct opaque_type;
|
||||||
|
return reinterpret_cast< T* >(&const_cast< opaque_type& >(reinterpret_cast< const volatile opaque_type& >(value)));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace detail
|
||||||
|
} // namespace atomics
|
||||||
|
} // namespace boost
|
||||||
|
|
||||||
|
#include <boost/atomic/detail/footer.hpp>
|
||||||
|
|
||||||
|
#endif // BOOST_ATOMIC_DETAIL_ADDRESSOF_HPP_INCLUDED_
|
57
extern/boost/boost/atomic/detail/aligned_variable.hpp
vendored
Normal file
57
extern/boost/boost/atomic/detail/aligned_variable.hpp
vendored
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
* Distributed under the Boost Software License, Version 1.0.
|
||||||
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
* http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2020 Andrey Semashev
|
||||||
|
*/
|
||||||
|
/*!
|
||||||
|
* \file atomic/detail/aligned_variable.hpp
|
||||||
|
*
|
||||||
|
* This header defines a convenience macro for declaring aligned variables
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_DETAIL_ALIGNED_VARIABLE_HPP_INCLUDED_
|
||||||
|
#define BOOST_ATOMIC_DETAIL_ALIGNED_VARIABLE_HPP_INCLUDED_
|
||||||
|
|
||||||
|
#include <boost/atomic/detail/config.hpp>
|
||||||
|
#if defined(BOOST_ATOMIC_DETAIL_NO_CXX11_ALIGNAS)
|
||||||
|
#include <boost/config/helper_macros.hpp>
|
||||||
|
#include <boost/type_traits/type_with_alignment.hpp>
|
||||||
|
#endif
|
||||||
|
#include <boost/atomic/detail/header.hpp>
|
||||||
|
|
||||||
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(BOOST_ATOMIC_DETAIL_NO_CXX11_ALIGNAS)
|
||||||
|
|
||||||
|
#define BOOST_ATOMIC_DETAIL_ALIGNED_VAR(var_alignment, var_type, var_name) \
|
||||||
|
alignas(var_alignment) var_type var_name
|
||||||
|
|
||||||
|
#define BOOST_ATOMIC_DETAIL_ALIGNED_VAR_TPL(var_alignment, var_type, var_name) \
|
||||||
|
alignas(var_alignment) var_type var_name
|
||||||
|
|
||||||
|
#else // !defined(BOOST_ATOMIC_DETAIL_NO_CXX11_ALIGNAS)
|
||||||
|
|
||||||
|
// Note: Some compilers cannot use constant expressions in alignment attributes or alignas, so we have to use the union trick
|
||||||
|
#define BOOST_ATOMIC_DETAIL_ALIGNED_VAR(var_alignment, var_type, var_name) \
|
||||||
|
union \
|
||||||
|
{ \
|
||||||
|
var_type var_name; \
|
||||||
|
boost::type_with_alignment< var_alignment >::type BOOST_JOIN(var_name, _aligner); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define BOOST_ATOMIC_DETAIL_ALIGNED_VAR_TPL(var_alignment, var_type, var_name) \
|
||||||
|
union \
|
||||||
|
{ \
|
||||||
|
var_type var_name; \
|
||||||
|
typename boost::type_with_alignment< var_alignment >::type BOOST_JOIN(var_name, _aligner); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // !defined(BOOST_ATOMIC_DETAIL_NO_CXX11_ALIGNAS)
|
||||||
|
|
||||||
|
#include <boost/atomic/detail/footer.hpp>
|
||||||
|
|
||||||
|
#endif // BOOST_ATOMIC_DETAIL_ALIGNED_VARIABLE_HPP_INCLUDED_
|
129
extern/boost/boost/atomic/detail/atomic_flag_impl.hpp
vendored
Normal file
129
extern/boost/boost/atomic/detail/atomic_flag_impl.hpp
vendored
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
/*
|
||||||
|
* Distributed under the Boost Software License, Version 1.0.
|
||||||
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
* http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2011 Helge Bahmann
|
||||||
|
* Copyright (c) 2013 Tim Blechmann
|
||||||
|
* Copyright (c) 2014, 2020 Andrey Semashev
|
||||||
|
*/
|
||||||
|
/*!
|
||||||
|
* \file atomic/detail/atomic_flag_impl.hpp
|
||||||
|
*
|
||||||
|
* This header contains implementation of \c atomic_flag.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_DETAIL_ATOMIC_FLAG_IMPL_HPP_INCLUDED_
|
||||||
|
#define BOOST_ATOMIC_DETAIL_ATOMIC_FLAG_IMPL_HPP_INCLUDED_
|
||||||
|
|
||||||
|
#include <boost/assert.hpp>
|
||||||
|
#include <boost/memory_order.hpp>
|
||||||
|
#include <boost/atomic/detail/config.hpp>
|
||||||
|
#include <boost/atomic/detail/core_operations.hpp>
|
||||||
|
#include <boost/atomic/detail/wait_operations.hpp>
|
||||||
|
#include <boost/atomic/detail/aligned_variable.hpp>
|
||||||
|
#include <boost/atomic/detail/header.hpp>
|
||||||
|
|
||||||
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* IMPLEMENTATION NOTE: All interface functions MUST be declared with BOOST_FORCEINLINE,
|
||||||
|
* see comment for convert_memory_order_to_gcc in gcc_atomic_memory_order_utils.hpp.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace atomics {
|
||||||
|
namespace detail {
|
||||||
|
|
||||||
|
#if defined(BOOST_ATOMIC_DETAIL_NO_CXX11_CONSTEXPR_UNION_INIT) || defined(BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX)
|
||||||
|
#define BOOST_ATOMIC_NO_ATOMIC_FLAG_INIT
|
||||||
|
#else
|
||||||
|
#define BOOST_ATOMIC_FLAG_INIT {}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//! Atomic flag implementation
|
||||||
|
template< bool IsInterprocess >
|
||||||
|
struct atomic_flag_impl
|
||||||
|
{
|
||||||
|
// Prefer 4-byte storage as most platforms support waiting/notifying operations without a lock pool for 32-bit integers
|
||||||
|
typedef atomics::detail::core_operations< 4u, false, IsInterprocess > core_operations;
|
||||||
|
typedef atomics::detail::wait_operations< core_operations > wait_operations;
|
||||||
|
typedef typename core_operations::storage_type storage_type;
|
||||||
|
|
||||||
|
static BOOST_CONSTEXPR_OR_CONST bool is_always_lock_free = core_operations::is_always_lock_free;
|
||||||
|
static BOOST_CONSTEXPR_OR_CONST bool always_has_native_wait_notify = wait_operations::always_has_native_wait_notify;
|
||||||
|
|
||||||
|
BOOST_ATOMIC_DETAIL_ALIGNED_VAR_TPL(core_operations::storage_alignment, storage_type, m_storage);
|
||||||
|
|
||||||
|
BOOST_FORCEINLINE BOOST_ATOMIC_DETAIL_CONSTEXPR_UNION_INIT atomic_flag_impl() BOOST_NOEXCEPT : m_storage(0u)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_FORCEINLINE bool is_lock_free() const volatile BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
return is_always_lock_free;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_FORCEINLINE bool has_native_wait_notify() const volatile BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
return wait_operations::has_native_wait_notify(m_storage);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_FORCEINLINE bool test(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
BOOST_ASSERT(order != memory_order_release);
|
||||||
|
BOOST_ASSERT(order != memory_order_acq_rel);
|
||||||
|
return !!core_operations::load(m_storage, order);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_FORCEINLINE bool test_and_set(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
return core_operations::test_and_set(m_storage, order);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_FORCEINLINE void clear(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
BOOST_ASSERT(order != memory_order_consume);
|
||||||
|
BOOST_ASSERT(order != memory_order_acquire);
|
||||||
|
BOOST_ASSERT(order != memory_order_acq_rel);
|
||||||
|
core_operations::clear(m_storage, order);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_FORCEINLINE bool wait(bool old_val, memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
BOOST_ASSERT(order != memory_order_release);
|
||||||
|
BOOST_ASSERT(order != memory_order_acq_rel);
|
||||||
|
|
||||||
|
return !!wait_operations::wait(m_storage, static_cast< storage_type >(old_val), order);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_FORCEINLINE void notify_one() volatile BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
wait_operations::notify_one(m_storage);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_FORCEINLINE void notify_all() volatile BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
wait_operations::notify_all(m_storage);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_DELETED_FUNCTION(atomic_flag_impl(atomic_flag_impl const&))
|
||||||
|
BOOST_DELETED_FUNCTION(atomic_flag_impl& operator= (atomic_flag_impl const&))
|
||||||
|
};
|
||||||
|
|
||||||
|
#if defined(BOOST_NO_CXX17_INLINE_VARIABLES)
|
||||||
|
template< bool IsInterprocess >
|
||||||
|
BOOST_CONSTEXPR_OR_CONST bool atomic_flag_impl< IsInterprocess >::is_always_lock_free;
|
||||||
|
template< bool IsInterprocess >
|
||||||
|
BOOST_CONSTEXPR_OR_CONST bool atomic_flag_impl< IsInterprocess >::always_has_native_wait_notify;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
} // namespace detail
|
||||||
|
} // namespace atomics
|
||||||
|
} // namespace boost
|
||||||
|
|
||||||
|
#include <boost/atomic/detail/footer.hpp>
|
||||||
|
|
||||||
|
#endif // BOOST_ATOMIC_DETAIL_ATOMIC_FLAG_IMPL_HPP_INCLUDED_
|
1265
extern/boost/boost/atomic/detail/atomic_impl.hpp
vendored
Normal file
1265
extern/boost/boost/atomic/detail/atomic_impl.hpp
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1226
extern/boost/boost/atomic/detail/atomic_ref_impl.hpp
vendored
Normal file
1226
extern/boost/boost/atomic/detail/atomic_ref_impl.hpp
vendored
Normal file
File diff suppressed because it is too large
Load Diff
156
extern/boost/boost/atomic/detail/bitwise_cast.hpp
vendored
Normal file
156
extern/boost/boost/atomic/detail/bitwise_cast.hpp
vendored
Normal file
@ -0,0 +1,156 @@
|
|||||||
|
/*
|
||||||
|
* Distributed under the Boost Software License, Version 1.0.
|
||||||
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
* http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009 Helge Bahmann
|
||||||
|
* Copyright (c) 2012 Tim Blechmann
|
||||||
|
* Copyright (c) 2013-2018, 2020-2021 Andrey Semashev
|
||||||
|
*/
|
||||||
|
/*!
|
||||||
|
* \file atomic/detail/bitwise_cast.hpp
|
||||||
|
*
|
||||||
|
* This header defines \c bitwise_cast used to convert between storage and value types
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_DETAIL_BITWISE_CAST_HPP_INCLUDED_
|
||||||
|
#define BOOST_ATOMIC_DETAIL_BITWISE_CAST_HPP_INCLUDED_
|
||||||
|
|
||||||
|
#include <cstddef>
|
||||||
|
#include <boost/atomic/detail/config.hpp>
|
||||||
|
#include <boost/atomic/detail/addressof.hpp>
|
||||||
|
#include <boost/atomic/detail/string_ops.hpp>
|
||||||
|
#include <boost/atomic/detail/type_traits/integral_constant.hpp>
|
||||||
|
#include <boost/atomic/detail/type_traits/has_unique_object_representations.hpp>
|
||||||
|
#include <boost/atomic/detail/header.hpp>
|
||||||
|
|
||||||
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(BOOST_ATOMIC_DETAIL_NO_HAS_UNIQUE_OBJECT_REPRESENTATIONS)
|
||||||
|
|
||||||
|
#if defined(__has_builtin)
|
||||||
|
#if __has_builtin(__builtin_bit_cast)
|
||||||
|
#define BOOST_ATOMIC_DETAIL_BIT_CAST(x, y) __builtin_bit_cast(x, y)
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(BOOST_ATOMIC_DETAIL_BIT_CAST) && defined(BOOST_MSVC) && BOOST_MSVC >= 1926
|
||||||
|
#define BOOST_ATOMIC_DETAIL_BIT_CAST(x, y) __builtin_bit_cast(x, y)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // !defined(BOOST_ATOMIC_DETAIL_NO_HAS_UNIQUE_OBJECT_REPRESENTATIONS)
|
||||||
|
|
||||||
|
#if defined(BOOST_NO_CXX11_CONSTEXPR) || !defined(BOOST_ATOMIC_DETAIL_BIT_CAST) || !defined(BOOST_ATOMIC_DETAIL_HAS_BUILTIN_ADDRESSOF)
|
||||||
|
#define BOOST_ATOMIC_DETAIL_NO_CXX11_CONSTEXPR_BITWISE_CAST
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(BOOST_ATOMIC_DETAIL_NO_CXX11_CONSTEXPR_BITWISE_CAST)
|
||||||
|
#define BOOST_ATOMIC_DETAIL_CONSTEXPR_BITWISE_CAST BOOST_CONSTEXPR
|
||||||
|
#else
|
||||||
|
#define BOOST_ATOMIC_DETAIL_CONSTEXPR_BITWISE_CAST
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(BOOST_GCC) && BOOST_GCC >= 80000
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
// copying an object of non-trivial type X from an array of Y. This is benign because we use memcpy to copy trivially copyable objects.
|
||||||
|
#pragma GCC diagnostic ignored "-Wclass-memaccess"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace atomics {
|
||||||
|
namespace detail {
|
||||||
|
|
||||||
|
template< std::size_t ValueSize, typename To >
|
||||||
|
BOOST_FORCEINLINE void clear_tail_padding_bits(To& to, atomics::detail::true_type) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
BOOST_ATOMIC_DETAIL_MEMSET(reinterpret_cast< unsigned char* >(atomics::detail::addressof(to)) + ValueSize, 0, sizeof(To) - ValueSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
template< std::size_t ValueSize, typename To >
|
||||||
|
BOOST_FORCEINLINE void clear_tail_padding_bits(To&, atomics::detail::false_type) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
template< std::size_t ValueSize, typename To >
|
||||||
|
BOOST_FORCEINLINE void clear_tail_padding_bits(To& to) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
atomics::detail::clear_tail_padding_bits< ValueSize >(to, atomics::detail::integral_constant< bool, ValueSize < sizeof(To) >());
|
||||||
|
}
|
||||||
|
|
||||||
|
template< typename To, std::size_t FromValueSize, typename From >
|
||||||
|
BOOST_FORCEINLINE To bitwise_cast_memcpy(From const& from) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
To to;
|
||||||
|
#if !defined(BOOST_ATOMIC_NO_CLEAR_PADDING)
|
||||||
|
From from2(from);
|
||||||
|
BOOST_ATOMIC_DETAIL_CLEAR_PADDING(atomics::detail::addressof(from2));
|
||||||
|
BOOST_ATOMIC_DETAIL_MEMCPY
|
||||||
|
(
|
||||||
|
atomics::detail::addressof(to),
|
||||||
|
atomics::detail::addressof(from2),
|
||||||
|
(FromValueSize < sizeof(To) ? FromValueSize : sizeof(To))
|
||||||
|
);
|
||||||
|
#else
|
||||||
|
BOOST_ATOMIC_DETAIL_MEMCPY
|
||||||
|
(
|
||||||
|
atomics::detail::addressof(to),
|
||||||
|
atomics::detail::addressof(from),
|
||||||
|
(FromValueSize < sizeof(To) ? FromValueSize : sizeof(To))
|
||||||
|
);
|
||||||
|
#endif
|
||||||
|
atomics::detail::clear_tail_padding_bits< FromValueSize >(to);
|
||||||
|
return to;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(BOOST_ATOMIC_DETAIL_BIT_CAST)
|
||||||
|
|
||||||
|
template< typename To, std::size_t FromValueSize, typename From >
|
||||||
|
BOOST_FORCEINLINE BOOST_ATOMIC_DETAIL_CONSTEXPR_BITWISE_CAST To bitwise_cast_impl(From const& from, atomics::detail::true_type) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
// This implementation is only called when the From type has no padding and From and To have the same size
|
||||||
|
return BOOST_ATOMIC_DETAIL_BIT_CAST(To, from);
|
||||||
|
}
|
||||||
|
|
||||||
|
template< typename To, std::size_t FromValueSize, typename From >
|
||||||
|
BOOST_FORCEINLINE To bitwise_cast_impl(From const& from, atomics::detail::false_type) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
return atomics::detail::bitwise_cast_memcpy< To, FromValueSize >(from);
|
||||||
|
}
|
||||||
|
|
||||||
|
template< typename To, std::size_t FromValueSize, typename From >
|
||||||
|
BOOST_FORCEINLINE BOOST_ATOMIC_DETAIL_CONSTEXPR_BITWISE_CAST To bitwise_cast(From const& from) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
return atomics::detail::bitwise_cast_impl< To, FromValueSize >(from, atomics::detail::integral_constant< bool,
|
||||||
|
FromValueSize == sizeof(To) && atomics::detail::has_unique_object_representations< From >::value >());
|
||||||
|
}
|
||||||
|
|
||||||
|
#else // defined(BOOST_ATOMIC_DETAIL_BIT_CAST)
|
||||||
|
|
||||||
|
template< typename To, std::size_t FromValueSize, typename From >
|
||||||
|
BOOST_FORCEINLINE To bitwise_cast(From const& from) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
return atomics::detail::bitwise_cast_memcpy< To, FromValueSize >(from);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // defined(BOOST_ATOMIC_DETAIL_BIT_CAST)
|
||||||
|
|
||||||
|
//! Converts the source object to the target type, possibly by padding or truncating it on the right, and clearing any padding bits (if supported by compiler). Preserves value bits unchanged.
|
||||||
|
template< typename To, typename From >
|
||||||
|
BOOST_FORCEINLINE BOOST_ATOMIC_DETAIL_CONSTEXPR_BITWISE_CAST To bitwise_cast(From const& from) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
return atomics::detail::bitwise_cast< To, sizeof(From) >(from);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace detail
|
||||||
|
} // namespace atomics
|
||||||
|
} // namespace boost
|
||||||
|
|
||||||
|
#if defined(BOOST_GCC) && BOOST_GCC >= 80000
|
||||||
|
#pragma GCC diagnostic pop
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <boost/atomic/detail/footer.hpp>
|
||||||
|
|
||||||
|
#endif // BOOST_ATOMIC_DETAIL_BITWISE_CAST_HPP_INCLUDED_
|
118
extern/boost/boost/atomic/detail/bitwise_fp_cast.hpp
vendored
Normal file
118
extern/boost/boost/atomic/detail/bitwise_fp_cast.hpp
vendored
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
/*
|
||||||
|
* Distributed under the Boost Software License, Version 1.0.
|
||||||
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
* http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2018, 2021 Andrey Semashev
|
||||||
|
*/
|
||||||
|
/*!
|
||||||
|
* \file atomic/detail/bitwise_fp_cast.hpp
|
||||||
|
*
|
||||||
|
* This header defines \c bitwise_fp_cast used to convert between storage and floating point value types
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_DETAIL_BITWISE_FP_CAST_HPP_INCLUDED_
|
||||||
|
#define BOOST_ATOMIC_DETAIL_BITWISE_FP_CAST_HPP_INCLUDED_
|
||||||
|
|
||||||
|
#include <cstddef>
|
||||||
|
#include <boost/atomic/detail/config.hpp>
|
||||||
|
#include <boost/atomic/detail/float_sizes.hpp>
|
||||||
|
#include <boost/atomic/detail/bitwise_cast.hpp>
|
||||||
|
#if defined(BOOST_ATOMIC_DETAIL_BIT_CAST)
|
||||||
|
#include <boost/atomic/detail/type_traits/integral_constant.hpp>
|
||||||
|
#endif
|
||||||
|
#include <boost/atomic/detail/header.hpp>
|
||||||
|
|
||||||
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace atomics {
|
||||||
|
namespace detail {
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief The type trait returns the size of the value of the specified floating point type
|
||||||
|
*
|
||||||
|
* This size may be less than <tt>sizeof(T)</tt> if the implementation uses padding bytes for a particular FP type. This is
|
||||||
|
* often the case with 80-bit extended double, which is stored in 12 or 16 initial bytes with tail padding filled with garbage.
|
||||||
|
*/
|
||||||
|
template< typename T >
|
||||||
|
struct value_size_of
|
||||||
|
{
|
||||||
|
static BOOST_CONSTEXPR_OR_CONST std::size_t value = sizeof(T);
|
||||||
|
};
|
||||||
|
|
||||||
|
#if defined(BOOST_ATOMIC_DETAIL_SIZEOF_FLOAT_VALUE)
|
||||||
|
template< >
|
||||||
|
struct value_size_of< float >
|
||||||
|
{
|
||||||
|
static BOOST_CONSTEXPR_OR_CONST std::size_t value = BOOST_ATOMIC_DETAIL_SIZEOF_FLOAT_VALUE;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(BOOST_ATOMIC_DETAIL_SIZEOF_DOUBLE_VALUE)
|
||||||
|
template< >
|
||||||
|
struct value_size_of< double >
|
||||||
|
{
|
||||||
|
static BOOST_CONSTEXPR_OR_CONST std::size_t value = BOOST_ATOMIC_DETAIL_SIZEOF_DOUBLE_VALUE;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(BOOST_ATOMIC_DETAIL_SIZEOF_LONG_DOUBLE_VALUE)
|
||||||
|
template< >
|
||||||
|
struct value_size_of< long double >
|
||||||
|
{
|
||||||
|
static BOOST_CONSTEXPR_OR_CONST std::size_t value = BOOST_ATOMIC_DETAIL_SIZEOF_LONG_DOUBLE_VALUE;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
template< typename T >
|
||||||
|
struct value_size_of< const T > : value_size_of< T > {};
|
||||||
|
|
||||||
|
template< typename T >
|
||||||
|
struct value_size_of< volatile T > : value_size_of< T > {};
|
||||||
|
|
||||||
|
template< typename T >
|
||||||
|
struct value_size_of< const volatile T > : value_size_of< T > {};
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined(BOOST_ATOMIC_NO_CLEAR_PADDING)
|
||||||
|
// BOOST_ATOMIC_DETAIL_CLEAR_PADDING, which is used in bitwise_cast, will clear the tail padding bits in the source object.
|
||||||
|
// We don't need to specify the actual value size to avoid redundant zeroing of the tail padding.
|
||||||
|
#define BOOST_ATOMIC_DETAIL_BITWISE_FP_CAST_VALUE_SIZE_OF(x) sizeof(x)
|
||||||
|
#else
|
||||||
|
#define BOOST_ATOMIC_DETAIL_BITWISE_FP_CAST_VALUE_SIZE_OF(x) atomics::detail::value_size_of< x >::value
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(BOOST_ATOMIC_DETAIL_BIT_CAST)
|
||||||
|
|
||||||
|
//! Similar to bitwise_cast, but either \c From or \c To is expected to be a floating point type. Attempts to detect the actual value size in the source object and considers the rest of the object as padding.
|
||||||
|
template< typename To, typename From >
|
||||||
|
BOOST_FORCEINLINE BOOST_ATOMIC_DETAIL_CONSTEXPR_BITWISE_CAST To bitwise_fp_cast(From const& from) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
// For floating point types, has_unique_object_representations is typically false even if the type contains no padding bits.
|
||||||
|
// Here, we rely on our detection of the actual value size to select constexpr bit_cast implementation when possible. We assume
|
||||||
|
// here that floating point value bits are contiguous.
|
||||||
|
return atomics::detail::bitwise_cast_impl< To, BOOST_ATOMIC_DETAIL_BITWISE_FP_CAST_VALUE_SIZE_OF(From) >(from, atomics::detail::integral_constant< bool,
|
||||||
|
atomics::detail::value_size_of< From >::value == sizeof(From) && atomics::detail::value_size_of< From >::value == sizeof(To) >());
|
||||||
|
}
|
||||||
|
|
||||||
|
#else // defined(BOOST_ATOMIC_DETAIL_BIT_CAST)
|
||||||
|
|
||||||
|
//! Similar to bitwise_cast, but either \c From or \c To is expected to be a floating point type. Attempts to detect the actual value size in the source object and considers the rest of the object as padding.
|
||||||
|
template< typename To, typename From >
|
||||||
|
BOOST_FORCEINLINE BOOST_ATOMIC_DETAIL_CONSTEXPR_BITWISE_CAST To bitwise_fp_cast(From const& from) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
return atomics::detail::bitwise_cast< To, BOOST_ATOMIC_DETAIL_BITWISE_FP_CAST_VALUE_SIZE_OF(From) >(from);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // defined(BOOST_ATOMIC_DETAIL_BIT_CAST)
|
||||||
|
|
||||||
|
} // namespace detail
|
||||||
|
} // namespace atomics
|
||||||
|
} // namespace boost
|
||||||
|
|
||||||
|
#include <boost/atomic/detail/footer.hpp>
|
||||||
|
|
||||||
|
#endif // BOOST_ATOMIC_DETAIL_BITWISE_FP_CAST_HPP_INCLUDED_
|
217
extern/boost/boost/atomic/detail/capabilities.hpp
vendored
Normal file
217
extern/boost/boost/atomic/detail/capabilities.hpp
vendored
Normal file
@ -0,0 +1,217 @@
|
|||||||
|
/*
|
||||||
|
* Distributed under the Boost Software License, Version 1.0.
|
||||||
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
* http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2014 Andrey Semashev
|
||||||
|
*/
|
||||||
|
/*!
|
||||||
|
* \file atomic/detail/capabilities.hpp
|
||||||
|
*
|
||||||
|
* This header defines core feature capabilities macros.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_DETAIL_CAPABILITIES_HPP_INCLUDED_
|
||||||
|
#define BOOST_ATOMIC_DETAIL_CAPABILITIES_HPP_INCLUDED_
|
||||||
|
|
||||||
|
#include <boost/atomic/detail/config.hpp>
|
||||||
|
#include <boost/atomic/detail/platform.hpp>
|
||||||
|
#include <boost/atomic/detail/int_sizes.hpp>
|
||||||
|
#if !defined(BOOST_ATOMIC_NO_FLOATING_POINT)
|
||||||
|
#include <boost/atomic/detail/float_sizes.hpp>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(BOOST_ATOMIC_DETAIL_CORE_BACKEND_HEADER)
|
||||||
|
#include BOOST_ATOMIC_DETAIL_CORE_BACKEND_HEADER(boost/atomic/detail/caps_)
|
||||||
|
#elif defined(BOOST_ATOMIC_DETAIL_CORE_ARCH_BACKEND_HEADER)
|
||||||
|
#include BOOST_ATOMIC_DETAIL_CORE_ARCH_BACKEND_HEADER(boost/atomic/detail/caps_arch_)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_INT8_LOCK_FREE
|
||||||
|
#define BOOST_ATOMIC_INT8_LOCK_FREE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_INT16_LOCK_FREE
|
||||||
|
#define BOOST_ATOMIC_INT16_LOCK_FREE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_INT32_LOCK_FREE
|
||||||
|
#define BOOST_ATOMIC_INT32_LOCK_FREE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_INT64_LOCK_FREE
|
||||||
|
#define BOOST_ATOMIC_INT64_LOCK_FREE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_INT128_LOCK_FREE
|
||||||
|
#define BOOST_ATOMIC_INT128_LOCK_FREE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_CHAR_LOCK_FREE
|
||||||
|
#define BOOST_ATOMIC_CHAR_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_CHAR8_T_LOCK_FREE
|
||||||
|
#define BOOST_ATOMIC_CHAR8_T_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_CHAR16_T_LOCK_FREE
|
||||||
|
#define BOOST_ATOMIC_CHAR16_T_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_CHAR32_T_LOCK_FREE
|
||||||
|
#define BOOST_ATOMIC_CHAR32_T_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_WCHAR_T_LOCK_FREE
|
||||||
|
#if BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T == 1
|
||||||
|
#define BOOST_ATOMIC_WCHAR_T_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T == 2
|
||||||
|
#define BOOST_ATOMIC_WCHAR_T_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T == 4
|
||||||
|
#define BOOST_ATOMIC_WCHAR_T_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T == 8
|
||||||
|
#define BOOST_ATOMIC_WCHAR_T_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE
|
||||||
|
#else
|
||||||
|
#define BOOST_ATOMIC_WCHAR_T_LOCK_FREE 0
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_SHORT_LOCK_FREE
|
||||||
|
#if BOOST_ATOMIC_DETAIL_SIZEOF_SHORT == 1
|
||||||
|
#define BOOST_ATOMIC_SHORT_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_SHORT == 2
|
||||||
|
#define BOOST_ATOMIC_SHORT_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_SHORT == 4
|
||||||
|
#define BOOST_ATOMIC_SHORT_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_SHORT == 8
|
||||||
|
#define BOOST_ATOMIC_SHORT_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE
|
||||||
|
#else
|
||||||
|
#define BOOST_ATOMIC_SHORT_LOCK_FREE 0
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_INT_LOCK_FREE
|
||||||
|
#if BOOST_ATOMIC_DETAIL_SIZEOF_INT == 1
|
||||||
|
#define BOOST_ATOMIC_INT_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_INT == 2
|
||||||
|
#define BOOST_ATOMIC_INT_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_INT == 4
|
||||||
|
#define BOOST_ATOMIC_INT_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_INT == 8
|
||||||
|
#define BOOST_ATOMIC_INT_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE
|
||||||
|
#else
|
||||||
|
#define BOOST_ATOMIC_INT_LOCK_FREE 0
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_LONG_LOCK_FREE
|
||||||
|
#if BOOST_ATOMIC_DETAIL_SIZEOF_LONG == 1
|
||||||
|
#define BOOST_ATOMIC_LONG_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_LONG == 2
|
||||||
|
#define BOOST_ATOMIC_LONG_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_LONG == 4
|
||||||
|
#define BOOST_ATOMIC_LONG_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_LONG == 8
|
||||||
|
#define BOOST_ATOMIC_LONG_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE
|
||||||
|
#else
|
||||||
|
#define BOOST_ATOMIC_LONG_LOCK_FREE 0
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_LLONG_LOCK_FREE
|
||||||
|
#if BOOST_ATOMIC_DETAIL_SIZEOF_LLONG == 1
|
||||||
|
#define BOOST_ATOMIC_LLONG_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_LLONG == 2
|
||||||
|
#define BOOST_ATOMIC_LLONG_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_LLONG == 4
|
||||||
|
#define BOOST_ATOMIC_LLONG_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_LLONG == 8
|
||||||
|
#define BOOST_ATOMIC_LLONG_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE
|
||||||
|
#else
|
||||||
|
#define BOOST_ATOMIC_LLONG_LOCK_FREE 0
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_POINTER_LOCK_FREE
|
||||||
|
#if (BOOST_ATOMIC_DETAIL_SIZEOF_POINTER + 0) == 8
|
||||||
|
#define BOOST_ATOMIC_POINTER_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE
|
||||||
|
#elif (BOOST_ATOMIC_DETAIL_SIZEOF_POINTER + 0) == 4
|
||||||
|
#define BOOST_ATOMIC_POINTER_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
|
||||||
|
#else
|
||||||
|
#define BOOST_ATOMIC_POINTER_LOCK_FREE 0
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define BOOST_ATOMIC_ADDRESS_LOCK_FREE BOOST_ATOMIC_POINTER_LOCK_FREE
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_BOOL_LOCK_FREE
|
||||||
|
// We store bools in 1-byte storage in all backends
|
||||||
|
#define BOOST_ATOMIC_BOOL_LOCK_FREE BOOST_ATOMIC_INT8_LOCK_FREE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_FLAG_LOCK_FREE
|
||||||
|
// atomic_flag uses 4-byte storage
|
||||||
|
#define BOOST_ATOMIC_FLAG_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(BOOST_ATOMIC_NO_FLOATING_POINT)
|
||||||
|
|
||||||
|
#if !defined(BOOST_ATOMIC_FLOAT_LOCK_FREE) && defined(BOOST_ATOMIC_DETAIL_SIZEOF_FLOAT)
|
||||||
|
#if BOOST_ATOMIC_DETAIL_SIZEOF_FLOAT == 2
|
||||||
|
#define BOOST_ATOMIC_FLOAT_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_FLOAT == 4
|
||||||
|
#define BOOST_ATOMIC_FLOAT_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_FLOAT == 8
|
||||||
|
#define BOOST_ATOMIC_FLOAT_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_FLOAT > 8 && BOOST_ATOMIC_DETAIL_SIZEOF_FLOAT <= 16
|
||||||
|
#define BOOST_ATOMIC_FLOAT_LOCK_FREE BOOST_ATOMIC_INT128_LOCK_FREE
|
||||||
|
#else
|
||||||
|
#define BOOST_ATOMIC_FLOAT_LOCK_FREE 0
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(BOOST_ATOMIC_DOUBLE_LOCK_FREE) && defined(BOOST_ATOMIC_DETAIL_SIZEOF_DOUBLE)
|
||||||
|
#if BOOST_ATOMIC_DETAIL_SIZEOF_DOUBLE == 2
|
||||||
|
#define BOOST_ATOMIC_DOUBLE_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_DOUBLE == 4
|
||||||
|
#define BOOST_ATOMIC_DOUBLE_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_DOUBLE == 8
|
||||||
|
#define BOOST_ATOMIC_DOUBLE_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_DOUBLE > 8 && BOOST_ATOMIC_DETAIL_SIZEOF_DOUBLE <= 16
|
||||||
|
#define BOOST_ATOMIC_DOUBLE_LOCK_FREE BOOST_ATOMIC_INT128_LOCK_FREE
|
||||||
|
#else
|
||||||
|
#define BOOST_ATOMIC_DOUBLE_LOCK_FREE 0
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(BOOST_ATOMIC_LONG_DOUBLE_LOCK_FREE) && defined(BOOST_ATOMIC_DETAIL_SIZEOF_LONG_DOUBLE)
|
||||||
|
#if BOOST_ATOMIC_DETAIL_SIZEOF_LONG_DOUBLE == 2
|
||||||
|
#define BOOST_ATOMIC_LONG_DOUBLE_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_LONG_DOUBLE == 4
|
||||||
|
#define BOOST_ATOMIC_LONG_DOUBLE_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_LONG_DOUBLE == 8
|
||||||
|
#define BOOST_ATOMIC_LONG_DOUBLE_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_LONG_DOUBLE > 8 && BOOST_ATOMIC_DETAIL_SIZEOF_LONG_DOUBLE <= 16
|
||||||
|
#define BOOST_ATOMIC_LONG_DOUBLE_LOCK_FREE BOOST_ATOMIC_INT128_LOCK_FREE
|
||||||
|
#else
|
||||||
|
#define BOOST_ATOMIC_LONG_DOUBLE_LOCK_FREE 0
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // !defined(BOOST_ATOMIC_NO_FLOATING_POINT)
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_THREAD_FENCE
|
||||||
|
#define BOOST_ATOMIC_THREAD_FENCE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_SIGNAL_FENCE
|
||||||
|
#define BOOST_ATOMIC_SIGNAL_FENCE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // BOOST_ATOMIC_DETAIL_CAPABILITIES_HPP_INCLUDED_
|
46
extern/boost/boost/atomic/detail/caps_arch_gcc_aarch32.hpp
vendored
Normal file
46
extern/boost/boost/atomic/detail/caps_arch_gcc_aarch32.hpp
vendored
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* Distributed under the Boost Software License, Version 1.0.
|
||||||
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
* http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2020 Andrey Semashev
|
||||||
|
*/
|
||||||
|
/*!
|
||||||
|
* \file atomic/detail/caps_arch_gcc_aarch32.hpp
|
||||||
|
*
|
||||||
|
* This header defines feature capabilities macros
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_DETAIL_CAPS_ARCH_GCC_AARCH32_HPP_INCLUDED_
|
||||||
|
#define BOOST_ATOMIC_DETAIL_CAPS_ARCH_GCC_AARCH32_HPP_INCLUDED_
|
||||||
|
|
||||||
|
#include <boost/atomic/detail/config.hpp>
|
||||||
|
|
||||||
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__ARMEL__) || \
|
||||||
|
(defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) || \
|
||||||
|
(defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)) || \
|
||||||
|
defined(BOOST_WINDOWS)
|
||||||
|
#define BOOST_ATOMIC_DETAIL_AARCH32_LITTLE_ENDIAN
|
||||||
|
#elif defined(__ARMEB__) || \
|
||||||
|
defined(__ARM_BIG_ENDIAN) || \
|
||||||
|
(defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) || \
|
||||||
|
(defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__))
|
||||||
|
#define BOOST_ATOMIC_DETAIL_AARCH32_BIG_ENDIAN
|
||||||
|
#else
|
||||||
|
#error "Boost.Atomic: Failed to determine AArch32 endianness, the target platform is not supported. Please, report to the developers (patches are welcome)."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define BOOST_ATOMIC_INT8_LOCK_FREE 2
|
||||||
|
#define BOOST_ATOMIC_INT16_LOCK_FREE 2
|
||||||
|
#define BOOST_ATOMIC_INT32_LOCK_FREE 2
|
||||||
|
#define BOOST_ATOMIC_INT64_LOCK_FREE 2
|
||||||
|
#define BOOST_ATOMIC_POINTER_LOCK_FREE 2
|
||||||
|
|
||||||
|
#define BOOST_ATOMIC_THREAD_FENCE 2
|
||||||
|
#define BOOST_ATOMIC_SIGNAL_FENCE 2
|
||||||
|
|
||||||
|
#endif // BOOST_ATOMIC_DETAIL_CAPS_ARCH_GCC_AARCH32_HPP_INCLUDED_
|
58
extern/boost/boost/atomic/detail/caps_arch_gcc_aarch64.hpp
vendored
Normal file
58
extern/boost/boost/atomic/detail/caps_arch_gcc_aarch64.hpp
vendored
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
/*
|
||||||
|
* Distributed under the Boost Software License, Version 1.0.
|
||||||
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
* http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2020 Andrey Semashev
|
||||||
|
*/
|
||||||
|
/*!
|
||||||
|
* \file atomic/detail/caps_arch_gcc_aarch64.hpp
|
||||||
|
*
|
||||||
|
* This header defines feature capabilities macros
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_DETAIL_CAPS_ARCH_GCC_AARCH64_HPP_INCLUDED_
|
||||||
|
#define BOOST_ATOMIC_DETAIL_CAPS_ARCH_GCC_AARCH64_HPP_INCLUDED_
|
||||||
|
|
||||||
|
#include <boost/atomic/detail/config.hpp>
|
||||||
|
|
||||||
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__AARCH64EL__) || \
|
||||||
|
(defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) || \
|
||||||
|
(defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)) || \
|
||||||
|
defined(BOOST_WINDOWS)
|
||||||
|
#define BOOST_ATOMIC_DETAIL_AARCH64_LITTLE_ENDIAN
|
||||||
|
#elif defined(__AARCH64EB__) || \
|
||||||
|
defined(__ARM_BIG_ENDIAN) || \
|
||||||
|
(defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) || \
|
||||||
|
(defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__))
|
||||||
|
#define BOOST_ATOMIC_DETAIL_AARCH64_BIG_ENDIAN
|
||||||
|
#else
|
||||||
|
#error "Boost.Atomic: Failed to determine AArch64 endianness, the target platform is not supported. Please, report to the developers (patches are welcome)."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__ARM_FEATURE_ATOMICS)
|
||||||
|
// ARMv8.1 added Large System Extensions, which includes cas, swp, and a number of other read-modify-write instructions
|
||||||
|
#define BOOST_ATOMIC_DETAIL_AARCH64_HAS_LSE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__ARM_FEATURE_COMPLEX)
|
||||||
|
// ARMv8.3 added Release Consistency processor consistent (RCpc) memory model, which includes ldapr and similar instructions.
|
||||||
|
// Unfortunately, there seems to be no dedicated __ARM_FEATURE macro for this, so we use __ARM_FEATURE_COMPLEX, which is also defined starting ARMv8.3.
|
||||||
|
#define BOOST_ATOMIC_DETAIL_AARCH64_HAS_RCPC
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define BOOST_ATOMIC_INT8_LOCK_FREE 2
|
||||||
|
#define BOOST_ATOMIC_INT16_LOCK_FREE 2
|
||||||
|
#define BOOST_ATOMIC_INT32_LOCK_FREE 2
|
||||||
|
#define BOOST_ATOMIC_INT64_LOCK_FREE 2
|
||||||
|
#define BOOST_ATOMIC_INT128_LOCK_FREE 2
|
||||||
|
#define BOOST_ATOMIC_POINTER_LOCK_FREE 2
|
||||||
|
|
||||||
|
#define BOOST_ATOMIC_THREAD_FENCE 2
|
||||||
|
#define BOOST_ATOMIC_SIGNAL_FENCE 2
|
||||||
|
|
||||||
|
#endif // BOOST_ATOMIC_DETAIL_CAPS_ARCH_GCC_AARCH64_HPP_INCLUDED_
|
34
extern/boost/boost/atomic/detail/caps_arch_gcc_alpha.hpp
vendored
Normal file
34
extern/boost/boost/atomic/detail/caps_arch_gcc_alpha.hpp
vendored
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* Distributed under the Boost Software License, Version 1.0.
|
||||||
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
* http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009 Helge Bahmann
|
||||||
|
* Copyright (c) 2013 Tim Blechmann
|
||||||
|
* Copyright (c) 2014 Andrey Semashev
|
||||||
|
*/
|
||||||
|
/*!
|
||||||
|
* \file atomic/detail/caps_arch_gcc_alpha.hpp
|
||||||
|
*
|
||||||
|
* This header defines feature capabilities macros
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_DETAIL_CAPS_ARCH_GCC_ALPHA_HPP_INCLUDED_
|
||||||
|
#define BOOST_ATOMIC_DETAIL_CAPS_ARCH_GCC_ALPHA_HPP_INCLUDED_
|
||||||
|
|
||||||
|
#include <boost/atomic/detail/config.hpp>
|
||||||
|
|
||||||
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define BOOST_ATOMIC_INT8_LOCK_FREE 2
|
||||||
|
#define BOOST_ATOMIC_INT16_LOCK_FREE 2
|
||||||
|
#define BOOST_ATOMIC_INT32_LOCK_FREE 2
|
||||||
|
#define BOOST_ATOMIC_INT64_LOCK_FREE 2
|
||||||
|
#define BOOST_ATOMIC_POINTER_LOCK_FREE 2
|
||||||
|
|
||||||
|
#define BOOST_ATOMIC_THREAD_FENCE 2
|
||||||
|
#define BOOST_ATOMIC_SIGNAL_FENCE 2
|
||||||
|
|
||||||
|
#endif // BOOST_ATOMIC_DETAIL_CAPS_ARCH_GCC_ALPHA_HPP_INCLUDED_
|
96
extern/boost/boost/atomic/detail/caps_arch_gcc_arm.hpp
vendored
Normal file
96
extern/boost/boost/atomic/detail/caps_arch_gcc_arm.hpp
vendored
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
/*
|
||||||
|
* Distributed under the Boost Software License, Version 1.0.
|
||||||
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
* http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009 Helge Bahmann
|
||||||
|
* Copyright (c) 2009 Phil Endecott
|
||||||
|
* Copyright (c) 2013 Tim Blechmann
|
||||||
|
* ARM Code by Phil Endecott, based on other architectures.
|
||||||
|
* Copyright (c) 2014, 2020 Andrey Semashev
|
||||||
|
*/
|
||||||
|
/*!
|
||||||
|
* \file atomic/detail/caps_arch_gcc_arm.hpp
|
||||||
|
*
|
||||||
|
* This header defines feature capabilities macros
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_DETAIL_CAPS_ARCH_GCC_ARM_HPP_INCLUDED_
|
||||||
|
#define BOOST_ATOMIC_DETAIL_CAPS_ARCH_GCC_ARM_HPP_INCLUDED_
|
||||||
|
|
||||||
|
#include <boost/atomic/detail/config.hpp>
|
||||||
|
#include <boost/atomic/detail/platform.hpp>
|
||||||
|
|
||||||
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__ARMEL__) || \
|
||||||
|
(defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) || \
|
||||||
|
(defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)) || \
|
||||||
|
defined(BOOST_WINDOWS)
|
||||||
|
#define BOOST_ATOMIC_DETAIL_ARM_LITTLE_ENDIAN
|
||||||
|
#elif defined(__ARMEB__) || \
|
||||||
|
defined(__ARM_BIG_ENDIAN) || \
|
||||||
|
(defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) || \
|
||||||
|
(defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__))
|
||||||
|
#define BOOST_ATOMIC_DETAIL_ARM_BIG_ENDIAN
|
||||||
|
#else
|
||||||
|
#error "Boost.Atomic: Failed to determine ARM endianness, the target platform is not supported. Please, report to the developers (patches are welcome)."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__GNUC__) && defined(__arm__) && (BOOST_ATOMIC_DETAIL_ARM_ARCH >= 6)
|
||||||
|
|
||||||
|
#if BOOST_ATOMIC_DETAIL_ARM_ARCH > 6
|
||||||
|
// ARMv7 and later have dmb instruction
|
||||||
|
#define BOOST_ATOMIC_DETAIL_ARM_HAS_DMB 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__ARM_FEATURE_LDREX)
|
||||||
|
|
||||||
|
#if (__ARM_FEATURE_LDREX & 1)
|
||||||
|
#define BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXB_STREXB 1
|
||||||
|
#endif
|
||||||
|
#if (__ARM_FEATURE_LDREX & 2)
|
||||||
|
#define BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXH_STREXH 1
|
||||||
|
#endif
|
||||||
|
#if (__ARM_FEATURE_LDREX & 8)
|
||||||
|
#define BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXD_STREXD 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#else // defined(__ARM_FEATURE_LDREX)
|
||||||
|
|
||||||
|
#if !(defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6Z__))
|
||||||
|
|
||||||
|
// ARMv6k and ARMv7 have 8 and 16-bit ldrex/strex variants, but at least GCC 4.7 fails to compile them. GCC 4.9 is known to work.
|
||||||
|
#if (__GNUC__ * 100 + __GNUC_MINOR__) >= 409
|
||||||
|
#define BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXB_STREXB 1
|
||||||
|
#define BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXH_STREXH 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !(((defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6ZK__)) && defined(__thumb__)) || defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7M__))
|
||||||
|
// ARMv6k and ARMv7 except ARMv7-M have 64-bit ldrex/strex variants.
|
||||||
|
// Unfortunately, GCC (at least 4.7.3 on Ubuntu) does not allocate register pairs properly when targeting ARMv6k Thumb,
|
||||||
|
// which is required for ldrexd/strexd instructions, so we disable 64-bit support. When targeting ARMv6k ARM
|
||||||
|
// or ARMv7 (both ARM and Thumb 2) it works as expected.
|
||||||
|
#define BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXD_STREXD 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // !(defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6Z__))
|
||||||
|
|
||||||
|
#endif // defined(__ARM_FEATURE_LDREX)
|
||||||
|
|
||||||
|
#endif // defined(__GNUC__) && defined(__arm__) && (BOOST_ATOMIC_DETAIL_ARM_ARCH >= 6)
|
||||||
|
|
||||||
|
#define BOOST_ATOMIC_INT8_LOCK_FREE 2
|
||||||
|
#define BOOST_ATOMIC_INT16_LOCK_FREE 2
|
||||||
|
#define BOOST_ATOMIC_INT32_LOCK_FREE 2
|
||||||
|
#if defined(BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXD_STREXD)
|
||||||
|
#define BOOST_ATOMIC_INT64_LOCK_FREE 2
|
||||||
|
#endif
|
||||||
|
#define BOOST_ATOMIC_POINTER_LOCK_FREE 2
|
||||||
|
|
||||||
|
#define BOOST_ATOMIC_THREAD_FENCE 2
|
||||||
|
#define BOOST_ATOMIC_SIGNAL_FENCE 2
|
||||||
|
|
||||||
|
#endif // BOOST_ATOMIC_DETAIL_CAPS_ARCH_GCC_ARM_HPP_INCLUDED_
|
55
extern/boost/boost/atomic/detail/caps_arch_gcc_ppc.hpp
vendored
Normal file
55
extern/boost/boost/atomic/detail/caps_arch_gcc_ppc.hpp
vendored
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
/*
|
||||||
|
* Distributed under the Boost Software License, Version 1.0.
|
||||||
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
* http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009 Helge Bahmann
|
||||||
|
* Copyright (c) 2013 Tim Blechmann
|
||||||
|
* Copyright (c) 2014 Andrey Semashev
|
||||||
|
*/
|
||||||
|
/*!
|
||||||
|
* \file atomic/detail/caps_arch_gcc_ppc.hpp
|
||||||
|
*
|
||||||
|
* This header defines feature capabilities macros
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_DETAIL_CAPS_ARCH_GCC_PPC_HPP_INCLUDED_
|
||||||
|
#define BOOST_ATOMIC_DETAIL_CAPS_ARCH_GCC_PPC_HPP_INCLUDED_
|
||||||
|
|
||||||
|
#include <boost/atomic/detail/config.hpp>
|
||||||
|
|
||||||
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__POWERPC__) || defined(__PPC__)
|
||||||
|
|
||||||
|
#if defined(_ARCH_PWR8)
|
||||||
|
// Power8 and later architectures have 8 and 16-bit instructions
|
||||||
|
#define BOOST_ATOMIC_DETAIL_PPC_HAS_LBARX_STBCX
|
||||||
|
#define BOOST_ATOMIC_DETAIL_PPC_HAS_LHARX_STHCX
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__powerpc64__) || defined(__PPC64__)
|
||||||
|
// Power7 and later architectures in 64-bit mode have 64-bit instructions
|
||||||
|
#define BOOST_ATOMIC_DETAIL_PPC_HAS_LDARX_STDCX
|
||||||
|
#if defined(_ARCH_PWR8)
|
||||||
|
// Power8 also has 128-bit instructions
|
||||||
|
#define BOOST_ATOMIC_DETAIL_PPC_HAS_LQARX_STQCX
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // defined(__POWERPC__) || defined(__PPC__)
|
||||||
|
|
||||||
|
#define BOOST_ATOMIC_INT8_LOCK_FREE 2
|
||||||
|
#define BOOST_ATOMIC_INT16_LOCK_FREE 2
|
||||||
|
#define BOOST_ATOMIC_INT32_LOCK_FREE 2
|
||||||
|
#if defined(BOOST_ATOMIC_DETAIL_PPC_HAS_LDARX_STDCX)
|
||||||
|
#define BOOST_ATOMIC_INT64_LOCK_FREE 2
|
||||||
|
#endif
|
||||||
|
#define BOOST_ATOMIC_POINTER_LOCK_FREE 2
|
||||||
|
|
||||||
|
#define BOOST_ATOMIC_THREAD_FENCE 2
|
||||||
|
#define BOOST_ATOMIC_SIGNAL_FENCE 2
|
||||||
|
|
||||||
|
#endif // BOOST_ATOMIC_DETAIL_CAPS_ARCH_GCC_PPC_HPP_INCLUDED_
|
34
extern/boost/boost/atomic/detail/caps_arch_gcc_sparc.hpp
vendored
Normal file
34
extern/boost/boost/atomic/detail/caps_arch_gcc_sparc.hpp
vendored
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* Distributed under the Boost Software License, Version 1.0.
|
||||||
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
* http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010 Helge Bahmann
|
||||||
|
* Copyright (c) 2013 Tim Blechmann
|
||||||
|
* Copyright (c) 2014 Andrey Semashev
|
||||||
|
*/
|
||||||
|
/*!
|
||||||
|
* \file atomic/detail/caps_arch_gcc_sparc.hpp
|
||||||
|
*
|
||||||
|
* This header defines feature capabilities macros
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_DETAIL_CAPS_ARCH_GCC_SPARC_HPP_INCLUDED_
|
||||||
|
#define BOOST_ATOMIC_DETAIL_CAPS_ARCH_GCC_SPARC_HPP_INCLUDED_
|
||||||
|
|
||||||
|
#include <boost/atomic/detail/config.hpp>
|
||||||
|
|
||||||
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define BOOST_ATOMIC_INT8_LOCK_FREE 2
|
||||||
|
#define BOOST_ATOMIC_INT16_LOCK_FREE 2
|
||||||
|
#define BOOST_ATOMIC_INT32_LOCK_FREE 2
|
||||||
|
#define BOOST_ATOMIC_INT64_LOCK_FREE 2
|
||||||
|
#define BOOST_ATOMIC_POINTER_LOCK_FREE 2
|
||||||
|
|
||||||
|
#define BOOST_ATOMIC_THREAD_FENCE 2
|
||||||
|
#define BOOST_ATOMIC_SIGNAL_FENCE 2
|
||||||
|
|
||||||
|
#endif // BOOST_ATOMIC_DETAIL_CAPS_ARCH_GCC_SPARC_HPP_INCLUDED_
|
74
extern/boost/boost/atomic/detail/caps_arch_gcc_x86.hpp
vendored
Normal file
74
extern/boost/boost/atomic/detail/caps_arch_gcc_x86.hpp
vendored
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
/*
|
||||||
|
* Distributed under the Boost Software License, Version 1.0.
|
||||||
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
* http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009 Helge Bahmann
|
||||||
|
* Copyright (c) 2012 Tim Blechmann
|
||||||
|
* Copyright (c) 2013 - 2014 Andrey Semashev
|
||||||
|
*/
|
||||||
|
/*!
|
||||||
|
* \file atomic/detail/caps_arch_gcc_x86.hpp
|
||||||
|
*
|
||||||
|
* This header defines feature capabilities macros
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_DETAIL_CAPS_ARCH_GCC_X86_HPP_INCLUDED_
|
||||||
|
#define BOOST_ATOMIC_DETAIL_CAPS_ARCH_GCC_X86_HPP_INCLUDED_
|
||||||
|
|
||||||
|
#include <boost/atomic/detail/config.hpp>
|
||||||
|
|
||||||
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__GNUC__)
|
||||||
|
|
||||||
|
#if defined(__i386__) &&\
|
||||||
|
(\
|
||||||
|
defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8) ||\
|
||||||
|
defined(__i586__) || defined(__i686__) || defined(__SSE__)\
|
||||||
|
)
|
||||||
|
#define BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG8B 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__x86_64__) && defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16)
|
||||||
|
#define BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__x86_64__) || defined(__SSE2__)
|
||||||
|
// Use mfence only if SSE2 is available
|
||||||
|
#define BOOST_ATOMIC_DETAIL_X86_HAS_MFENCE 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#else // defined(__GNUC__)
|
||||||
|
|
||||||
|
#if defined(__i386__) && !defined(BOOST_ATOMIC_NO_CMPXCHG8B)
|
||||||
|
#define BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG8B 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__x86_64__) && !defined(BOOST_ATOMIC_NO_CMPXCHG16B)
|
||||||
|
#define BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(BOOST_ATOMIC_NO_MFENCE)
|
||||||
|
#define BOOST_ATOMIC_DETAIL_X86_HAS_MFENCE 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // defined(__GNUC__)
|
||||||
|
|
||||||
|
#define BOOST_ATOMIC_INT8_LOCK_FREE 2
|
||||||
|
#define BOOST_ATOMIC_INT16_LOCK_FREE 2
|
||||||
|
#define BOOST_ATOMIC_INT32_LOCK_FREE 2
|
||||||
|
#if defined(__x86_64__) || defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG8B)
|
||||||
|
#define BOOST_ATOMIC_INT64_LOCK_FREE 2
|
||||||
|
#endif
|
||||||
|
#if defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B)
|
||||||
|
#define BOOST_ATOMIC_INT128_LOCK_FREE 2
|
||||||
|
#endif
|
||||||
|
#define BOOST_ATOMIC_POINTER_LOCK_FREE 2
|
||||||
|
|
||||||
|
#define BOOST_ATOMIC_THREAD_FENCE 2
|
||||||
|
#define BOOST_ATOMIC_SIGNAL_FENCE 2
|
||||||
|
|
||||||
|
#endif // BOOST_ATOMIC_DETAIL_CAPS_ARCH_GCC_X86_HPP_INCLUDED_
|
34
extern/boost/boost/atomic/detail/caps_arch_msvc_arm.hpp
vendored
Normal file
34
extern/boost/boost/atomic/detail/caps_arch_msvc_arm.hpp
vendored
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* Distributed under the Boost Software License, Version 1.0.
|
||||||
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
* http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009 Helge Bahmann
|
||||||
|
* Copyright (c) 2013 Tim Blechmann
|
||||||
|
* Copyright (c) 2012 - 2014 Andrey Semashev
|
||||||
|
*/
|
||||||
|
/*!
|
||||||
|
* \file atomic/detail/caps_arch_msvc_arm.hpp
|
||||||
|
*
|
||||||
|
* This header defines feature capabilities macros
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_DETAIL_CAPS_ARCH_MSVC_ARM_HPP_INCLUDED_
|
||||||
|
#define BOOST_ATOMIC_DETAIL_CAPS_ARCH_MSVC_ARM_HPP_INCLUDED_
|
||||||
|
|
||||||
|
#include <boost/atomic/detail/config.hpp>
|
||||||
|
|
||||||
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define BOOST_ATOMIC_INT8_LOCK_FREE 2
|
||||||
|
#define BOOST_ATOMIC_INT16_LOCK_FREE 2
|
||||||
|
#define BOOST_ATOMIC_INT32_LOCK_FREE 2
|
||||||
|
#define BOOST_ATOMIC_INT64_LOCK_FREE 2
|
||||||
|
#define BOOST_ATOMIC_POINTER_LOCK_FREE 2
|
||||||
|
|
||||||
|
#define BOOST_ATOMIC_THREAD_FENCE 2
|
||||||
|
#define BOOST_ATOMIC_SIGNAL_FENCE 2
|
||||||
|
|
||||||
|
#endif // BOOST_ATOMIC_DETAIL_CAPS_ARCH_MSVC_ARM_HPP_INCLUDED_
|
61
extern/boost/boost/atomic/detail/caps_arch_msvc_x86.hpp
vendored
Normal file
61
extern/boost/boost/atomic/detail/caps_arch_msvc_x86.hpp
vendored
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
/*
|
||||||
|
* Distributed under the Boost Software License, Version 1.0.
|
||||||
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
* http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009 Helge Bahmann
|
||||||
|
* Copyright (c) 2013 Tim Blechmann
|
||||||
|
* Copyright (c) 2012 - 2014 Andrey Semashev
|
||||||
|
*/
|
||||||
|
/*!
|
||||||
|
* \file atomic/detail/caps_arch_msvc_x86.hpp
|
||||||
|
*
|
||||||
|
* This header defines feature capabilities macros
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_DETAIL_CAPS_ARCH_MSVC_X86_HPP_INCLUDED_
|
||||||
|
#define BOOST_ATOMIC_DETAIL_CAPS_ARCH_MSVC_X86_HPP_INCLUDED_
|
||||||
|
|
||||||
|
#include <boost/atomic/detail/config.hpp>
|
||||||
|
|
||||||
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_M_IX86) && _M_IX86 >= 500
|
||||||
|
#define BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG8B 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_M_AMD64) && !defined(BOOST_ATOMIC_NO_CMPXCHG16B)
|
||||||
|
#if defined(__clang__)
|
||||||
|
#if defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16)
|
||||||
|
#define BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B 1
|
||||||
|
#endif
|
||||||
|
#elif _MSC_VER >= 1500
|
||||||
|
#define BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B 1
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_MSC_VER) && (defined(_M_AMD64) || (defined(_M_IX86) && defined(_M_IX86_FP) && _M_IX86_FP >= 2))
|
||||||
|
// Use mfence only if SSE2 is available
|
||||||
|
#define BOOST_ATOMIC_DETAIL_X86_HAS_MFENCE 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define BOOST_ATOMIC_INT8_LOCK_FREE 2
|
||||||
|
#define BOOST_ATOMIC_INT16_LOCK_FREE 2
|
||||||
|
#define BOOST_ATOMIC_INT32_LOCK_FREE 2
|
||||||
|
|
||||||
|
#if defined(_M_AMD64) || defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG8B)
|
||||||
|
#define BOOST_ATOMIC_INT64_LOCK_FREE 2
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B)
|
||||||
|
#define BOOST_ATOMIC_INT128_LOCK_FREE 2
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define BOOST_ATOMIC_POINTER_LOCK_FREE 2
|
||||||
|
|
||||||
|
#define BOOST_ATOMIC_THREAD_FENCE 2
|
||||||
|
#define BOOST_ATOMIC_SIGNAL_FENCE 2
|
||||||
|
|
||||||
|
#endif // BOOST_ATOMIC_DETAIL_CAPS_ARCH_MSVC_X86_HPP_INCLUDED_
|
158
extern/boost/boost/atomic/detail/caps_gcc_atomic.hpp
vendored
Normal file
158
extern/boost/boost/atomic/detail/caps_gcc_atomic.hpp
vendored
Normal file
@ -0,0 +1,158 @@
|
|||||||
|
/*
|
||||||
|
* Distributed under the Boost Software License, Version 1.0.
|
||||||
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
* http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2014, 2020 Andrey Semashev
|
||||||
|
*/
|
||||||
|
/*!
|
||||||
|
* \file atomic/detail/caps_gcc_atomic.hpp
|
||||||
|
*
|
||||||
|
* This header defines feature capabilities macros
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_DETAIL_CAPS_GCC_ATOMIC_HPP_INCLUDED_
|
||||||
|
#define BOOST_ATOMIC_DETAIL_CAPS_GCC_ATOMIC_HPP_INCLUDED_
|
||||||
|
|
||||||
|
#include <boost/atomic/detail/config.hpp>
|
||||||
|
#include <boost/atomic/detail/int_sizes.hpp>
|
||||||
|
|
||||||
|
#if defined(BOOST_ATOMIC_DETAIL_CORE_ARCH_BACKEND_HEADER)
|
||||||
|
#include BOOST_ATOMIC_DETAIL_CORE_ARCH_BACKEND_HEADER(boost/atomic/detail/caps_arch_)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Translate type-based lock-free macros to size-based ones
|
||||||
|
#define BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT8_LOCK_FREE __GCC_ATOMIC_CHAR_LOCK_FREE
|
||||||
|
|
||||||
|
#if BOOST_ATOMIC_DETAIL_SIZEOF_SHORT == 2
|
||||||
|
#define BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT16_LOCK_FREE __GCC_ATOMIC_SHORT_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_INT == 2
|
||||||
|
#define BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT16_LOCK_FREE __GCC_ATOMIC_INT_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_LONG == 2
|
||||||
|
#define BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT16_LOCK_FREE __GCC_ATOMIC_LONG_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_LLONG == 2
|
||||||
|
#define BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT16_LOCK_FREE __GCC_ATOMIC_LLONG_LOCK_FREE
|
||||||
|
#else
|
||||||
|
#define BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT16_LOCK_FREE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if BOOST_ATOMIC_DETAIL_SIZEOF_SHORT == 4
|
||||||
|
#define BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT32_LOCK_FREE __GCC_ATOMIC_SHORT_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_INT == 4
|
||||||
|
#define BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT32_LOCK_FREE __GCC_ATOMIC_INT_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_LONG == 4
|
||||||
|
#define BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT32_LOCK_FREE __GCC_ATOMIC_LONG_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_LLONG == 4
|
||||||
|
#define BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT32_LOCK_FREE __GCC_ATOMIC_LLONG_LOCK_FREE
|
||||||
|
#else
|
||||||
|
#define BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT32_LOCK_FREE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if BOOST_ATOMIC_DETAIL_SIZEOF_SHORT == 8
|
||||||
|
#define BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT64_LOCK_FREE __GCC_ATOMIC_SHORT_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_INT == 8
|
||||||
|
#define BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT64_LOCK_FREE __GCC_ATOMIC_INT_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_LONG == 8
|
||||||
|
#define BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT64_LOCK_FREE __GCC_ATOMIC_LONG_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_LLONG == 8
|
||||||
|
#define BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT64_LOCK_FREE __GCC_ATOMIC_LLONG_LOCK_FREE
|
||||||
|
#else
|
||||||
|
#define BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT64_LOCK_FREE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if BOOST_ATOMIC_DETAIL_SIZEOF_SHORT == 16
|
||||||
|
#define BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT128_LOCK_FREE __GCC_ATOMIC_SHORT_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_INT == 16
|
||||||
|
#define BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT128_LOCK_FREE __GCC_ATOMIC_INT_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_LONG == 16
|
||||||
|
#define BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT128_LOCK_FREE __GCC_ATOMIC_LONG_LOCK_FREE
|
||||||
|
#elif BOOST_ATOMIC_DETAIL_SIZEOF_LLONG == 16
|
||||||
|
#define BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT128_LOCK_FREE __GCC_ATOMIC_LLONG_LOCK_FREE
|
||||||
|
#else
|
||||||
|
#define BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT128_LOCK_FREE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// On x86-64, clang 3.4 does not implement 128-bit __atomic* intrinsics even though it defines __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16:
|
||||||
|
// https://bugs.llvm.org/show_bug.cgi?id=19149
|
||||||
|
// Another problem exists with gcc 7 and later, as it requires to link with libatomic to use 16-byte intrinsics:
|
||||||
|
// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80878
|
||||||
|
// Both clang and gcc do generate cmpxchg16b for __sync_val_compare_and_swap though.
|
||||||
|
#if defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B) &&\
|
||||||
|
(\
|
||||||
|
(defined(BOOST_CLANG) && (__clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 5))) ||\
|
||||||
|
(defined(BOOST_GCC) && BOOST_GCC >= 70000)\
|
||||||
|
)
|
||||||
|
#undef BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT128_LOCK_FREE
|
||||||
|
#define BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT128_LOCK_FREE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// On 32-bit x86, there is a clang bug for 64-bit atomics: https://bugs.llvm.org/show_bug.cgi?id=19355. The compiler defines
|
||||||
|
// __GCC_ATOMIC_LLONG_LOCK_FREE to 1 when the target architecture supports 64-bit atomic instructions (i.e. the value should be 2).
|
||||||
|
// Additionally, any clang version requires to link with libatomic for 64-bit __atomic* intrinsics on x86. It does generate
|
||||||
|
// cmpxchg8b for __sync_val_compare_and_swap though.
|
||||||
|
#if defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG8B) && defined(BOOST_CLANG)
|
||||||
|
#undef BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT64_LOCK_FREE
|
||||||
|
#define BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT64_LOCK_FREE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Override arch-specific macros if atomic intrinsics provide better guarantees
|
||||||
|
#if !defined(BOOST_ATOMIC_INT128_LOCK_FREE) || (BOOST_ATOMIC_INT128_LOCK_FREE < BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT128_LOCK_FREE)
|
||||||
|
#undef BOOST_ATOMIC_INT128_LOCK_FREE
|
||||||
|
#define BOOST_ATOMIC_INT128_LOCK_FREE BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT128_LOCK_FREE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(BOOST_ATOMIC_INT64_LOCK_FREE) || (BOOST_ATOMIC_INT64_LOCK_FREE < BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT64_LOCK_FREE) || (BOOST_ATOMIC_INT64_LOCK_FREE < BOOST_ATOMIC_INT128_LOCK_FREE)
|
||||||
|
#undef BOOST_ATOMIC_INT64_LOCK_FREE
|
||||||
|
#if BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT64_LOCK_FREE >= BOOST_ATOMIC_INT128_LOCK_FREE
|
||||||
|
#define BOOST_ATOMIC_INT64_LOCK_FREE BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT64_LOCK_FREE
|
||||||
|
#else
|
||||||
|
#define BOOST_ATOMIC_INT64_LOCK_FREE BOOST_ATOMIC_INT128_LOCK_FREE
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(BOOST_ATOMIC_INT32_LOCK_FREE) || (BOOST_ATOMIC_INT32_LOCK_FREE < BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT32_LOCK_FREE) || (BOOST_ATOMIC_INT32_LOCK_FREE < BOOST_ATOMIC_INT64_LOCK_FREE)
|
||||||
|
#undef BOOST_ATOMIC_INT32_LOCK_FREE
|
||||||
|
#if BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT32_LOCK_FREE >= BOOST_ATOMIC_INT64_LOCK_FREE
|
||||||
|
#define BOOST_ATOMIC_INT32_LOCK_FREE BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT32_LOCK_FREE
|
||||||
|
#else
|
||||||
|
#define BOOST_ATOMIC_INT32_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(BOOST_ATOMIC_INT16_LOCK_FREE) || (BOOST_ATOMIC_INT16_LOCK_FREE < BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT16_LOCK_FREE) || (BOOST_ATOMIC_INT16_LOCK_FREE < BOOST_ATOMIC_INT32_LOCK_FREE)
|
||||||
|
#undef BOOST_ATOMIC_INT16_LOCK_FREE
|
||||||
|
#if BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT16_LOCK_FREE >= BOOST_ATOMIC_INT32_LOCK_FREE
|
||||||
|
#define BOOST_ATOMIC_INT16_LOCK_FREE BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT16_LOCK_FREE
|
||||||
|
#else
|
||||||
|
#define BOOST_ATOMIC_INT16_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(BOOST_ATOMIC_INT8_LOCK_FREE) || (BOOST_ATOMIC_INT8_LOCK_FREE < BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT8_LOCK_FREE) || (BOOST_ATOMIC_INT8_LOCK_FREE < BOOST_ATOMIC_INT16_LOCK_FREE)
|
||||||
|
#undef BOOST_ATOMIC_INT8_LOCK_FREE
|
||||||
|
#if BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT8_LOCK_FREE >= BOOST_ATOMIC_INT16_LOCK_FREE
|
||||||
|
#define BOOST_ATOMIC_INT8_LOCK_FREE BOOST_ATOMIC_DETAIL_GCC_ATOMIC_INT8_LOCK_FREE
|
||||||
|
#else
|
||||||
|
#define BOOST_ATOMIC_INT8_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(BOOST_ATOMIC_POINTER_LOCK_FREE) || (BOOST_ATOMIC_POINTER_LOCK_FREE < __GCC_ATOMIC_POINTER_LOCK_FREE)
|
||||||
|
#undef BOOST_ATOMIC_POINTER_LOCK_FREE
|
||||||
|
#define BOOST_ATOMIC_POINTER_LOCK_FREE __GCC_ATOMIC_POINTER_LOCK_FREE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(BOOST_ATOMIC_THREAD_FENCE) || (BOOST_ATOMIC_THREAD_FENCE < 2)
|
||||||
|
#undef BOOST_ATOMIC_THREAD_FENCE
|
||||||
|
#define BOOST_ATOMIC_THREAD_FENCE 2
|
||||||
|
#endif
|
||||||
|
#if !defined(BOOST_ATOMIC_SIGNAL_FENCE) || (BOOST_ATOMIC_SIGNAL_FENCE < 2)
|
||||||
|
#undef BOOST_ATOMIC_SIGNAL_FENCE
|
||||||
|
#define BOOST_ATOMIC_SIGNAL_FENCE 2
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // BOOST_ATOMIC_DETAIL_CAPS_GCC_ATOMIC_HPP_INCLUDED_
|
54
extern/boost/boost/atomic/detail/caps_gcc_sync.hpp
vendored
Normal file
54
extern/boost/boost/atomic/detail/caps_gcc_sync.hpp
vendored
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
* Distributed under the Boost Software License, Version 1.0.
|
||||||
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
* http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2011 Helge Bahmann
|
||||||
|
* Copyright (c) 2013 Tim Blechmann
|
||||||
|
* Copyright (c) 2014 Andrey Semashev
|
||||||
|
*/
|
||||||
|
/*!
|
||||||
|
* \file atomic/detail/caps_gcc_sync.hpp
|
||||||
|
*
|
||||||
|
* This header defines feature capabilities macros
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_DETAIL_CAPS_GCC_SYNC_HPP_INCLUDED_
|
||||||
|
#define BOOST_ATOMIC_DETAIL_CAPS_GCC_SYNC_HPP_INCLUDED_
|
||||||
|
|
||||||
|
#include <boost/atomic/detail/config.hpp>
|
||||||
|
|
||||||
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1)\
|
||||||
|
|| defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2)\
|
||||||
|
|| defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)\
|
||||||
|
|| defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8)\
|
||||||
|
|| defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16)
|
||||||
|
#define BOOST_ATOMIC_INT8_LOCK_FREE 2
|
||||||
|
#endif
|
||||||
|
#if defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2)\
|
||||||
|
|| defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)\
|
||||||
|
|| defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8)\
|
||||||
|
|| defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16)
|
||||||
|
#define BOOST_ATOMIC_INT16_LOCK_FREE 2
|
||||||
|
#endif
|
||||||
|
#if defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)\
|
||||||
|
|| defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8)\
|
||||||
|
|| defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16)
|
||||||
|
#define BOOST_ATOMIC_INT32_LOCK_FREE 2
|
||||||
|
#endif
|
||||||
|
#if defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8)\
|
||||||
|
|| defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16)
|
||||||
|
#define BOOST_ATOMIC_INT64_LOCK_FREE 2
|
||||||
|
#endif
|
||||||
|
#if defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16)
|
||||||
|
#define BOOST_ATOMIC_INT128_LOCK_FREE 2
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define BOOST_ATOMIC_THREAD_FENCE 2
|
||||||
|
#define BOOST_ATOMIC_SIGNAL_FENCE 2
|
||||||
|
|
||||||
|
#endif // BOOST_ATOMIC_DETAIL_CAPS_GCC_SYNC_HPP_INCLUDED_
|
35
extern/boost/boost/atomic/detail/caps_linux_arm.hpp
vendored
Normal file
35
extern/boost/boost/atomic/detail/caps_linux_arm.hpp
vendored
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* Distributed under the Boost Software License, Version 1.0.
|
||||||
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
* http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009, 2011 Helge Bahmann
|
||||||
|
* Copyright (c) 2009 Phil Endecott
|
||||||
|
* Copyright (c) 2013 Tim Blechmann
|
||||||
|
* Linux-specific code by Phil Endecott
|
||||||
|
* Copyright (c) 2014 Andrey Semashev
|
||||||
|
*/
|
||||||
|
/*!
|
||||||
|
* \file atomic/detail/caps_linux_arm.hpp
|
||||||
|
*
|
||||||
|
* This header defines feature capabilities macros
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_DETAIL_CAPS_LINUX_ARM_HPP_INCLUDED_
|
||||||
|
#define BOOST_ATOMIC_DETAIL_CAPS_LINUX_ARM_HPP_INCLUDED_
|
||||||
|
|
||||||
|
#include <boost/atomic/detail/config.hpp>
|
||||||
|
|
||||||
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define BOOST_ATOMIC_INT8_LOCK_FREE 2
|
||||||
|
#define BOOST_ATOMIC_INT16_LOCK_FREE 2
|
||||||
|
#define BOOST_ATOMIC_INT32_LOCK_FREE 2
|
||||||
|
#define BOOST_ATOMIC_POINTER_LOCK_FREE 2
|
||||||
|
|
||||||
|
#define BOOST_ATOMIC_THREAD_FENCE 2
|
||||||
|
#define BOOST_ATOMIC_SIGNAL_FENCE 2
|
||||||
|
|
||||||
|
#endif // BOOST_ATOMIC_DETAIL_CAPS_LINUX_ARM_HPP_INCLUDED_
|
33
extern/boost/boost/atomic/detail/caps_windows.hpp
vendored
Normal file
33
extern/boost/boost/atomic/detail/caps_windows.hpp
vendored
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
* Distributed under the Boost Software License, Version 1.0.
|
||||||
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
* http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009 Helge Bahmann
|
||||||
|
* Copyright (c) 2013 Tim Blechmann
|
||||||
|
* Copyright (c) 2012 - 2014 Andrey Semashev
|
||||||
|
*/
|
||||||
|
/*!
|
||||||
|
* \file atomic/detail/caps_windows.hpp
|
||||||
|
*
|
||||||
|
* This header defines feature capabilities macros
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_DETAIL_CAPS_WINDOWS_HPP_INCLUDED_
|
||||||
|
#define BOOST_ATOMIC_DETAIL_CAPS_WINDOWS_HPP_INCLUDED_
|
||||||
|
|
||||||
|
#include <boost/atomic/detail/config.hpp>
|
||||||
|
|
||||||
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define BOOST_ATOMIC_INT8_LOCK_FREE 2
|
||||||
|
#define BOOST_ATOMIC_INT16_LOCK_FREE 2
|
||||||
|
#define BOOST_ATOMIC_INT32_LOCK_FREE 2
|
||||||
|
#define BOOST_ATOMIC_POINTER_LOCK_FREE 2
|
||||||
|
|
||||||
|
#define BOOST_ATOMIC_THREAD_FENCE 2
|
||||||
|
#define BOOST_ATOMIC_SIGNAL_FENCE 2
|
||||||
|
|
||||||
|
#endif // BOOST_ATOMIC_DETAIL_CAPS_WINDOWS_HPP_INCLUDED_
|
50
extern/boost/boost/atomic/detail/cas_based_exchange.hpp
vendored
Normal file
50
extern/boost/boost/atomic/detail/cas_based_exchange.hpp
vendored
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* Distributed under the Boost Software License, Version 1.0.
|
||||||
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
* http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2014 Andrey Semashev
|
||||||
|
*/
|
||||||
|
/*!
|
||||||
|
* \file atomic/detail/cas_based_exchange.hpp
|
||||||
|
*
|
||||||
|
* This header contains CAS-based implementation of exchange operation.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_DETAIL_CAS_BASED_EXCHANGE_HPP_INCLUDED_
|
||||||
|
#define BOOST_ATOMIC_DETAIL_CAS_BASED_EXCHANGE_HPP_INCLUDED_
|
||||||
|
|
||||||
|
#include <boost/memory_order.hpp>
|
||||||
|
#include <boost/atomic/detail/config.hpp>
|
||||||
|
#include <boost/atomic/detail/header.hpp>
|
||||||
|
|
||||||
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace atomics {
|
||||||
|
namespace detail {
|
||||||
|
|
||||||
|
template< typename Base >
|
||||||
|
struct cas_based_exchange :
|
||||||
|
public Base
|
||||||
|
{
|
||||||
|
typedef typename Base::storage_type storage_type;
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
storage_type old_val;
|
||||||
|
atomics::detail::non_atomic_load(storage, old_val);
|
||||||
|
while (!Base::compare_exchange_weak(storage, old_val, v, order, memory_order_relaxed)) {}
|
||||||
|
return old_val;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace detail
|
||||||
|
} // namespace atomics
|
||||||
|
} // namespace boost
|
||||||
|
|
||||||
|
#include <boost/atomic/detail/footer.hpp>
|
||||||
|
|
||||||
|
#endif // BOOST_ATOMIC_DETAIL_CAS_BASED_EXCHANGE_HPP_INCLUDED_
|
90
extern/boost/boost/atomic/detail/classify.hpp
vendored
Normal file
90
extern/boost/boost/atomic/detail/classify.hpp
vendored
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
/*
|
||||||
|
* Distributed under the Boost Software License, Version 1.0.
|
||||||
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
* http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2020-2021 Andrey Semashev
|
||||||
|
*/
|
||||||
|
/*!
|
||||||
|
* \file atomic/detail/classify.hpp
|
||||||
|
*
|
||||||
|
* This header contains type traits for type classification.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_DETAIL_CLASSIFY_HPP_INCLUDED_
|
||||||
|
#define BOOST_ATOMIC_DETAIL_CLASSIFY_HPP_INCLUDED_
|
||||||
|
|
||||||
|
#include <boost/atomic/detail/config.hpp>
|
||||||
|
#include <boost/atomic/detail/type_traits/is_enum.hpp>
|
||||||
|
#include <boost/atomic/detail/type_traits/is_integral.hpp>
|
||||||
|
#include <boost/atomic/detail/type_traits/is_function.hpp>
|
||||||
|
#include <boost/atomic/detail/type_traits/is_floating_point.hpp>
|
||||||
|
#include <boost/atomic/detail/header.hpp>
|
||||||
|
|
||||||
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace atomics {
|
||||||
|
namespace detail {
|
||||||
|
|
||||||
|
template< typename T, bool IsFunction = atomics::detail::is_function< T >::value >
|
||||||
|
struct classify_pointer
|
||||||
|
{
|
||||||
|
typedef void* type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template< typename T >
|
||||||
|
struct classify_pointer< T, true >
|
||||||
|
{
|
||||||
|
typedef void type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<
|
||||||
|
typename T,
|
||||||
|
bool IsInt = atomics::detail::is_integral< T >::value,
|
||||||
|
bool IsFloat = atomics::detail::is_floating_point< T >::value,
|
||||||
|
bool IsEnum = atomics::detail::is_enum< T >::value
|
||||||
|
>
|
||||||
|
struct classify
|
||||||
|
{
|
||||||
|
typedef void type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template< typename T >
|
||||||
|
struct classify< T, true, false, false > { typedef int type; };
|
||||||
|
|
||||||
|
#if !defined(BOOST_ATOMIC_NO_FLOATING_POINT)
|
||||||
|
template< typename T >
|
||||||
|
struct classify< T, false, true, false > { typedef float type; };
|
||||||
|
#endif
|
||||||
|
|
||||||
|
template< typename T >
|
||||||
|
struct classify< T, false, false, true > { typedef const int type; };
|
||||||
|
|
||||||
|
template< typename T >
|
||||||
|
struct classify< T*, false, false, false > { typedef typename classify_pointer< T >::type type; };
|
||||||
|
|
||||||
|
template< >
|
||||||
|
struct classify< void*, false, false, false > { typedef void type; };
|
||||||
|
|
||||||
|
template< >
|
||||||
|
struct classify< const void*, false, false, false > { typedef void type; };
|
||||||
|
|
||||||
|
template< >
|
||||||
|
struct classify< volatile void*, false, false, false > { typedef void type; };
|
||||||
|
|
||||||
|
template< >
|
||||||
|
struct classify< const volatile void*, false, false, false > { typedef void type; };
|
||||||
|
|
||||||
|
template< typename T, typename U >
|
||||||
|
struct classify< T U::*, false, false, false > { typedef void type; };
|
||||||
|
|
||||||
|
} // namespace detail
|
||||||
|
} // namespace atomics
|
||||||
|
} // namespace boost
|
||||||
|
|
||||||
|
#include <boost/atomic/detail/footer.hpp>
|
||||||
|
|
||||||
|
#endif // BOOST_ATOMIC_DETAIL_CLASSIFY_HPP_INCLUDED_
|
196
extern/boost/boost/atomic/detail/config.hpp
vendored
Normal file
196
extern/boost/boost/atomic/detail/config.hpp
vendored
Normal file
@ -0,0 +1,196 @@
|
|||||||
|
/*
|
||||||
|
* Distributed under the Boost Software License, Version 1.0.
|
||||||
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
* http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2012 Hartmut Kaiser
|
||||||
|
* Copyright (c) 2014-2018, 2020-2021 Andrey Semashev
|
||||||
|
*/
|
||||||
|
/*!
|
||||||
|
* \file atomic/detail/config.hpp
|
||||||
|
*
|
||||||
|
* This header defines configuraion macros for Boost.Atomic
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_DETAIL_CONFIG_HPP_INCLUDED_
|
||||||
|
#define BOOST_ATOMIC_DETAIL_CONFIG_HPP_INCLUDED_
|
||||||
|
|
||||||
|
#include <boost/config.hpp>
|
||||||
|
|
||||||
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__CUDACC__)
|
||||||
|
// nvcc does not support alternatives ("q,m") in asm statement constraints
|
||||||
|
#define BOOST_ATOMIC_DETAIL_NO_ASM_CONSTRAINT_ALTERNATIVES
|
||||||
|
// nvcc does not support condition code register ("cc") clobber in asm statements
|
||||||
|
#define BOOST_ATOMIC_DETAIL_NO_ASM_CLOBBER_CC
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(BOOST_ATOMIC_DETAIL_NO_ASM_CLOBBER_CC)
|
||||||
|
#define BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC "cc"
|
||||||
|
#define BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "cc",
|
||||||
|
#else
|
||||||
|
#define BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
|
||||||
|
#define BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (defined(__i386__) || defined(__x86_64__)) && (defined(__clang__) || (defined(BOOST_GCC) && BOOST_GCC < 40500) || defined(__SUNPRO_CC))
|
||||||
|
// This macro indicates that the compiler does not support allocating eax:edx or rax:rdx register pairs ("A") in asm blocks
|
||||||
|
#define BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__i386__) && (defined(__PIC__) || defined(__PIE__)) && !(defined(__clang__) || (defined(BOOST_GCC) && BOOST_GCC >= 50100))
|
||||||
|
// This macro indicates that asm blocks should preserve ebx value unchanged. Some compilers are able to maintain ebx themselves
|
||||||
|
// around the asm blocks. For those compilers we don't need to save/restore ebx in asm blocks.
|
||||||
|
#define BOOST_ATOMIC_DETAIL_X86_ASM_PRESERVE_EBX
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS)
|
||||||
|
#if !(defined(BOOST_LIBSTDCXX11) && BOOST_LIBSTDCXX_VERSION >= 40700) /* libstdc++ from gcc >= 4.7 in C++11 mode */
|
||||||
|
// This macro indicates that there is not even a basic <type_traits> standard header that is sufficient for most Boost.Atomic needs.
|
||||||
|
#define BOOST_ATOMIC_DETAIL_NO_CXX11_BASIC_HDR_TYPE_TRAITS
|
||||||
|
#endif
|
||||||
|
#endif // defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS)
|
||||||
|
|
||||||
|
#if defined(BOOST_NO_CXX11_ALIGNAS) ||\
|
||||||
|
(defined(BOOST_GCC) && BOOST_GCC < 40900) ||\
|
||||||
|
(defined(BOOST_MSVC) && BOOST_MSVC < 1910 && defined(_M_IX86))
|
||||||
|
// gcc prior to 4.9 doesn't support alignas with a constant expression as an argument.
|
||||||
|
// MSVC 14.0 does support alignas, but in 32-bit mode emits "error C2719: formal parameter with requested alignment of N won't be aligned" for N > 4,
|
||||||
|
// when aligned types are used in function arguments, even though the std::max_align_t type has alignment of 8.
|
||||||
|
#define BOOST_ATOMIC_DETAIL_NO_CXX11_ALIGNAS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(BOOST_NO_CXX11_CONSTEXPR) || (defined(BOOST_GCC) && BOOST_GCC < 40800)
|
||||||
|
// This macro indicates that the compiler doesn't support constexpr constructors that initialize one member
|
||||||
|
// of an anonymous union member of the class.
|
||||||
|
#define BOOST_ATOMIC_DETAIL_NO_CXX11_CONSTEXPR_UNION_INIT
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (defined(_MSC_VER) && (_MSC_VER < 1914 || _MSVC_LANG < 201703)) || (!defined(_MSC_VER) && (!defined(__cpp_deduction_guides) || __cpp_deduction_guides < 201606))
|
||||||
|
#define BOOST_ATOMIC_DETAIL_NO_CXX17_DEDUCTION_GUIDES
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(BOOST_ATOMIC_DETAIL_NO_CXX11_CONSTEXPR_UNION_INIT)
|
||||||
|
#define BOOST_ATOMIC_DETAIL_CONSTEXPR_UNION_INIT BOOST_CONSTEXPR
|
||||||
|
#else
|
||||||
|
#define BOOST_ATOMIC_DETAIL_CONSTEXPR_UNION_INIT
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Enable pointer/reference casts between storage and value when possible.
|
||||||
|
// Note: Despite that MSVC does not employ strict aliasing rules for optimizations
|
||||||
|
// and does not require an explicit markup for types that may alias, we still don't
|
||||||
|
// enable the optimization for this compiler because at least MSVC-8 and 9 are known
|
||||||
|
// to generate broken code sometimes when casts are used.
|
||||||
|
#define BOOST_ATOMIC_DETAIL_MAY_ALIAS BOOST_MAY_ALIAS
|
||||||
|
#if !defined(BOOST_NO_MAY_ALIAS)
|
||||||
|
#define BOOST_ATOMIC_DETAIL_STORAGE_TYPE_MAY_ALIAS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__GCC_ASM_FLAG_OUTPUTS__)
|
||||||
|
// The compiler supports output values in flag registers.
|
||||||
|
// See: https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html, Section 6.44.3.
|
||||||
|
#define BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(BOOST_INTEL) || (defined(BOOST_GCC) && BOOST_GCC < 40700) ||\
|
||||||
|
(defined(BOOST_CLANG) && !defined(__apple_build_version__) && (__clang_major__ * 100 + __clang_minor__) < 302) ||\
|
||||||
|
(defined(__clang__) && defined(__apple_build_version__) && (__clang_major__ * 100 + __clang_minor__) < 402)
|
||||||
|
// Intel compiler (at least 18.0 update 1) breaks if noexcept specification is used in defaulted function declarations:
|
||||||
|
// error: the default constructor of "boost::atomics::atomic<T>" cannot be referenced -- it is a deleted function
|
||||||
|
// GCC 4.6 doesn't seem to support that either. Clang 3.1 deduces wrong noexcept for the defaulted function and fails as well.
|
||||||
|
#define BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_DECL
|
||||||
|
#define BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_IMPL BOOST_NOEXCEPT
|
||||||
|
#else
|
||||||
|
#define BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_DECL BOOST_NOEXCEPT
|
||||||
|
#define BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_IMPL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__has_builtin)
|
||||||
|
#if __has_builtin(__builtin_constant_p)
|
||||||
|
#define BOOST_ATOMIC_DETAIL_IS_CONSTANT(x) __builtin_constant_p(x)
|
||||||
|
#endif
|
||||||
|
#if __has_builtin(__builtin_clear_padding)
|
||||||
|
#define BOOST_ATOMIC_DETAIL_CLEAR_PADDING(x) __builtin_clear_padding(x)
|
||||||
|
#elif __has_builtin(__builtin_zero_non_value_bits)
|
||||||
|
#define BOOST_ATOMIC_DETAIL_CLEAR_PADDING(x) __builtin_zero_non_value_bits(x)
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(BOOST_ATOMIC_DETAIL_IS_CONSTANT) && defined(__GNUC__)
|
||||||
|
#define BOOST_ATOMIC_DETAIL_IS_CONSTANT(x) __builtin_constant_p(x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(BOOST_ATOMIC_DETAIL_IS_CONSTANT)
|
||||||
|
#define BOOST_ATOMIC_DETAIL_IS_CONSTANT(x) false
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(BOOST_ATOMIC_DETAIL_CLEAR_PADDING) && defined(BOOST_MSVC) && BOOST_MSVC >= 1927
|
||||||
|
// Note that as of MSVC 19.29 this intrinsic does not clear padding in unions:
|
||||||
|
// https://developercommunity.visualstudio.com/t/__builtin_zero_non_value_bits-does-not-c/1551510
|
||||||
|
#define BOOST_ATOMIC_DETAIL_CLEAR_PADDING(x) __builtin_zero_non_value_bits(x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(BOOST_ATOMIC_DETAIL_CLEAR_PADDING)
|
||||||
|
#define BOOST_ATOMIC_NO_CLEAR_PADDING
|
||||||
|
#define BOOST_ATOMIC_DETAIL_CLEAR_PADDING(x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (defined(__BYTE_ORDER__) && defined(__FLOAT_WORD_ORDER__) && __BYTE_ORDER__ == __FLOAT_WORD_ORDER__) ||\
|
||||||
|
defined(__i386__) || defined(__x86_64__) || defined(_M_IX86) || defined(_M_X64)
|
||||||
|
// This macro indicates that integer and floating point endianness is the same
|
||||||
|
#define BOOST_ATOMIC_DETAIL_INT_FP_ENDIAN_MATCH
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Deprecated symbols markup
|
||||||
|
#if !defined(BOOST_ATOMIC_DETAIL_DEPRECATED) && defined(_MSC_VER)
|
||||||
|
#if (_MSC_VER) >= 1400
|
||||||
|
#define BOOST_ATOMIC_DETAIL_DEPRECATED(msg) __declspec(deprecated(msg))
|
||||||
|
#else
|
||||||
|
// MSVC 7.1 only supports the attribute without a message
|
||||||
|
#define BOOST_ATOMIC_DETAIL_DEPRECATED(msg) __declspec(deprecated)
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(BOOST_ATOMIC_DETAIL_DEPRECATED) && defined(__has_extension)
|
||||||
|
#if __has_extension(attribute_deprecated_with_message)
|
||||||
|
#define BOOST_ATOMIC_DETAIL_DEPRECATED(msg) __attribute__((deprecated(msg)))
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// gcc since 4.5 supports deprecated attribute with a message; older versions support the attribute without a message.
|
||||||
|
// Oracle Studio 12.4 supports deprecated attribute with a message; this is the first release that supports the attribute.
|
||||||
|
#if !defined(BOOST_ATOMIC_DETAIL_DEPRECATED) && (\
|
||||||
|
(defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 405) ||\
|
||||||
|
(defined(__SUNPRO_CC) && __SUNPRO_CC >= 0x5130))
|
||||||
|
#define BOOST_ATOMIC_DETAIL_DEPRECATED(msg) __attribute__((deprecated(msg)))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(BOOST_ATOMIC_DETAIL_DEPRECATED) && __cplusplus >= 201402
|
||||||
|
#define BOOST_ATOMIC_DETAIL_DEPRECATED(msg) [[deprecated(msg)]]
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(BOOST_ATOMIC_DETAIL_DEPRECATED) && defined(__GNUC__)
|
||||||
|
#define BOOST_ATOMIC_DETAIL_DEPRECATED(msg) __attribute__((deprecated))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(BOOST_ATOMIC_DETAIL_DEPRECATED) && defined(__has_attribute)
|
||||||
|
#if __has_attribute(deprecated)
|
||||||
|
#define BOOST_ATOMIC_DETAIL_DEPRECATED(msg) __attribute__((deprecated))
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(BOOST_ATOMIC_DETAIL_DEPRECATED)
|
||||||
|
#define BOOST_ATOMIC_DETAIL_DEPRECATED(msg)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// In Boost.Atomic 1.73 we deprecated atomic<>::storage() accessor in favor of atomic<>::value(). In future releases storage() will be removed.
|
||||||
|
#if !defined(BOOST_ATOMIC_SILENCE_STORAGE_DEPRECATION)
|
||||||
|
#define BOOST_ATOMIC_DETAIL_STORAGE_DEPRECATED BOOST_ATOMIC_DETAIL_DEPRECATED("Boost.Atomic 1.73 has deprecated atomic<>::storage() in favor of atomic<>::value() and atomic<>::storage_type in favor of atomic<>::value_type. You can define BOOST_ATOMIC_SILENCE_STORAGE_DEPRECATION to disable this warning.")
|
||||||
|
#else
|
||||||
|
#define BOOST_ATOMIC_DETAIL_STORAGE_DEPRECATED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // BOOST_ATOMIC_DETAIL_CONFIG_HPP_INCLUDED_
|
50
extern/boost/boost/atomic/detail/core_arch_operations.hpp
vendored
Normal file
50
extern/boost/boost/atomic/detail/core_arch_operations.hpp
vendored
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* Distributed under the Boost Software License, Version 1.0.
|
||||||
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
* http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2020 Andrey Semashev
|
||||||
|
*/
|
||||||
|
/*!
|
||||||
|
* \file atomic/detail/core_arch_operations.hpp
|
||||||
|
*
|
||||||
|
* This header defines core atomic operations, including the emulated version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_DETAIL_CORE_ARCH_OPERATIONS_HPP_INCLUDED_
|
||||||
|
#define BOOST_ATOMIC_DETAIL_CORE_ARCH_OPERATIONS_HPP_INCLUDED_
|
||||||
|
|
||||||
|
#include <boost/atomic/detail/core_arch_operations_fwd.hpp>
|
||||||
|
#include <boost/atomic/detail/core_operations_emulated.hpp>
|
||||||
|
#include <boost/atomic/detail/config.hpp>
|
||||||
|
#include <boost/atomic/detail/platform.hpp>
|
||||||
|
#include <boost/atomic/detail/storage_traits.hpp>
|
||||||
|
|
||||||
|
#if defined(BOOST_ATOMIC_DETAIL_CORE_ARCH_BACKEND_HEADER)
|
||||||
|
#include BOOST_ATOMIC_DETAIL_CORE_ARCH_BACKEND_HEADER(boost/atomic/detail/core_arch_ops_)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <boost/atomic/detail/header.hpp>
|
||||||
|
|
||||||
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace atomics {
|
||||||
|
namespace detail {
|
||||||
|
|
||||||
|
//! Default specialization that falls back to lock-based implementation
|
||||||
|
template< std::size_t Size, bool Signed, bool Interprocess >
|
||||||
|
struct core_arch_operations :
|
||||||
|
public core_operations_emulated< Size, storage_traits< Size >::alignment, Signed, Interprocess >
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace detail
|
||||||
|
} // namespace atomics
|
||||||
|
} // namespace boost
|
||||||
|
|
||||||
|
#include <boost/atomic/detail/footer.hpp>
|
||||||
|
|
||||||
|
#endif // BOOST_ATOMIC_DETAIL_CORE_ARCH_OPERATIONS_HPP_INCLUDED_
|
38
extern/boost/boost/atomic/detail/core_arch_operations_fwd.hpp
vendored
Normal file
38
extern/boost/boost/atomic/detail/core_arch_operations_fwd.hpp
vendored
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
* Distributed under the Boost Software License, Version 1.0.
|
||||||
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
* http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2020 Andrey Semashev
|
||||||
|
*/
|
||||||
|
/*!
|
||||||
|
* \file atomic/detail/core_arch_operations_fwd.hpp
|
||||||
|
*
|
||||||
|
* This header contains forward declaration of the \c core_arch_operations template.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_DETAIL_CORE_ARCH_OPERATIONS_FWD_HPP_INCLUDED_
|
||||||
|
#define BOOST_ATOMIC_DETAIL_CORE_ARCH_OPERATIONS_FWD_HPP_INCLUDED_
|
||||||
|
|
||||||
|
#include <cstddef>
|
||||||
|
#include <boost/atomic/detail/config.hpp>
|
||||||
|
#include <boost/atomic/detail/header.hpp>
|
||||||
|
|
||||||
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace atomics {
|
||||||
|
namespace detail {
|
||||||
|
|
||||||
|
template< std::size_t Size, bool Signed, bool Interprocess >
|
||||||
|
struct core_arch_operations;
|
||||||
|
|
||||||
|
} // namespace detail
|
||||||
|
} // namespace atomics
|
||||||
|
} // namespace boost
|
||||||
|
|
||||||
|
#include <boost/atomic/detail/footer.hpp>
|
||||||
|
|
||||||
|
#endif // BOOST_ATOMIC_DETAIL_CORE_ARCH_OPERATIONS_FWD_HPP_INCLUDED_
|
1121
extern/boost/boost/atomic/detail/core_arch_ops_gcc_aarch32.hpp
vendored
Normal file
1121
extern/boost/boost/atomic/detail/core_arch_ops_gcc_aarch32.hpp
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1909
extern/boost/boost/atomic/detail/core_arch_ops_gcc_aarch64.hpp
vendored
Normal file
1909
extern/boost/boost/atomic/detail/core_arch_ops_gcc_aarch64.hpp
vendored
Normal file
File diff suppressed because it is too large
Load Diff
867
extern/boost/boost/atomic/detail/core_arch_ops_gcc_alpha.hpp
vendored
Normal file
867
extern/boost/boost/atomic/detail/core_arch_ops_gcc_alpha.hpp
vendored
Normal file
@ -0,0 +1,867 @@
|
|||||||
|
/*
|
||||||
|
* Distributed under the Boost Software License, Version 1.0.
|
||||||
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
|
* http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2009 Helge Bahmann
|
||||||
|
* Copyright (c) 2013 Tim Blechmann
|
||||||
|
* Copyright (c) 2014 Andrey Semashev
|
||||||
|
*/
|
||||||
|
/*!
|
||||||
|
* \file atomic/detail/core_arch_ops_gcc_alpha.hpp
|
||||||
|
*
|
||||||
|
* This header contains implementation of the \c core_arch_operations template.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BOOST_ATOMIC_DETAIL_CORE_ARCH_OPS_GCC_ALPHA_HPP_INCLUDED_
|
||||||
|
#define BOOST_ATOMIC_DETAIL_CORE_ARCH_OPS_GCC_ALPHA_HPP_INCLUDED_
|
||||||
|
|
||||||
|
#include <cstddef>
|
||||||
|
#include <boost/memory_order.hpp>
|
||||||
|
#include <boost/atomic/detail/config.hpp>
|
||||||
|
#include <boost/atomic/detail/storage_traits.hpp>
|
||||||
|
#include <boost/atomic/detail/core_arch_operations_fwd.hpp>
|
||||||
|
#include <boost/atomic/detail/header.hpp>
|
||||||
|
|
||||||
|
#ifdef BOOST_HAS_PRAGMA_ONCE
|
||||||
|
#pragma once
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace boost {
|
||||||
|
namespace atomics {
|
||||||
|
namespace detail {
|
||||||
|
|
||||||
|
/*
|
||||||
|
Refer to http://h71000.www7.hp.com/doc/82final/5601/5601pro_004.html
|
||||||
|
(HP OpenVMS systems documentation) and the Alpha Architecture Reference Manual.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
NB: The most natural thing would be to write the increment/decrement
|
||||||
|
operators along the following lines:
|
||||||
|
|
||||||
|
__asm__ __volatile__
|
||||||
|
(
|
||||||
|
"1: ldl_l %0,%1 \n"
|
||||||
|
"addl %0,1,%0 \n"
|
||||||
|
"stl_c %0,%1 \n"
|
||||||
|
"beq %0,1b\n"
|
||||||
|
: "=&b" (tmp)
|
||||||
|
: "m" (value)
|
||||||
|
: "cc"
|
||||||
|
);
|
||||||
|
|
||||||
|
However according to the comments on the HP website and matching
|
||||||
|
comments in the Linux kernel sources this defies branch prediction,
|
||||||
|
as the cpu assumes that backward branches are always taken; so
|
||||||
|
instead copy the trick from the Linux kernel, introduce a forward
|
||||||
|
branch and back again.
|
||||||
|
|
||||||
|
I have, however, had a hard time measuring the difference between
|
||||||
|
the two versions in microbenchmarks -- I am leaving it in nevertheless
|
||||||
|
as it apparently does not hurt either.
|
||||||
|
*/
|
||||||
|
|
||||||
|
struct core_arch_operations_gcc_alpha_base
|
||||||
|
{
|
||||||
|
static BOOST_CONSTEXPR_OR_CONST bool full_cas_based = false;
|
||||||
|
static BOOST_CONSTEXPR_OR_CONST bool is_always_lock_free = true;
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE void fence_before(memory_order order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
if ((static_cast< unsigned int >(order) & static_cast< unsigned int >(memory_order_release)) != 0u)
|
||||||
|
__asm__ __volatile__ ("mb" ::: "memory");
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE void fence_after(memory_order order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
if ((static_cast< unsigned int >(order) & (static_cast< unsigned int >(memory_order_consume) | static_cast< unsigned int >(memory_order_acquire))) != 0u)
|
||||||
|
__asm__ __volatile__ ("mb" ::: "memory");
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE void fence_after_store(memory_order order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
if (order == memory_order_seq_cst)
|
||||||
|
__asm__ __volatile__ ("mb" ::: "memory");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
template< bool Signed, bool Interprocess >
|
||||||
|
struct core_arch_operations< 4u, Signed, Interprocess > :
|
||||||
|
public core_arch_operations_gcc_alpha_base
|
||||||
|
{
|
||||||
|
typedef typename storage_traits< 4u >::type storage_type;
|
||||||
|
|
||||||
|
static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = 4u;
|
||||||
|
static BOOST_CONSTEXPR_OR_CONST std::size_t storage_alignment = 4u;
|
||||||
|
static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed;
|
||||||
|
static BOOST_CONSTEXPR_OR_CONST bool is_interprocess = Interprocess;
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
fence_before(order);
|
||||||
|
storage = v;
|
||||||
|
fence_after_store(order);
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
storage_type v = storage;
|
||||||
|
fence_after(order);
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
storage_type original, tmp;
|
||||||
|
fence_before(order);
|
||||||
|
__asm__ __volatile__
|
||||||
|
(
|
||||||
|
"1:\n\t"
|
||||||
|
"mov %3, %1\n\t"
|
||||||
|
"ldl_l %0, %2\n\t"
|
||||||
|
"stl_c %1, %2\n\t"
|
||||||
|
"beq %1, 2f\n\t"
|
||||||
|
|
||||||
|
".subsection 2\n\t"
|
||||||
|
"2: br 1b\n\t"
|
||||||
|
".previous\n\t"
|
||||||
|
|
||||||
|
: "=&r" (original), // %0
|
||||||
|
"=&r" (tmp) // %1
|
||||||
|
: "m" (storage), // %2
|
||||||
|
"r" (v) // %3
|
||||||
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
|
||||||
|
);
|
||||||
|
fence_after(order);
|
||||||
|
return original;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE bool compare_exchange_weak(
|
||||||
|
storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
fence_before(success_order);
|
||||||
|
int success;
|
||||||
|
storage_type current;
|
||||||
|
__asm__ __volatile__
|
||||||
|
(
|
||||||
|
"1:\n\t"
|
||||||
|
"ldl_l %2, %4\n\t" // current = *(&storage)
|
||||||
|
"cmpeq %2, %0, %3\n\t" // success = current == expected
|
||||||
|
"mov %2, %0\n\t" // expected = current
|
||||||
|
"beq %3, 2f\n\t" // if (success == 0) goto end
|
||||||
|
"stl_c %1, %4\n\t" // storage = desired; desired = store succeeded
|
||||||
|
"mov %1, %3\n\t" // success = desired
|
||||||
|
"2:\n\t"
|
||||||
|
: "+r" (expected), // %0
|
||||||
|
"+r" (desired), // %1
|
||||||
|
"=&r" (current), // %2
|
||||||
|
"=&r" (success) // %3
|
||||||
|
: "m" (storage) // %4
|
||||||
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
|
||||||
|
);
|
||||||
|
if (success)
|
||||||
|
fence_after(success_order);
|
||||||
|
else
|
||||||
|
fence_after(failure_order);
|
||||||
|
return !!success;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE bool compare_exchange_strong(
|
||||||
|
storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
int success;
|
||||||
|
storage_type current, tmp;
|
||||||
|
fence_before(success_order);
|
||||||
|
__asm__ __volatile__
|
||||||
|
(
|
||||||
|
"1:\n\t"
|
||||||
|
"mov %5, %1\n\t" // tmp = desired
|
||||||
|
"ldl_l %2, %4\n\t" // current = *(&storage)
|
||||||
|
"cmpeq %2, %0, %3\n\t" // success = current == expected
|
||||||
|
"mov %2, %0\n\t" // expected = current
|
||||||
|
"beq %3, 2f\n\t" // if (success == 0) goto end
|
||||||
|
"stl_c %1, %4\n\t" // storage = tmp; tmp = store succeeded
|
||||||
|
"beq %1, 3f\n\t" // if (tmp == 0) goto retry
|
||||||
|
"mov %1, %3\n\t" // success = tmp
|
||||||
|
"2:\n\t"
|
||||||
|
|
||||||
|
".subsection 2\n\t"
|
||||||
|
"3: br 1b\n\t"
|
||||||
|
".previous\n\t"
|
||||||
|
|
||||||
|
: "+r" (expected), // %0
|
||||||
|
"=&r" (tmp), // %1
|
||||||
|
"=&r" (current), // %2
|
||||||
|
"=&r" (success) // %3
|
||||||
|
: "m" (storage), // %4
|
||||||
|
"r" (desired) // %5
|
||||||
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
|
||||||
|
);
|
||||||
|
if (success)
|
||||||
|
fence_after(success_order);
|
||||||
|
else
|
||||||
|
fence_after(failure_order);
|
||||||
|
return !!success;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
storage_type original, modified;
|
||||||
|
fence_before(order);
|
||||||
|
__asm__ __volatile__
|
||||||
|
(
|
||||||
|
"1:\n\t"
|
||||||
|
"ldl_l %0, %2\n\t"
|
||||||
|
"addl %0, %3, %1\n\t"
|
||||||
|
"stl_c %1, %2\n\t"
|
||||||
|
"beq %1, 2f\n\t"
|
||||||
|
|
||||||
|
".subsection 2\n\t"
|
||||||
|
"2: br 1b\n\t"
|
||||||
|
".previous\n\t"
|
||||||
|
|
||||||
|
: "=&r" (original), // %0
|
||||||
|
"=&r" (modified) // %1
|
||||||
|
: "m" (storage), // %2
|
||||||
|
"r" (v) // %3
|
||||||
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
|
||||||
|
);
|
||||||
|
fence_after(order);
|
||||||
|
return original;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
storage_type original, modified;
|
||||||
|
fence_before(order);
|
||||||
|
__asm__ __volatile__
|
||||||
|
(
|
||||||
|
"1:\n\t"
|
||||||
|
"ldl_l %0, %2\n\t"
|
||||||
|
"subl %0, %3, %1\n\t"
|
||||||
|
"stl_c %1, %2\n\t"
|
||||||
|
"beq %1, 2f\n\t"
|
||||||
|
|
||||||
|
".subsection 2\n\t"
|
||||||
|
"2: br 1b\n\t"
|
||||||
|
".previous\n\t"
|
||||||
|
|
||||||
|
: "=&r" (original), // %0
|
||||||
|
"=&r" (modified) // %1
|
||||||
|
: "m" (storage), // %2
|
||||||
|
"r" (v) // %3
|
||||||
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
|
||||||
|
);
|
||||||
|
fence_after(order);
|
||||||
|
return original;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
storage_type original, modified;
|
||||||
|
fence_before(order);
|
||||||
|
__asm__ __volatile__
|
||||||
|
(
|
||||||
|
"1:\n\t"
|
||||||
|
"ldl_l %0, %2\n\t"
|
||||||
|
"and %0, %3, %1\n\t"
|
||||||
|
"stl_c %1, %2\n\t"
|
||||||
|
"beq %1, 2f\n\t"
|
||||||
|
|
||||||
|
".subsection 2\n\t"
|
||||||
|
"2: br 1b\n\t"
|
||||||
|
".previous\n\t"
|
||||||
|
|
||||||
|
: "=&r" (original), // %0
|
||||||
|
"=&r" (modified) // %1
|
||||||
|
: "m" (storage), // %2
|
||||||
|
"r" (v) // %3
|
||||||
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
|
||||||
|
);
|
||||||
|
fence_after(order);
|
||||||
|
return original;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
storage_type original, modified;
|
||||||
|
fence_before(order);
|
||||||
|
__asm__ __volatile__
|
||||||
|
(
|
||||||
|
"1:\n\t"
|
||||||
|
"ldl_l %0, %2\n\t"
|
||||||
|
"bis %0, %3, %1\n\t"
|
||||||
|
"stl_c %1, %2\n\t"
|
||||||
|
"beq %1, 2f\n\t"
|
||||||
|
|
||||||
|
".subsection 2\n\t"
|
||||||
|
"2: br 1b\n\t"
|
||||||
|
".previous\n\t"
|
||||||
|
|
||||||
|
: "=&r" (original), // %0
|
||||||
|
"=&r" (modified) // %1
|
||||||
|
: "m" (storage), // %2
|
||||||
|
"r" (v) // %3
|
||||||
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
|
||||||
|
);
|
||||||
|
fence_after(order);
|
||||||
|
return original;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
storage_type original, modified;
|
||||||
|
fence_before(order);
|
||||||
|
__asm__ __volatile__
|
||||||
|
(
|
||||||
|
"1:\n\t"
|
||||||
|
"ldl_l %0, %2\n\t"
|
||||||
|
"xor %0, %3, %1\n\t"
|
||||||
|
"stl_c %1, %2\n\t"
|
||||||
|
"beq %1, 2f\n\t"
|
||||||
|
|
||||||
|
".subsection 2\n\t"
|
||||||
|
"2: br 1b\n\t"
|
||||||
|
".previous\n\t"
|
||||||
|
|
||||||
|
: "=&r" (original), // %0
|
||||||
|
"=&r" (modified) // %1
|
||||||
|
: "m" (storage), // %2
|
||||||
|
"r" (v) // %3
|
||||||
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
|
||||||
|
);
|
||||||
|
fence_after(order);
|
||||||
|
return original;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
return !!exchange(storage, (storage_type)1, order);
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
store(storage, 0, order);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
template< bool Interprocess >
|
||||||
|
struct core_arch_operations< 1u, false, Interprocess > :
|
||||||
|
public core_arch_operations< 4u, false, Interprocess >
|
||||||
|
{
|
||||||
|
typedef core_arch_operations< 4u, false, Interprocess > base_type;
|
||||||
|
typedef typename base_type::storage_type storage_type;
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
storage_type original, modified;
|
||||||
|
base_type::fence_before(order);
|
||||||
|
__asm__ __volatile__
|
||||||
|
(
|
||||||
|
"1:\n\t"
|
||||||
|
"ldl_l %0, %2\n\t"
|
||||||
|
"addl %0, %3, %1\n\t"
|
||||||
|
"zapnot %1, 1, %1\n\t"
|
||||||
|
"stl_c %1, %2\n\t"
|
||||||
|
"beq %1, 2f\n\t"
|
||||||
|
|
||||||
|
".subsection 2\n\t"
|
||||||
|
"2: br 1b\n\t"
|
||||||
|
".previous\n\t"
|
||||||
|
|
||||||
|
: "=&r" (original), // %0
|
||||||
|
"=&r" (modified) // %1
|
||||||
|
: "m" (storage), // %2
|
||||||
|
"r" (v) // %3
|
||||||
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
|
||||||
|
);
|
||||||
|
base_type::fence_after(order);
|
||||||
|
return original;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
storage_type original, modified;
|
||||||
|
base_type::fence_before(order);
|
||||||
|
__asm__ __volatile__
|
||||||
|
(
|
||||||
|
"1:\n\t"
|
||||||
|
"ldl_l %0, %2\n\t"
|
||||||
|
"subl %0, %3, %1\n\t"
|
||||||
|
"zapnot %1, 1, %1\n\t"
|
||||||
|
"stl_c %1, %2\n\t"
|
||||||
|
"beq %1, 2f\n\t"
|
||||||
|
|
||||||
|
".subsection 2\n\t"
|
||||||
|
"2: br 1b\n\t"
|
||||||
|
".previous\n\t"
|
||||||
|
|
||||||
|
: "=&r" (original), // %0
|
||||||
|
"=&r" (modified) // %1
|
||||||
|
: "m" (storage), // %2
|
||||||
|
"r" (v) // %3
|
||||||
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
|
||||||
|
);
|
||||||
|
base_type::fence_after(order);
|
||||||
|
return original;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template< bool Interprocess >
|
||||||
|
struct core_arch_operations< 1u, true, Interprocess > :
|
||||||
|
public core_arch_operations< 4u, true, Interprocess >
|
||||||
|
{
|
||||||
|
typedef core_arch_operations< 4u, true, Interprocess > base_type;
|
||||||
|
typedef typename base_type::storage_type storage_type;
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
storage_type original, modified;
|
||||||
|
base_type::fence_before(order);
|
||||||
|
__asm__ __volatile__
|
||||||
|
(
|
||||||
|
"1:\n\t"
|
||||||
|
"ldl_l %0, %2\n\t"
|
||||||
|
"addl %0, %3, %1\n\t"
|
||||||
|
"sextb %1, %1\n\t"
|
||||||
|
"stl_c %1, %2\n\t"
|
||||||
|
"beq %1, 2f\n\t"
|
||||||
|
|
||||||
|
".subsection 2\n\t"
|
||||||
|
"2: br 1b\n\t"
|
||||||
|
".previous\n\t"
|
||||||
|
|
||||||
|
: "=&r" (original), // %0
|
||||||
|
"=&r" (modified) // %1
|
||||||
|
: "m" (storage), // %2
|
||||||
|
"r" (v) // %3
|
||||||
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
|
||||||
|
);
|
||||||
|
base_type::fence_after(order);
|
||||||
|
return original;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
storage_type original, modified;
|
||||||
|
base_type::fence_before(order);
|
||||||
|
__asm__ __volatile__
|
||||||
|
(
|
||||||
|
"1:\n\t"
|
||||||
|
"ldl_l %0, %2\n\t"
|
||||||
|
"subl %0, %3, %1\n\t"
|
||||||
|
"sextb %1, %1\n\t"
|
||||||
|
"stl_c %1, %2\n\t"
|
||||||
|
"beq %1, 2f\n\t"
|
||||||
|
|
||||||
|
".subsection 2\n\t"
|
||||||
|
"2: br 1b\n\t"
|
||||||
|
".previous\n\t"
|
||||||
|
|
||||||
|
: "=&r" (original), // %0
|
||||||
|
"=&r" (modified) // %1
|
||||||
|
: "m" (storage), // %2
|
||||||
|
"r" (v) // %3
|
||||||
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
|
||||||
|
);
|
||||||
|
base_type::fence_after(order);
|
||||||
|
return original;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
template< bool Interprocess >
|
||||||
|
struct core_arch_operations< 2u, false, Interprocess > :
|
||||||
|
public core_arch_operations< 4u, false, Interprocess >
|
||||||
|
{
|
||||||
|
typedef core_arch_operations< 4u, false, Interprocess > base_type;
|
||||||
|
typedef typename base_type::storage_type storage_type;
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
storage_type original, modified;
|
||||||
|
base_type::fence_before(order);
|
||||||
|
__asm__ __volatile__
|
||||||
|
(
|
||||||
|
"1:\n\t"
|
||||||
|
"ldl_l %0, %2\n\t"
|
||||||
|
"addl %0, %3, %1\n\t"
|
||||||
|
"zapnot %1, 3, %1\n\t"
|
||||||
|
"stl_c %1, %2\n\t"
|
||||||
|
"beq %1, 2f\n\t"
|
||||||
|
|
||||||
|
".subsection 2\n\t"
|
||||||
|
"2: br 1b\n\t"
|
||||||
|
".previous\n\t"
|
||||||
|
|
||||||
|
: "=&r" (original), // %0
|
||||||
|
"=&r" (modified) // %1
|
||||||
|
: "m" (storage), // %2
|
||||||
|
"r" (v) // %3
|
||||||
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
|
||||||
|
);
|
||||||
|
base_type::fence_after(order);
|
||||||
|
return original;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
storage_type original, modified;
|
||||||
|
base_type::fence_before(order);
|
||||||
|
__asm__ __volatile__
|
||||||
|
(
|
||||||
|
"1:\n\t"
|
||||||
|
"ldl_l %0, %2\n\t"
|
||||||
|
"subl %0, %3, %1\n\t"
|
||||||
|
"zapnot %1, 3, %1\n\t"
|
||||||
|
"stl_c %1, %2\n\t"
|
||||||
|
"beq %1, 2f\n\t"
|
||||||
|
|
||||||
|
".subsection 2\n\t"
|
||||||
|
"2: br 1b\n\t"
|
||||||
|
".previous\n\t"
|
||||||
|
|
||||||
|
: "=&r" (original), // %0
|
||||||
|
"=&r" (modified) // %1
|
||||||
|
: "m" (storage), // %2
|
||||||
|
"r" (v) // %3
|
||||||
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
|
||||||
|
);
|
||||||
|
base_type::fence_after(order);
|
||||||
|
return original;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template< bool Interprocess >
|
||||||
|
struct core_arch_operations< 2u, true, Interprocess > :
|
||||||
|
public core_arch_operations< 4u, true, Interprocess >
|
||||||
|
{
|
||||||
|
typedef core_arch_operations< 4u, true, Interprocess > base_type;
|
||||||
|
typedef typename base_type::storage_type storage_type;
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
storage_type original, modified;
|
||||||
|
base_type::fence_before(order);
|
||||||
|
__asm__ __volatile__
|
||||||
|
(
|
||||||
|
"1:\n\t"
|
||||||
|
"ldl_l %0, %2\n\t"
|
||||||
|
"addl %0, %3, %1\n\t"
|
||||||
|
"sextw %1, %1\n\t"
|
||||||
|
"stl_c %1, %2\n\t"
|
||||||
|
"beq %1, 2f\n\t"
|
||||||
|
|
||||||
|
".subsection 2\n\t"
|
||||||
|
"2: br 1b\n\t"
|
||||||
|
".previous\n\t"
|
||||||
|
|
||||||
|
: "=&r" (original), // %0
|
||||||
|
"=&r" (modified) // %1
|
||||||
|
: "m" (storage), // %2
|
||||||
|
"r" (v) // %3
|
||||||
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
|
||||||
|
);
|
||||||
|
base_type::fence_after(order);
|
||||||
|
return original;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
storage_type original, modified;
|
||||||
|
base_type::fence_before(order);
|
||||||
|
__asm__ __volatile__
|
||||||
|
(
|
||||||
|
"1:\n\t"
|
||||||
|
"ldl_l %0, %2\n\t"
|
||||||
|
"subl %0, %3, %1\n\t"
|
||||||
|
"sextw %1, %1\n\t"
|
||||||
|
"stl_c %1, %2\n\t"
|
||||||
|
"beq %1, 2f\n\t"
|
||||||
|
|
||||||
|
".subsection 2\n\t"
|
||||||
|
"2: br 1b\n\t"
|
||||||
|
".previous\n\t"
|
||||||
|
|
||||||
|
: "=&r" (original), // %0
|
||||||
|
"=&r" (modified) // %1
|
||||||
|
: "m" (storage), // %2
|
||||||
|
"r" (v) // %3
|
||||||
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
|
||||||
|
);
|
||||||
|
base_type::fence_after(order);
|
||||||
|
return original;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
template< bool Signed, bool Interprocess >
|
||||||
|
struct core_arch_operations< 8u, Signed, Interprocess > :
|
||||||
|
public core_arch_operations_gcc_alpha_base
|
||||||
|
{
|
||||||
|
typedef typename storage_traits< 8u >::type storage_type;
|
||||||
|
|
||||||
|
static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = 8u;
|
||||||
|
static BOOST_CONSTEXPR_OR_CONST std::size_t storage_alignment = 8u;
|
||||||
|
static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed;
|
||||||
|
static BOOST_CONSTEXPR_OR_CONST bool is_interprocess = Interprocess;
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
fence_before(order);
|
||||||
|
storage = v;
|
||||||
|
fence_after_store(order);
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
storage_type v = storage;
|
||||||
|
fence_after(order);
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
storage_type original, tmp;
|
||||||
|
fence_before(order);
|
||||||
|
__asm__ __volatile__
|
||||||
|
(
|
||||||
|
"1:\n\t"
|
||||||
|
"mov %3, %1\n\t"
|
||||||
|
"ldq_l %0, %2\n\t"
|
||||||
|
"stq_c %1, %2\n\t"
|
||||||
|
"beq %1, 2f\n\t"
|
||||||
|
|
||||||
|
".subsection 2\n\t"
|
||||||
|
"2: br 1b\n\t"
|
||||||
|
".previous\n\t"
|
||||||
|
|
||||||
|
: "=&r" (original), // %0
|
||||||
|
"=&r" (tmp) // %1
|
||||||
|
: "m" (storage), // %2
|
||||||
|
"r" (v) // %3
|
||||||
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
|
||||||
|
);
|
||||||
|
fence_after(order);
|
||||||
|
return original;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE bool compare_exchange_weak(
|
||||||
|
storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
fence_before(success_order);
|
||||||
|
int success;
|
||||||
|
storage_type current;
|
||||||
|
__asm__ __volatile__
|
||||||
|
(
|
||||||
|
"1:\n\t"
|
||||||
|
"ldq_l %2, %4\n\t" // current = *(&storage)
|
||||||
|
"cmpeq %2, %0, %3\n\t" // success = current == expected
|
||||||
|
"mov %2, %0\n\t" // expected = current
|
||||||
|
"beq %3, 2f\n\t" // if (success == 0) goto end
|
||||||
|
"stq_c %1, %4\n\t" // storage = desired; desired = store succeeded
|
||||||
|
"mov %1, %3\n\t" // success = desired
|
||||||
|
"2:\n\t"
|
||||||
|
: "+r" (expected), // %0
|
||||||
|
"+r" (desired), // %1
|
||||||
|
"=&r" (current), // %2
|
||||||
|
"=&r" (success) // %3
|
||||||
|
: "m" (storage) // %4
|
||||||
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
|
||||||
|
);
|
||||||
|
if (success)
|
||||||
|
fence_after(success_order);
|
||||||
|
else
|
||||||
|
fence_after(failure_order);
|
||||||
|
return !!success;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE bool compare_exchange_strong(
|
||||||
|
storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
int success;
|
||||||
|
storage_type current, tmp;
|
||||||
|
fence_before(success_order);
|
||||||
|
__asm__ __volatile__
|
||||||
|
(
|
||||||
|
"1:\n\t"
|
||||||
|
"mov %5, %1\n\t" // tmp = desired
|
||||||
|
"ldq_l %2, %4\n\t" // current = *(&storage)
|
||||||
|
"cmpeq %2, %0, %3\n\t" // success = current == expected
|
||||||
|
"mov %2, %0\n\t" // expected = current
|
||||||
|
"beq %3, 2f\n\t" // if (success == 0) goto end
|
||||||
|
"stq_c %1, %4\n\t" // storage = tmp; tmp = store succeeded
|
||||||
|
"beq %1, 3f\n\t" // if (tmp == 0) goto retry
|
||||||
|
"mov %1, %3\n\t" // success = tmp
|
||||||
|
"2:\n\t"
|
||||||
|
|
||||||
|
".subsection 2\n\t"
|
||||||
|
"3: br 1b\n\t"
|
||||||
|
".previous\n\t"
|
||||||
|
|
||||||
|
: "+r" (expected), // %0
|
||||||
|
"=&r" (tmp), // %1
|
||||||
|
"=&r" (current), // %2
|
||||||
|
"=&r" (success) // %3
|
||||||
|
: "m" (storage), // %4
|
||||||
|
"r" (desired) // %5
|
||||||
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
|
||||||
|
);
|
||||||
|
if (success)
|
||||||
|
fence_after(success_order);
|
||||||
|
else
|
||||||
|
fence_after(failure_order);
|
||||||
|
return !!success;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
storage_type original, modified;
|
||||||
|
fence_before(order);
|
||||||
|
__asm__ __volatile__
|
||||||
|
(
|
||||||
|
"1:\n\t"
|
||||||
|
"ldq_l %0, %2\n\t"
|
||||||
|
"addq %0, %3, %1\n\t"
|
||||||
|
"stq_c %1, %2\n\t"
|
||||||
|
"beq %1, 2f\n\t"
|
||||||
|
|
||||||
|
".subsection 2\n\t"
|
||||||
|
"2: br 1b\n\t"
|
||||||
|
".previous\n\t"
|
||||||
|
|
||||||
|
: "=&r" (original), // %0
|
||||||
|
"=&r" (modified) // %1
|
||||||
|
: "m" (storage), // %2
|
||||||
|
"r" (v) // %3
|
||||||
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
|
||||||
|
);
|
||||||
|
fence_after(order);
|
||||||
|
return original;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
storage_type original, modified;
|
||||||
|
fence_before(order);
|
||||||
|
__asm__ __volatile__
|
||||||
|
(
|
||||||
|
"1:\n\t"
|
||||||
|
"ldq_l %0, %2\n\t"
|
||||||
|
"subq %0, %3, %1\n\t"
|
||||||
|
"stq_c %1, %2\n\t"
|
||||||
|
"beq %1, 2f\n\t"
|
||||||
|
|
||||||
|
".subsection 2\n\t"
|
||||||
|
"2: br 1b\n\t"
|
||||||
|
".previous\n\t"
|
||||||
|
|
||||||
|
: "=&r" (original), // %0
|
||||||
|
"=&r" (modified) // %1
|
||||||
|
: "m" (storage), // %2
|
||||||
|
"r" (v) // %3
|
||||||
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
|
||||||
|
);
|
||||||
|
fence_after(order);
|
||||||
|
return original;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
storage_type original, modified;
|
||||||
|
fence_before(order);
|
||||||
|
__asm__ __volatile__
|
||||||
|
(
|
||||||
|
"1:\n\t"
|
||||||
|
"ldq_l %0, %2\n\t"
|
||||||
|
"and %0, %3, %1\n\t"
|
||||||
|
"stq_c %1, %2\n\t"
|
||||||
|
"beq %1, 2f\n\t"
|
||||||
|
|
||||||
|
".subsection 2\n\t"
|
||||||
|
"2: br 1b\n\t"
|
||||||
|
".previous\n\t"
|
||||||
|
|
||||||
|
: "=&r" (original), // %0
|
||||||
|
"=&r" (modified) // %1
|
||||||
|
: "m" (storage), // %2
|
||||||
|
"r" (v) // %3
|
||||||
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
|
||||||
|
);
|
||||||
|
fence_after(order);
|
||||||
|
return original;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
storage_type original, modified;
|
||||||
|
fence_before(order);
|
||||||
|
__asm__ __volatile__
|
||||||
|
(
|
||||||
|
"1:\n\t"
|
||||||
|
"ldq_l %0, %2\n\t"
|
||||||
|
"bis %0, %3, %1\n\t"
|
||||||
|
"stq_c %1, %2\n\t"
|
||||||
|
"beq %1, 2f\n\t"
|
||||||
|
|
||||||
|
".subsection 2\n\t"
|
||||||
|
"2: br 1b\n\t"
|
||||||
|
".previous\n\t"
|
||||||
|
|
||||||
|
: "=&r" (original), // %0
|
||||||
|
"=&r" (modified) // %1
|
||||||
|
: "m" (storage), // %2
|
||||||
|
"r" (v) // %3
|
||||||
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
|
||||||
|
);
|
||||||
|
fence_after(order);
|
||||||
|
return original;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
storage_type original, modified;
|
||||||
|
fence_before(order);
|
||||||
|
__asm__ __volatile__
|
||||||
|
(
|
||||||
|
"1:\n\t"
|
||||||
|
"ldq_l %0, %2\n\t"
|
||||||
|
"xor %0, %3, %1\n\t"
|
||||||
|
"stq_c %1, %2\n\t"
|
||||||
|
"beq %1, 2f\n\t"
|
||||||
|
|
||||||
|
".subsection 2\n\t"
|
||||||
|
"2: br 1b\n\t"
|
||||||
|
".previous\n\t"
|
||||||
|
|
||||||
|
: "=&r" (original), // %0
|
||||||
|
"=&r" (modified) // %1
|
||||||
|
: "m" (storage), // %2
|
||||||
|
"r" (v) // %3
|
||||||
|
: BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC
|
||||||
|
);
|
||||||
|
fence_after(order);
|
||||||
|
return original;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
return !!exchange(storage, (storage_type)1, order);
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
|
||||||
|
{
|
||||||
|
store(storage, (storage_type)0, order);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace detail
|
||||||
|
} // namespace atomics
|
||||||
|
} // namespace boost
|
||||||
|
|
||||||
|
#include <boost/atomic/detail/footer.hpp>
|
||||||
|
|
||||||
|
#endif // BOOST_ATOMIC_DETAIL_CORE_ARCH_OPS_GCC_ALPHA_HPP_INCLUDED_
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user