You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@etch.apache.org by jd...@apache.org on 2009/04/22 19:25:51 UTC
svn commit: r767594 [12/43] - in /incubator/etch/trunk/binding-c/runtime/c:
./ ext/ ext/hashtab/ ext/lib/ inc/ lib/ project/ project/$etchstop/
project/bin/ project/etch/ project/logcli/ project/logsrv/ project/notes/
project/test/ project/test/logcli/...
Added: incubator/etch/trunk/binding-c/runtime/c/project/xamples/xmpl_perf/readmefirst.txt
URL: http://svn.apache.org/viewvc/incubator/etch/trunk/binding-c/runtime/c/project/xamples/xmpl_perf/readmefirst.txt?rev=767594&view=auto
==============================================================================
--- incubator/etch/trunk/binding-c/runtime/c/project/xamples/xmpl_perf/readmefirst.txt (added)
+++ incubator/etch/trunk/binding-c/runtime/c/project/xamples/xmpl_perf/readmefirst.txt Wed Apr 22 17:25:43 2009
@@ -0,0 +1,5 @@
+note that when starting an etch client or server from the debugger,
+the working directory is not the same as when started from the
+command line. when starting from the debugger, the config and log
+directories are here. when started from the command line they
+are relative to \etch\bindings\c\project"
\ No newline at end of file
Added: incubator/etch/trunk/binding-c/runtime/c/project/xamples/xmpl_perf/xmpl_perf_client/xmpl_perf_client.vcproj
URL: http://svn.apache.org/viewvc/incubator/etch/trunk/binding-c/runtime/c/project/xamples/xmpl_perf/xmpl_perf_client/xmpl_perf_client.vcproj?rev=767594&view=auto
==============================================================================
--- incubator/etch/trunk/binding-c/runtime/c/project/xamples/xmpl_perf/xmpl_perf_client/xmpl_perf_client.vcproj (added)
+++ incubator/etch/trunk/binding-c/runtime/c/project/xamples/xmpl_perf/xmpl_perf_client/xmpl_perf_client.vcproj Wed Apr 22 17:25:43 2009
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="xmpl_perf_client"
+ ProjectGUID="{DE24F3F4-A5CB-43DE-9187-6F1846CB5A15}"
+ RootNamespace="xmpl_perf_client"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\..\inc;..\..\..\..\ext\hashtab;"$(APRPATH)\inc""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;APR_DECLARE_STATIC"
+ MinimalRebuild="false"
+ ExceptionHandling="0"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="1"
+ CompileAs="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/NODEFAULTLIB:LIBCMTD"
+ AdditionalDependencies="etch.lib jenkhash.lib apr-1.lib WS2_32.LIB Mswsock.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="..\..\..\..\lib;..\..\..\..\ext\lib;"$(APRPATH)\lib";..\xmpl_perflib.lib"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath="..\..\..\..\src\xamples\perf\xmpl_perf_client_impl.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\xamples\perf\xmpl_perf_client_main.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\xamples\perf\xmpl_perf_client_tests.c"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath="..\..\..\..\src\xamples\perf\xmpl_perf_client_main.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ >
+ <File
+ RelativePath="..\xmpl_perflib.lib"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Added: incubator/etch/trunk/binding-c/runtime/c/project/xamples/xmpl_perf/xmpl_perf_server/etchtest.log
URL: http://svn.apache.org/viewvc/incubator/etch/trunk/binding-c/runtime/c/project/xamples/xmpl_perf/xmpl_perf_server/etchtest.log?rev=767594&view=auto
==============================================================================
--- incubator/etch/trunk/binding-c/runtime/c/project/xamples/xmpl_perf/xmpl_perf_server/etchtest.log (added)
+++ incubator/etch/trunk/binding-c/runtime/c/project/xamples/xmpl_perf/xmpl_perf_server/etchtest.log Wed Apr 22 17:25:43 2009
@@ -0,0 +1 @@
+it works!
\ No newline at end of file
Added: incubator/etch/trunk/binding-c/runtime/c/project/xamples/xmpl_perf/xmpl_perf_server/xmpl_perf_server.vcproj
URL: http://svn.apache.org/viewvc/incubator/etch/trunk/binding-c/runtime/c/project/xamples/xmpl_perf/xmpl_perf_server/xmpl_perf_server.vcproj?rev=767594&view=auto
==============================================================================
--- incubator/etch/trunk/binding-c/runtime/c/project/xamples/xmpl_perf/xmpl_perf_server/xmpl_perf_server.vcproj (added)
+++ incubator/etch/trunk/binding-c/runtime/c/project/xamples/xmpl_perf/xmpl_perf_server/xmpl_perf_server.vcproj Wed Apr 22 17:25:43 2009
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="xmpl_perf_server"
+ ProjectGUID="{D5EF8211-999C-4FB5-9218-DDCFD51D0611}"
+ RootNamespace="xmpl_perf_server"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\..\inc;..\..\..\..\ext\hashtab;"$(APRPATH)\inc""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE; APR_DECLARE_STATIC"
+ MinimalRebuild="false"
+ ExceptionHandling="0"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="1"
+ CompileAs="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/NODEFAULTLIB:LIBCMTD"
+ AdditionalDependencies="etch.lib jenkhash.lib apr-1.lib WS2_32.LIB Mswsock.lib"
+ LinkIncremental="1"
+ AdditionalLibraryDirectories="..\..\..\..\lib;..\..\..\..\ext\lib;"$(APRPATH)\lib";..\xmpl_perflib.lib"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="1"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath="..\..\..\..\src\xamples\perf\xmpl_perf_listener_main.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\xamples\perf\xmpl_perf_server_impl.c"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath="..\..\..\..\src\xamples\perf\xmpl_perf_listener_main.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ >
+ <File
+ RelativePath="..\xmpl_perflib.lib"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Added: incubator/etch/trunk/binding-c/runtime/c/project/xamples/xmpl_perf/xmpl_perflib/xmpl_perflib.vcproj
URL: http://svn.apache.org/viewvc/incubator/etch/trunk/binding-c/runtime/c/project/xamples/xmpl_perf/xmpl_perflib/xmpl_perflib.vcproj?rev=767594&view=auto
==============================================================================
--- incubator/etch/trunk/binding-c/runtime/c/project/xamples/xmpl_perf/xmpl_perflib/xmpl_perflib.vcproj (added)
+++ incubator/etch/trunk/binding-c/runtime/c/project/xamples/xmpl_perf/xmpl_perflib/xmpl_perflib.vcproj Wed Apr 22 17:25:43 2009
@@ -0,0 +1,258 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="xmpl_perflib"
+ ProjectGUID="{FE0F6ED2-5880-4FB8-9C62-917BE97712D5}"
+ RootNamespace="xmpl_perflib"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\..\inc;..\..\..\..\ext\hashtab;"$(APRPATH)\inc""
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE; APR_DECLARE_STATIC"
+ MinimalRebuild="false"
+ ExceptionHandling="0"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ WarnAsError="true"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="1"
+ CompileAs="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="../$(ProjectName).lib"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="4"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="2"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+ >
+ <File
+ RelativePath="..\..\..\..\src\xamples\perf\xmpl_perf.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\xamples\perf\xmpl_perf_client.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\xamples\perf\xmpl_perf_client_implx.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\xamples\perf\xmpl_perf_client_stub.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\xamples\perf\xmpl_perf_helper.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\xamples\perf\xmpl_perf_remote.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\xamples\perf\xmpl_perf_remote_client.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\xamples\perf\xmpl_perf_remote_server.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\xamples\perf\xmpl_perf_server.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\xamples\perf\xmpl_perf_server_implx.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\xamples\perf\xmpl_perf_server_stub.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\xamples\perf\xmpl_perf_valufact.c"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+ >
+ <File
+ RelativePath="..\..\..\..\src\xamples\perf\xmpl_perf.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\xamples\perf\xmpl_perf_client.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\xamples\perf\xmpl_perf_client_stub.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\xamples\perf\xmpl_perf_helper.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\xamples\perf\xmpl_perf_remote.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\xamples\perf\xmpl_perf_remote_client.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\xamples\perf\xmpl_perf_remote_server.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\xamples\perf\xmpl_perf_server.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\xamples\perf\xmpl_perf_server_stub.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\..\src\xamples\perf\xmpl_perf_valufact.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+ >
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Added: incubator/etch/trunk/binding-c/runtime/c/src/bindings/msg/etch_arrayval.c
URL: http://svn.apache.org/viewvc/incubator/etch/trunk/binding-c/runtime/c/src/bindings/msg/etch_arrayval.c?rev=767594&view=auto
==============================================================================
--- incubator/etch/trunk/binding-c/runtime/c/src/bindings/msg/etch_arrayval.c (added)
+++ incubator/etch/trunk/binding-c/runtime/c/src/bindings/msg/etch_arrayval.c Wed Apr 22 17:25:43 2009
@@ -0,0 +1,646 @@
+/* $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License, Version
+ * 2.0 (the "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * etch_arrayval.c -- etch_arrayvalue implementation.
+ *
+ * todo: modify this class to permit using an etch_nativearray as the arrayvalue
+ * backing store. this could be very useful for large arrays of small values,
+ * where not all values are accessed individually. the key to this conversion
+ * is always returning a non-disposable object from get(), and we ensure this
+ * by always returnings item[i] from the arraylist. when a get(i) is requested,
+ * we check the arraylist first, lazy-allocating it if necessary. if arraylist[i]
+ * is null, we populate arraylist[i] from natarray[i]. we then return arraylist[i]
+ * which is always non-disposable.
+ */
+
+#include "etch_arrayval.h"
+#include "etch_global.h"
+#include "etch_syncobj.h"
+#include "etch_tagdata.h"
+#include "etchexcp.h"
+
+etch_arrayvalue* new_arrayvalue_init(const int, const int, const int, const int);
+etch_arrayvalue* populate_arrayvalue_from(etch_arrayvalue*);
+unsigned short etch_itemtype_to_arrayclass(unsigned short item_obj_type);
+int array_value_add(etch_arrayvalue* thisp, ETCH_ARRAY_ELEMENT* content);
+
+
+
+/**
+ * new_arrayvalue()
+ * primary constructor for etch_arrayvalue
+ * @param type_code wire ID of the array content class.
+ * @param custom_struct_type non-disposable type of custom struct,
+ caller retains ownership as with all types.
+ */
+etch_arrayvalue* new_arrayvalue (const byte type_code, etch_type* custom_struct_type,
+ const int dim, const int initsize, const int deltsize,
+ const int is_readonly, const int is_synchronized)
+{
+ etch_arrayvalue* newobj = new_arrayvalue_init
+ (initsize, deltsize, is_readonly, is_synchronized);
+
+ newobj->dim = dim;
+ newobj->type_code = type_code;
+ newobj->class_id = etch_arraytype_to_classid (type_code);
+
+ newobj->custom_struct_type = custom_struct_type; /* not owned */
+
+ return newobj;
+}
+
+
+/**
+ * new_arrayvalue_from()
+ * etch_arrayvalue constructor - builds arryavalue from an etch_nativearray.
+ * when native array is multi-dimensioned, this constructor is invoked recursively.
+ * todo: convert this to use the subarray call, which this code duplicates.
+ * todo: add a parameter to permit the arrayvalue to remain unpopulated; i.e.,
+ * the nativearray is present but the object array is not yet populated.
+ */
+etch_arrayvalue* new_arrayvalue_from (etch_nativearray* natarray,
+ const signed char type_code, etch_type* custom_struct_type,
+ const int initsize, const int deltsize, const int is_readonly)
+{
+ const int SUBARRAY_NUMDIMS = natarray->numdims - 1;
+ const size_t SUBARRAY_COUNT = natarray->dimension[SUBARRAY_NUMDIMS];
+ const size_t SUBARRAY_BYTELEN = natarray->dimsize [SUBARRAY_NUMDIMS];
+
+ int i = 0;
+ etch_arrayvalue* newav = NULL; /* nativearray currently max 3 dims*/
+ if (natarray->is_null) return NULL;
+ if (SUBARRAY_NUMDIMS < 0 || SUBARRAY_NUMDIMS > 2) return NULL;
+
+ newav = new_arrayvalue_init(initsize, deltsize, is_readonly, FALSE);
+ newav->is_array_owned = !is_readonly; /* does av own nativearray */
+ newav->type_code = type_code; /* external array content type */
+ newav->class_id = etch_arraytype_to_classid (type_code);
+ newav->natarray = natarray;
+ newav->dim = natarray->numdims;
+ newav->class_id = natarray->class_id; /* validator expects class match */
+
+ newav->custom_struct_type = custom_struct_type; /* not owned */
+
+ if (SUBARRAY_NUMDIMS == 0) /* if single dimension, populate values */
+ {
+ newav = populate_arrayvalue_from(newav);
+ }
+ else
+ { newav->content_obj_type = ETCHTYPEB_ARRAYVAL;
+ newav->content_item_size = sizeof(void*);
+
+ for(; i < (const int) SUBARRAY_COUNT; i++)
+ {
+ /* the native array was multi-dimensioned. we therefore add values
+ * to this arrayvalue, which are arrayalues of one dimension less than
+ * that of the parent arrayvalue. the sub-arrayvalues are created from
+ * etch_nativearrays created from offset pointers into the parent
+ * native array byte vector. sub-arrays therefore do not own content.
+ */
+ const int itemcount = (int) natarray->dimension[SUBARRAY_NUMDIMS-1];
+ const size_t vector_offset = i * SUBARRAY_BYTELEN;
+ byte* subvector = (byte*) natarray->values + vector_offset;
+ etch_arrayvalue* subav = NULL;
+
+ /* create a sub-array. note we pass a possibly unused dimension
+ * value in order to avoid the extra logic to not do so */
+ etch_nativearray* newarray = new_nativearray_from(subvector, natarray->class_id,
+ natarray->itemsize, SUBARRAY_NUMDIMS,
+ (int) natarray->dimension[0], (int) natarray->dimension[1], 0);
+
+ newarray->content_class_id = natarray->content_class_id;
+ newarray->content_obj_type = natarray->content_obj_type;
+ newarray->is_content_owned = FALSE; /* pointer into parent vector */
+ newarray->counts[0] = newarray->counts[0]; /* move counts in case */
+ newarray->counts[1] = newarray->counts[1]; /* caller is using them */
+ newarray->counts[2] = 0;
+
+ subav = new_arrayvalue_from /* recursively create a sub-arrayvalue */
+ (newarray, type_code, custom_struct_type, itemcount, 0, is_readonly);
+
+ arrayvalue_add(newav, (ETCH_ARRAY_ELEMENT*) subav);
+ }
+ }
+
+ return newav;
+}
+
+
+/**
+ * new_arrayvalue_default()
+ * default constructor for etch_arrayvalue
+ */
+etch_arrayvalue* new_arrayvalue_default ()
+{
+ etch_arrayvalue* newobj = new_arrayvalue_init
+ (ETCH_ARRAYVALUE_DEFAULT_INITSIZE,
+ ETCH_ARRAYVALUE_DEFAULT_DELTSIZE,
+ ETCH_ARRAYVALUE_DEFAULT_READONLY,
+ ETCH_ARRAYVALUE_DEFAULT_SYNCHRONIZED);
+
+ return newobj;
+}
+
+
+/**
+ * new_arrayvalue_init()
+ * common initialization on etch_arrayvalue construction.
+ */
+etch_arrayvalue* new_arrayvalue_init (const int initsize, const int deltsize,
+ const int is_readonly, const int is_synchronized)
+{
+ etch_arrayvalue* newobj = (etch_arrayvalue*) new_object(sizeof(etch_arrayvalue),
+ ETCHTYPEB_ARRAYVAL, CLASSID_ARRAYVALUE);
+
+ newobj->destroy = destroy_arrayvalue;
+ newobj->clone = clone_null;
+
+ /* the underlying arraylist is marked as content type object, meaning we can
+ * interpret content as etchobject and call methods on the object accordingly,
+ * most notably destroy(). when is_readonly is true, the underlying list will
+ * not free memory for its content when the list is destroyed.
+ */
+ newobj->list = new_arrayvalue_arraylist
+ (initsize, deltsize, is_readonly, is_synchronized);
+
+ return newobj;
+}
+
+
+/**
+ * destroy_array_value()
+ * destructor for an etch_arrayvalue object
+ */
+int destroy_arrayvalue (etch_arrayvalue* thisp)
+{
+ if ((thisp->refcount > 0) && (--thisp->refcount > 0)) return -1;
+
+ if (!is_etchobj_static_content(thisp))
+ {
+ if (thisp->natarray && thisp->is_array_owned)
+ thisp->natarray->destroy(thisp->natarray);
+
+ if (thisp->list)
+ thisp->list->destroy(thisp->list);
+ }
+
+ destroy_objectex((objmask*)thisp);
+ return 0;
+}
+
+
+/**
+ * populate_arrayvalue_from()
+ * populate the specified arrayvalue from its attached single-dimensioned native array
+ */
+etch_arrayvalue* populate_arrayvalue_from (etch_arrayvalue* av)
+{
+ etch_nativearray* nat = av->natarray;
+ const int numentries = (int) nat->dimension[0];
+ objmask* wrapped_value = NULL;
+ int i = 0, result = 0;
+ if (nat->numdims != 1) return NULL;
+
+ av->content_obj_type = nat->content_obj_type;
+ av->content_item_size = (short) nat->itemsize;
+
+ for(; i < numentries; i++)
+ {
+ result = etch_nativearray_get_wrapped_component(nat, i, &wrapped_value);
+ arrayvalue_add(av, (ETCH_ARRAY_ELEMENT*) wrapped_value);
+ }
+
+ return av;
+}
+
+
+/**
+ * arrayvalue3_to_nativearray()
+ * convert an arrayvalue of dimension 3 to a native array. assumes that an
+ * appropriately sized and configured etch_nativearray object is resident in
+ * the arrayvalue object.
+ */
+int arrayvalue3_to_nativearray(etch_arrayvalue* av2)
+{
+ const int item2count = arrayvalue_count(av2);
+ int item1count = 0, item0count = 0;
+ etch_nativearray* natv = av2->natarray;
+ etch_object* wrapper = NULL;
+ etch_arrayvalue *av1 = NULL, *av0 = NULL;
+ int i, j, k, items=0;
+
+ for(i=0; i < item2count; i++)
+ {
+ av1 = arrayvalue_get(av2, i);
+ if (!is_etch_arrayvalue(av1)) return -1;
+ item1count = arrayvalue_count(av1);
+
+ for(j=0; j < (const int) item1count; j++)
+ {
+ av0 = arrayvalue_get(av1, j);
+ if (!is_etch_arrayvalue(av0)) return -1;
+ item0count = arrayvalue_count(av0);
+
+ for(k=0; k < (const int) item0count; k++)
+ { /* insert native values into nativearray byte vector. we mask the
+ * wrapped primitive with an etch_object. we can do so because the
+ * etch primitive object is guaranteed to offset its value the
+ * same as that of an etch_object, right after the object header.
+ */
+ if (NULL == (wrapper = arrayvalue_get(av0, k))) return -1;
+ if (0 == natv->put3(natv, &wrapper->value, i, j, k))
+ items++;
+ else return -1;
+ }
+ }
+ }
+
+ return items;
+}
+
+
+/**
+ * arrayvalue2_to_nativearray()
+ * convert an arrayvalue of dimension 2 to a native array. assumes that an
+ * appropriately sized and configured etch_nativearray object is resident in
+ * the arrayvalue object.
+ */
+int arrayvalue2_to_nativearray(etch_arrayvalue* av1)
+{
+ const int item1count = arrayvalue_count(av1);
+ int item0count = 0;
+ etch_nativearray* natv = av1->natarray;
+ etch_object* wrapper = NULL;
+ etch_arrayvalue *av0 = NULL;
+ int i, j, items=0;
+
+ for(i = 0; i < item1count; i++)
+ {
+ av0 = arrayvalue_get(av1, i);
+ if (!is_etch_arrayvalue(av0)) return -1;
+ item0count = arrayvalue_count(av0);
+
+ for(j = 0; j < (const int) item0count; j++)
+ { /* insert native values into nativearray byte vector. we mask the
+ * wrapped primitive with an etch_object. we can do so because the
+ * etch primitive object is guaranteed to offset its value the
+ * same as that of an etch_object, right after the object header.
+ */
+ if (NULL == (wrapper = arrayvalue_get(av0, j))) return -1;
+ if (0 == natv->put2(natv, &wrapper->value, i, j))
+ items++;
+ else return -1;
+ }
+ }
+
+ return items;
+}
+
+
+/**
+ * arrayvalue1_to_nativearray()
+ * convert an arrayvalue of dimension 1 to a native array. assumes that an
+ * appropriately sized and configured etch_nativearray object is resident in
+ * the arrayvalue object.
+ */
+int arrayvalue1_to_nativearray(etch_arrayvalue* av)
+{
+ const int itemcount = arrayvalue_count(av);
+ etch_nativearray* natv = av->natarray;
+ etch_object* wrapper = NULL;
+ int i=0, items = 0;
+
+ for(; i < itemcount; i++)
+ { /* insert native values into nativearray byte vector. we mask the
+ * wrapped primitive with an etch_object. we can do so because the
+ * etch primitive object is guaranteed to offset its value the
+ * same as that of an etch_object, right after the object header.
+ */
+ if (NULL == (wrapper = arrayvalue_get(av, i))) return -1;
+ if (0 == natv->put1(natv, &wrapper->value, i))
+ items++;
+ else return -1;
+ }
+
+ return items;
+}
+
+
+/**
+ * arrayvalue_to_nativearray()
+ * convert an arrayvalue to a native array
+ * if the arrayvalue is created from a native array, the source native array is
+ * still resident, however this method assumes we want to create the native array
+ * regardless of whether one is resident. is also assumes that if we have created
+ * the arrayvalue from scratch, we have done so properly, i.e., a multi-dimensioned
+ * arrayvalue is and arrayvalue of arrayvalues. It additionally assumes that the
+ * arrayvalue is populated with at least one value; if this were not the case we
+ * would need to switch on the byte type_code to determine the item size.
+ */
+int arrayvalue_to_nativearray (etch_arrayvalue* av)
+{
+ int dim0count=0, dim1count=0, dim2count=0, itemsize=0;
+ etch_arrayvalue *av2 = NULL, *av1 = NULL, *av0 = NULL;
+ unsigned short array_class_id = 0;
+ etch_nativearray* newna = NULL;
+ const int dimensions = av->dim;
+
+ switch(dimensions) /* determine native array size */
+ { case 1:
+ av0 = av;
+ break;
+
+ case 2:
+ dim1count = arrayvalue_count(av);
+ av1 = (etch_arrayvalue*) arrayvalue_get(av, 0);
+ if (is_etch_arrayvalue(av1))
+ av0 = av1;
+ break;
+
+ case 3:
+ dim2count = arrayvalue_count(av);
+ av2 = (etch_arrayvalue*) arrayvalue_get(av, 0);
+ if (!is_etch_arrayvalue(av2)) break;
+
+ dim1count = arrayvalue_count(av2);
+ av1 = (etch_arrayvalue*) arrayvalue_get(av2, 0);
+ if (is_etch_arrayvalue(av1))
+ av0 = av1;
+ }
+
+ if (av0) /* if arrayvalue was populated ... */
+ { itemsize = av0->content_item_size;
+ dim0count = arrayvalue_count(av0);
+ array_class_id = etch_itemtype_to_arrayclass(av0->content_obj_type);
+ }
+
+ if (dim0count == 0 || itemsize == 0) return NULL; /* bad arrayvalue */
+
+ newna = new_nativearray /* allocate appropriately sized native array */
+ (array_class_id, itemsize, dimensions, dim0count, dim1count, dim2count);
+ if (NULL == newna) return NULL;
+
+ /* if previous native array was attached to the arrayvalue, free it */
+ if (av->natarray) av->natarray->destroy(av->natarray);
+
+ av->natarray = newna; /* attach new native array to its arrayvalue */
+
+ switch(dimensions) /* populate new native array from array value */
+ { case 1: return arrayvalue1_to_nativearray(av);
+ case 2: return arrayvalue2_to_nativearray(av);
+ case 3: return arrayvalue3_to_nativearray(av);
+ }
+
+ return NULL;
+}
+
+
+/**
+ * arrayvalue_add()
+ * returns 0 or -1
+ */
+int arrayvalue_add (etch_arrayvalue* av, ETCH_ARRAY_ELEMENT* content)
+{
+ const int result = arraylist_add(av->list, content);
+ return result;
+}
+
+
+/**
+ * array_value_add()
+ * returns 0 or -1
+ */
+int array_value_add (etch_arrayvalue* av, ETCH_ARRAY_ELEMENT* content)
+{
+ const int result = arraylist_add(av->list, content);
+ return result;
+}
+
+
+/**
+ * arrayvalue_get()
+ * return item at specified index
+ * returns array item, always an address, or NULL.
+ */
+void* arrayvalue_get (etch_arrayvalue* thisp, const int i)
+{
+ return arraylist_get(thisp->list, i);
+}
+
+
+/**
+ * arrayvalue_count()
+ * return item count
+ */
+int arrayvalue_count (etch_arrayvalue* thisp)
+{
+ return thisp? thisp->list? thisp->list->count: 0: 0;
+}
+
+
+/**
+ * new_arrayvalue_arraylist()
+ * allocates and returns an arraylist configured appropriately for use as arrayvalue backing store
+ */
+etch_arraylist* new_arrayvalue_arraylist (const int initsize, const int deltsize,
+ const int is_readonly, const int is_synchronized)
+{
+ etch_arraylist* list = is_synchronized?
+ new_synchronized_arraylist(initsize, deltsize):
+ new_arraylist(initsize, deltsize);
+
+ list->is_readonly = is_readonly != 0;
+ list->content_type = ETCHARRAYLIST_CONTENT_OBJECT;
+ return list;
+}
+
+
+/**
+ * new_array_element()
+ * as ported from java, used when populating an array with nonspecific objects.
+ */
+ETCH_ARRAY_ELEMENT* new_array_element (const int objtype)
+{
+ return new_etch_object(CLASSID_ARRAYELEMENT, NULL);
+}
+
+
+static const signed char etch_primitive_typecodes[11]
+ = {ETCH_XTRNL_TYPECODE_CUSTOM, /* CLASSID_ARRAY_OBJECT */
+ ETCH_XTRNL_TYPECODE_BYTE, /* CLASSID_ARRAY_BYTE */
+ ETCH_XTRNL_TYPECODE_BOOLEAN_TRUE, /* CLASSID_ARRAY_BOOL */
+ ETCH_XTRNL_TYPECODE_BYTE, /* CLASSID_ARRAY_BYTE */
+ ETCH_XTRNL_TYPECODE_SHORT, /* CLASSID_ARRAY_INT16 */
+ ETCH_XTRNL_TYPECODE_INT, /* CLASSID_ARRAY_INT32 */
+ ETCH_XTRNL_TYPECODE_LONG, /* CLASSID_ARRAY_INT64 */
+ ETCH_XTRNL_TYPECODE_FLOAT, /* CLASSID_ARRAY_FLOAT */
+ ETCH_XTRNL_TYPECODE_DOUBLE, /* CLASSID_ARRAY_DOUBLE */
+ ETCH_XTRNL_TYPECODE_STRING, /* CLASSID_ARRAY_STRING */
+ 0,
+ };
+
+static const unsigned short etch_arrayval_classids[11]
+ = {CLASSID_ARRAY_OBJECT, /* ETCH_XTRNL_TYPECODE_CUSTOM */
+ CLASSID_ARRAY_BYTE, /* ETCH_XTRNL_TYPECODE_BYTE */
+ CLASSID_ARRAY_BOOL, /* ETCH_XTRNL_TYPECODE_BOOLEAN_TRUE */
+ CLASSID_ARRAY_BYTE, /* ETCH_XTRNL_TYPECODE_BYTE */
+ CLASSID_ARRAY_INT16, /* ETCH_XTRNL_TYPECODE_SHORT */
+ CLASSID_ARRAY_INT32, /* ETCH_XTRNL_TYPECODE_INT */
+ CLASSID_ARRAY_INT64, /* ETCH_XTRNL_TYPECODE_LONG */
+ CLASSID_ARRAY_FLOAT, /* ETCH_XTRNL_TYPECODE_FLOAT */
+ CLASSID_ARRAY_DOUBLE, /* ETCH_XTRNL_TYPECODE_DOUBLE */
+ CLASSID_ARRAY_STRING, /* ETCH_XTRNL_TYPECODE_STRING */
+ 0,
+ };
+
+
+/**
+ * etch_arraytype_to_classid()
+ * returns array class ID corresponding to serialization byte code.
+ */
+unsigned short etch_arraytype_to_classid (const signed char typecode)
+{
+ int i = 0;
+ unsigned short idout = 0;
+ signed char* p = (signed char*) etch_primitive_typecodes;
+
+ for(; *p; i++, p++)
+ if (*p == typecode)
+ { idout = etch_arrayval_classids[i];
+ break;
+ }
+
+ return idout;
+}
+
+
+/**
+ * etch_classid_to_arraytype()
+ * returns serialization bytecode corresponding to array class ID
+ */
+signed char etch_classid_to_arraytype (const unsigned short class_id)
+{
+ int i = 0;
+ signed char typecodeout = 0;
+ unsigned short* p = (unsigned short*) etch_arrayval_classids;
+
+ for(; *p; i++, p++)
+ if (*p == class_id)
+ { typecodeout = etch_primitive_typecodes[i];
+ break;
+ }
+
+ return typecodeout;
+}
+
+
+/**
+ * etch_itemtype_to_arrayclass()
+ * returns array object type corresponding to item object type
+ */
+unsigned short etch_itemtype_to_arrayclass(unsigned short item_obj_type)
+{
+ if (item_obj_type > 0 && item_obj_type <= ETCHTYPEB_STRING)
+ return etch_arrayval_classids[item_obj_type];
+ else return CLASSID_ARRAY_OBJECT;
+}
+
+
+/**
+ * arrayvalue_get_external_typecode()
+ * returns an array type bytecode for the specified array content type.
+ */
+signed char arrayvalue_get_external_typecode (unsigned short obj_type, unsigned short class_id)
+{
+ signed char xtype = 0;
+
+ #if(0) /* uncompiled arrays are here for documentation purposes */
+
+ unsigned short primitive_class_ids[] =
+ { CLASSID_ANY, /* 0x0 */
+ CLASSID_PRIMITIVE_BYTE, /* 0x1 */
+ CLASSID_PRIMITIVE_BOOL, /* 0x2 */
+ CLASSID_PRIMITIVE_INT8, /* 0x3 */
+ CLASSID_PRIMITIVE_INT16, /* 0x4 */
+ CLASSID_PRIMITIVE_INT32, /* 0x5 */
+ CLASSID_PRIMITIVE_INT64, /* 0x6 */
+ CLASSID_PRIMITIVE_FLOAT, /* 0x7 */
+ CLASSID_PRIMITIVE_DOUBLE,/* 0x8 */
+ CLASSID_STRING, /* 0x9 */
+ };
+
+ unsigned short primitive_obj_types[] =
+ { ETCHTYPEB_UNDEFINED, /* 0x0 */
+ ETCHTYPEB_BYTE, /* 0x1 */
+ ETCHTYPEB_BOOL, /* 0x2 */
+ ETCHTYPEB_INT8, /* 0x3 */
+ ETCHTYPEB_INT16, /* 0x4 */
+ ETCHTYPEB_INT32, /* 0x5 */
+ ETCHTYPEB_INT64, /* 0x6 */
+ ETCHTYPEB_IEEE32, /* 0x7 */
+ ETCHTYPEB_IEEE64, /* 0x8 */
+ ETCHTYPEB_STRING, /* 0x9 */
+ };
+
+ #endif
+
+ if (obj_type == ETCHTYPEB_PRIMITIVE)
+ { if (class_id < 1 || class_id > 9)
+ class_id = 0;
+
+ xtype = etch_primitive_typecodes [class_id];
+ }
+ else /* primitive obj_type? */
+ if (obj_type > 0 && obj_type <= 9)
+ xtype = etch_primitive_typecodes [obj_type];
+
+ else switch(obj_type)
+ { case ETCHTYPEB_STRUCTVAL: xtype = ETCH_XTRNL_TYPECODE_CUSTOM; break;
+ case ETCHTYPEB_ARRAYVAL: xtype = ETCH_XTRNL_TYPECODE_ARRAY; break;
+ case ETCHTYPEB_NATIVEARRAY: xtype = ETCH_XTRNL_TYPECODE_ARRAY; break;
+ default: xtype = ETCH_XTRNL_TYPECODE_CUSTOM;
+ }
+
+ return xtype;
+}
+
+
+/*
+ * arrayvalue_set_static_content()
+ * configure arraylist of object wrappers such that objects are not freed by the arraylist
+ * destructor. presumably this would be used during recursive access to arrayvalue, where
+ * lowest level objects are seen and destroyed prior to higher level objects such as the
+ * array wrappers.
+ */
+void arrayvalue_set_static_content (etch_arrayvalue* av, const int is_set)
+{
+ etch_arraylist* list = av? av->list: NULL;
+ if (list) list->is_readonly = is_set? TRUE: FALSE;
+}
+
+
+/*
+ * arrayvalue_set_iterator()
+ * set an iterator on the arrayvalue, which becomes an iterator on its list
+ */
+int arrayvalue_set_iterator (etch_arrayvalue* av, etch_iterator* iterator)
+{
+ return set_iterator (iterator, av->list, &av->list->iterable);
+}
+