==========================================================================
== EABaseTypes
== Version log
==========================================================================

    Core Technology UI harvests changes to this package from customers.

    For more information on the harvesting process, please see:
      http://confluence.ea.com/x/SwHVCg

    For customer-specific harvesting notes, please see:
      http://confluence.ea.com/x/5iLICg

    If you would like your team's packages to be harvested, please contact
      CoreTechnologyUISupport?EASports@ea.com.

==========================================================================
      
Version: 1.07.00 (Zebra)
Owner:   Core Technology UI (CoreTechnologyUISupport?EASports@ea.com)
Date:    9/19/2013
CL:      481507

    New Features
    
        * EA::Types::Functors can now be created via the EA::Types::Factory without specifying template arguments
        
            Example:
            
                #include "EABaseTypes/factory.h"
                #include "EABaseTypes/functor.h"
            
                EA::Types::FunctionRef myStaticFunction = factory->Function(&MyStaticFunction);
                
                EA::Types::FunctionRef myMemberFunction = factory->Function(this, &MyObject::MyMemberFunction);
        
                EA::Types::ObjectRef that = factory->Object();
                
                that->insert("MyMemberFunction", this, &MyObject::MyMemberFunction);
        
        
        * EA::Types::Functions can now be called without template arguments (except for the return type) in most cases
        
            Example:

                #include "EABaseTypes/functioncallwrappers.h"
        
                int result = myFunction->Call<int>("foo", baseType, 3, false);
                
                
        * BaseTypes now work cleanly with POD (plain-old-data), EA::Types::AutoRefs of arbitrary types and SafeCom references
        
            Examples:
            
                #include "EABaseTypes/factory.h"
                #include "EABaseTypes/functioncallwrappers.h"
                #include "EABaseTypes/poduserdata.h"
                
                int i = 0;
                
                EA::Types::BaseTypeRef baseType = factory->BaseType(&i);
                
                EA::Types::ObjectRef object = factory->Object();
                
                object->insert("MyPointer", &i);
                
                EA_ASSERT((*object)["MyPointer"]->As<int*>() == &i);
                
                
                int* MyFunction(int* ip, int i);
                
                EA::Types::FunctionRef myFunction = factory->Function(&MyFunction);
                
                int arg = 0;
                
                int* result = myFunction->Call<int*>(&arg, 1);
                
                
                
                #include "EABaseTypes/factory.h"
                #include "EABaseTypes/functioncallwrappers.h"
                #include "EABaseTypes/safecomuserdata.h"
                
                IMyInterfaceRef myInterface = /* SafeCom reference */;
                
                EA::Types::BaseTypeRef baseType = factory->BaseType(myInterface);
                
                EA::Types::ObjectRef object = factory->Object();
                
                object->insert("MyInterface", myInterface);
                
                EA_ASSERT((*object)["MyInterface"]->As<IMyInterfaceRef>() == myInterface);
                
                
                IMyInterfaceReturn MyFunction(IMyInterface myInterface);
                
                EA::Types::FunctionRef myFunction = factory->Function(&MyFunction);
                
                IMyInterfaceRef result = myFunction->Call<IMyInterfaceReturn>(myInterface);
                
                
        * Closures are now much more flexible and can take arbitrary numbers of upvalues and parameters
        
            Example:
            
                #include "EABaseTypes/factory.h"
                #include "EABaseTypes/functioncallwrappers.h"
                #include "EABaseTypes/closure.h"
                
                bool MyFunction(int i, const char* s, bool b);
                
                
                EA::Types::FunctionRef closureFactory = EA::Types::ClosureAsFunction(factory);
                
                EA::Types::FunctionRef myFunction = factory->Function(MyFunction);
                
                bool result = myFunction->Call<bool>(1, "foo", false);
                
                
                EA::Types::FunctionRef closure = closureFactory->Call<EA::Types::FunctionReturn>(myFunction, 1);
                
                result = closure->Call<bool>("foo", false);
                
                
                closure = closureFactory->Call<EA::Types::FunctionReturn>(myFunction, 1, "foo");
                
                result = closure->Call<bool>(false);
                
                
                closure = closureFactory->Call<EA::Types::FunctionReturn>(myFunction, 1, "foo", false);
                
                result = closure->Call<bool>();
                
                
    Minor Changes
    
      * Added compare() to EA::String that takes an EA::String

    Bugfixes
    
      * String unit tests are now only enabled if string interning is enabled
      * Global operators for AutoRef<T>'s now work with const references
                
    Internal Changes
    
        * Updated unit tests to reflect the new way of creating and calling EA::Types::Functions
        * Added unit tests for new functionality
      
==========================================================================

Version: 1.06.02 (Yeti)
Owner:   Core Technology UI (CoreTechnologyUISupport?EASports@ea.com)
Date:    7/12/2013
CL:      449270

    New Features 
        * [From UFC] functors now support const member functions.
    
    Bugfixes
        * [From UFC] added missing include to poduserdata.h 
        
==========================================================================

Version: 1.06.01 (Yeti)
Owner:   Core Technology UI (CoreTechnologyUISupport?EASports@ea.com)
Date:    6/14/2013
CL:      435145

    New Features
    
      * Added weak references
        These are similar to the weak references in SafeCom, but they are somewhat more lightweight and they work with the
        existing EABaseTypes autorefs.
        
      * Added the ability to create PODUserData without specifying an initial value (so that they are default-constructed)
      
      * [From UFC] Added helper functions for creating userdata types
      
    Minor Changes
    
      * [From UFC] AutoRefBase<T>::operator== and AutoRefBase<T>::operator!= now take an intptr_t as an argument.
      
    Bugfixes
    
      * Added Equals() method to PODUserData
      
==========================================================================

Version: 1.06.00 (Xantus)
Owner:   Core Technology UI (CoreTechnologyUISupport?EASports@ea.com)
Date:    5/9/2013
CL:      414212

    API Changes
    
      * The member variables of FunctorBase are now private. Please use the getters and setters instead (in particular you will
        need to use SetObject(this); instead of mObject = this; where a Functor is inherited.

    New Features
    
      * EABaseTypes now has a .natvis file for VS 2012. This provides a more natural visualization of EABaseTypes in the debugger.
        This file is in the doc directory and should be placed here: My Documents\Visual Studio 2012\Visualizers
        
        The EASTL .natvis file must also be installed in that location (it is located in the doc directory of the EASTL package)
        
      * EA::Types::Function now has a GetDebugInfo() method which returns a BaseType - an arbitrary data structure containing
        debug information about the Function. User-code should have no reason to call this except to assist in implementing debug
        information for new Function types.
        
      * [From UFC] Added PODUserData for plain-old-data types
	  
==========================================================================

Version: 1.05.00 (Wyvern)
Owner:   Core Technology UI (CoreTechnologyUISupport?EASports@ea.com)
Date:    3/28/2013
CL:      395244

	New Features
	
	  * Functions may now be called using function->Call<tparams>(params) instead of EA::Types::CallFunction<tparams>(function, params)
	  * You can now do NULL checks on EABaseTypes autorefs like this (NULL != ref) or (NULL == ref)
	  * (From NBA) AutoRefBase<T>::operator== and AutoRefBase<T>::operator!= added for Win64 and other 64-bit platforms.

    Bugfixes
    
      * Fixed DumpArray Boolean printing
	  * Fixed AutoRefBase<T>::operator!= implementation for RelatedT pointers
	  
==========================================================================

Version: 1.04.00 (Velociraptor)
Owner:   Core Technology UI (CoreTechnologyUISupport?EASports@ea.com)
Date:    2/18/2013
CL:      377476

    API Changes
	
	  * The low-level EABaseTypes calling convention has been refactored to be simpler and more efficient
		---------------
		  AFFECTS	Anyone who has implemented their own Functions or their own Encoders/Decoders
		  FROM		CTUI
		  
		  DESCRIPTION
		  
			- EncoderParams have been eliminated - encoders may now take any number of constructor parameters
			- The Decode function for Decoders is now static, and must take two void*'s - the Encoder, and the DecoderParams
			- The Function::Call method now takes five parameters
				unsigned int id					The caller id, (unchanged)
				void* decoderParams				The DecoderParams for decoding the arguments, (unchanged)
				void* encoder					The Encoder for the results (replaces the EncoderParams for the results)
				DecodeFunction defaultDecode	A default DecodeFunction for decoding the arguments, takes an IEncoder virtual interface and the decoderParams above
				IEncoder* defaultEncoder		A default IEncoder for the results (should be an IEncoderImpl<Encoder> wrapping the encoder implementation above)
			- Instead of storing CallerFunctions, the CallerMap now stores pairs of DecodeFunctions, which are pointers to Decoder::Decode functions for decoding the arguments and the results
			- Callees are eliminated, as the separate DecodeFunctions for arguments and results allow the Function::Call implementations to contain the actual callsite
		  
		  ACTION REQUIRED
		  
		    - Remove all your EncoderParams and modify your encoders to take the constructor parameters of your EncoderParams
			- Turn your Decoder::Decode functions into static functions, eliminate all state from the Decoder classes
			- Re-implement any Function::Call implementations to use the new parameters, eliminating your Callees by moving their implementations into Function::Call
			- If you call Function::Call directly, you must pass the correct parameters
			- If you have code that adds to the CallerMap, you must modify it to insert DecodeFunctions instead of CallerFunctions for Callees
			- If you use EABaseTypesJson, EABaseTypesLua, EABaseTypesMessage, EABaseTypesGFx, or EABaseTypesApt, you must upgrade them to the Velociraptor versions
		---------------

	New Features

	  * Object now has get() functions when operator[] is not convenient
	  * Array now has at() functions when operator[] is not convenient
	  * String::compare now returns an int with the same behaviour as EASTL
	  
	Bugfixes
	
	  * ptruserdata.h now builds with the SN compiler ( double angle-brackets in a template without a space )

==========================================================================


Version: 1.03.00 (Unicorn)
Owner:   Core Technology UI (CoreTechnologyUISupport?EASports@ea.com)
Date:    12/14/2012
CL:      355399

    New Features
	
	  * Added UserData implementations for raw pointers, EABaseTypes AutoRefs, and 
	    SafeCom AutoRefs (http://confluence.ea.com/x/srMhCw)
		
	  * Added NativeTraits for Const BaseType reference types so they can be used in function calls

==========================================================================

Version: 1.02.00 (Tyrannosaurus Rex)
Owner:   Core Technology UI (CoreTechnologyUISupport?EASports@ea.com)
Date:    12/3/2012
CL:      348798

    New Features
	
	  * Added support for UserData
      * added optional field for data type defintions (http://confluence.ea.com/x/7pQBCw)

==========================================================================

Version: 1.01.00 (Salamander)
Owner:   Core Technology UI (CoreTechnologyUISupport?EASports@ea.com)
Date:    10/16/2012
CL:      332561

	API Changes
	
      * The EABaseTypes APIs now use SafeCom-style automatic refcounting instead of raw pointers that need to be manually AddRef()ed and Release()ed
	  * The EABaseTypes APIs for Objects and Arrays have been cleaned up to be consistent with EASTL
	  * Please see http://confluence.ea.com/display/CoreTechUI/EABaseTypes+Improvements for details and sample code

    New Features

      * Now includes a "version.h" file with version #s and version-check macros
        to allow writing code compatible with multiple versions of EABaseTypes.

    Minor Changes

      * Function base class now has protected function GetCallerFunction()
        to protect against NULL CallerMaps set in Factories.
	  * Fixed String::assign(const char*, size_t) to actually respect the length argument

    Optimizations

      * Modified Callee templates such that they are now simply structs with static
        inline functions. This improves the compiler's ability to optimize as it never
        has to instantiate a class for each Callee.
		
	Bugfixes
	
	  * EA::Types::IEncoderContext::Reset() now returns an IEncoderContext so that Reset() works for the NativeEncoder
	  * The constructor for EA::Types::Factory now asserts that required components are not NULL
	  * Fixed broken const char* constructor for non-interned Strings - from Michael Pang/UFC
	  * Added missing String::operator=() for non-interned Strings - from Walter Wong/UFC
	  * Fixed size check assert for member function pointers - from Karl Chen/UFC

==========================================================================

Version: 1.00.00 (Omnibus)
Owner:   UX (UXTech@ea.com)
Date:    7/12/2012
CL:      308412

First release using tibion_tools release-process tool, previous release notes
EABaseTypes/1.00.00/doc/release_notes.txt, additional technical documentation
available here: EABaseTypes/1.00.00/doc/doxygen/EABaseTypes-dev.chm
