| Package | Description |
|---|---|
| org.apache.ignite.internal.portable |
Contains portable APIs internal implementation.
|
| org.apache.ignite.internal.portable.api | |
| org.apache.ignite.internal.processors.cache.portable |
Implementation of portable processor.
|
| org.apache.ignite.internal.processors.platform.dotnet |
| Modifier and Type | Method and Description |
|---|---|
void |
PortableMetaDataHandler.addMeta(int typeId,
PortableMetadata meta)
Adds meta data.
|
void |
PortableContext.configure(PortableMarshaller marsh) |
PortableClassDescriptor |
PortableContext.descriptorForClass(Class<?> cls) |
<T> T |
PortableObjectImpl.deserialize()
Gets fully deserialized instance of portable object.
|
<T> T |
PortableObjectOffheapImpl.deserialize()
Gets fully deserialized instance of portable object.
|
<T> T |
GridPortableMarshaller.deserialize(byte[] arr,
ClassLoader ldr) |
void |
PortableWriterExImpl.doWriteObject(Object obj,
boolean detached) |
<F> F |
PortableObjectImpl.field(String fieldName)
Gets field value.
|
<F> F |
PortableObjectOffheapImpl.field(String fieldName)
Gets field value.
|
byte[] |
GridPortableMarshaller.marshal(Object obj,
int off) |
PortableMetadata |
PortableObjectImpl.metaData()
Gets meta data for this portable object.
|
PortableMetadata |
PortableObjectOffheapImpl.metaData()
Gets meta data for this portable object.
|
PortableMetadata |
PortableMetaDataHandler.metadata(int typeId)
Gets meta data for provided type ID.
|
PortableMetadata |
PortableContext.metaData(int typeId) |
boolean |
PortableReaderExImpl.readBoolean() |
boolean |
PortableReaderExImpl.readBoolean(String fieldName) |
boolean[] |
PortableReaderExImpl.readBooleanArray() |
boolean[] |
PortableReaderExImpl.readBooleanArray(String fieldName) |
byte |
PortableReaderExImpl.readByte() |
byte |
PortableReaderExImpl.readByte(String fieldName) |
byte[] |
PortableReaderExImpl.readByteArray() |
byte[] |
PortableReaderExImpl.readByteArray(String fieldName) |
char |
PortableReaderExImpl.readChar() |
char |
PortableReaderExImpl.readChar(String fieldName) |
char[] |
PortableReaderExImpl.readCharArray() |
char[] |
PortableReaderExImpl.readCharArray(String fieldName) |
<T> Collection<T> |
PortableReaderExImpl.readCollection() |
<T> Collection<T> |
PortableReaderExImpl.readCollection(Class<? extends Collection<T>> colCls) |
<T> Collection<T> |
PortableReaderExImpl.readCollection(String fieldName) |
<T> Collection<T> |
PortableReaderExImpl.readCollection(String fieldName,
Class<? extends Collection<T>> colCls) |
Date |
PortableReaderExImpl.readDate() |
Date |
PortableReaderExImpl.readDate(String fieldName) |
Date[] |
PortableReaderExImpl.readDateArray() |
Date[] |
PortableReaderExImpl.readDateArray(String fieldName) |
BigDecimal |
PortableReaderExImpl.readDecimal() |
BigDecimal |
PortableReaderExImpl.readDecimal(String fieldName) |
BigDecimal[] |
PortableReaderExImpl.readDecimalArray() |
BigDecimal[] |
PortableReaderExImpl.readDecimalArray(String fieldName) |
double |
PortableReaderExImpl.readDouble() |
double |
PortableReaderExImpl.readDouble(String fieldName) |
double[] |
PortableReaderExImpl.readDoubleArray() |
double[] |
PortableReaderExImpl.readDoubleArray(String fieldName) |
<T extends Enum<?>> |
PortableReaderExImpl.readEnum() |
<T extends Enum<?>> |
PortableReaderExImpl.readEnum(String fieldName) |
<T extends Enum<?>> |
PortableReaderExImpl.readEnumArray() |
<T extends Enum<?>> |
PortableReaderExImpl.readEnumArray(String fieldName) |
float |
PortableReaderExImpl.readFloat() |
float |
PortableReaderExImpl.readFloat(String fieldName) |
float[] |
PortableReaderExImpl.readFloatArray() |
float[] |
PortableReaderExImpl.readFloatArray(String fieldName) |
int |
PortableReaderExImpl.readInt() |
int |
PortableReaderExImpl.readInt(String fieldName) |
int[] |
PortableReaderExImpl.readIntArray() |
int[] |
PortableReaderExImpl.readIntArray(String fieldName) |
long |
PortableReaderExImpl.readLong() |
long |
PortableReaderExImpl.readLong(String fieldName) |
long[] |
PortableReaderExImpl.readLongArray() |
long[] |
PortableReaderExImpl.readLongArray(String fieldName) |
<K,V> Map<K,V> |
PortableReaderExImpl.readMap() |
<K,V> Map<K,V> |
PortableReaderExImpl.readMap(Class<? extends Map<K,V>> mapCls) |
<K,V> Map<K,V> |
PortableReaderExImpl.readMap(String fieldName) |
<K,V> Map<K,V> |
PortableReaderExImpl.readMap(String fieldName,
Class<? extends Map<K,V>> mapCls) |
Object |
PortableReaderExImpl.readObject() |
<T> T |
PortableReaderExImpl.readObject(String fieldName) |
Object[] |
PortableReaderExImpl.readObjectArray() |
Object[] |
PortableReaderExImpl.readObjectArray(String fieldName) |
Object |
PortableReaderExImpl.readObjectDetached() |
Object |
PortableRawReaderEx.readObjectDetached() |
void |
PortableMetaDataImpl.readPortable(PortableReader reader)
Reads fields from provided reader.
|
short |
PortableReaderExImpl.readShort() |
short |
PortableReaderExImpl.readShort(String fieldName) |
short[] |
PortableReaderExImpl.readShortArray() |
short[] |
PortableReaderExImpl.readShortArray(String fieldName) |
String |
PortableReaderExImpl.readString() |
String |
PortableReaderExImpl.readString(String fieldName) |
String[] |
PortableReaderExImpl.readStringArray() |
String[] |
PortableReaderExImpl.readStringArray(String fieldName) |
Timestamp |
PortableReaderExImpl.readTimestamp() |
Timestamp |
PortableReaderExImpl.readTimestamp(String fieldName) |
UUID |
PortableReaderExImpl.readUuid() |
UUID |
PortableReaderExImpl.readUuid(String fieldName) |
UUID[] |
PortableReaderExImpl.readUuidArray() |
UUID[] |
PortableReaderExImpl.readUuidArray(String fieldName) |
void |
PortableContext.registerUserType(String clsName,
PortableIdMapper idMapper,
PortableSerializer serializer,
String affKeyFieldName,
boolean useTs,
boolean metaDataEnabled,
boolean keepDeserialized) |
<T> T |
GridPortableMarshaller.unmarshal(byte[] bytes,
ClassLoader clsLdr) |
Object |
PortableReaderExImpl.unmarshal(int offset) |
<T> T |
GridPortableMarshaller.unmarshal(PortableInputStream in) |
void |
PortableContext.updateMetaData(int typeId,
PortableMetaDataImpl meta) |
void |
PortableContext.updateMetaData(int typeId,
String typeName,
Map<String,String> fields) |
void |
PortableWriterExImpl.writeBoolean(boolean val) |
void |
PortableWriterExImpl.writeBoolean(String fieldName,
boolean val) |
void |
PortableWriterExImpl.writeBooleanArray(boolean[] val) |
void |
PortableWriterExImpl.writeBooleanArray(String fieldName,
boolean[] val) |
void |
PortableWriterExImpl.writeByte(byte val) |
void |
PortableWriterExImpl.writeByte(String fieldName,
byte val) |
void |
PortableWriterExImpl.writeByteArray(byte[] val) |
void |
PortableWriterExImpl.writeByteArray(String fieldName,
byte[] val) |
void |
PortableWriterExImpl.writeChar(char val) |
void |
PortableWriterExImpl.writeChar(String fieldName,
char val) |
void |
PortableWriterExImpl.writeCharArray(char[] val) |
void |
PortableWriterExImpl.writeCharArray(String fieldName,
char[] val) |
<T> void |
PortableWriterExImpl.writeCollection(Collection<T> col) |
<T> void |
PortableWriterExImpl.writeCollection(String fieldName,
Collection<T> col) |
void |
PortableWriterExImpl.writeDate(Date val) |
void |
PortableWriterExImpl.writeDate(String fieldName,
Date val) |
void |
PortableWriterExImpl.writeDateArray(Date[] val) |
void |
PortableWriterExImpl.writeDateArray(String fieldName,
Date[] val) |
void |
PortableWriterExImpl.writeDecimal(BigDecimal val) |
void |
PortableWriterExImpl.writeDecimal(String fieldName,
BigDecimal val) |
void |
PortableWriterExImpl.writeDecimalArray(BigDecimal[] val) |
void |
PortableWriterExImpl.writeDecimalArray(String fieldName,
BigDecimal[] val) |
void |
PortableWriterExImpl.writeDouble(double val) |
void |
PortableWriterExImpl.writeDouble(String fieldName,
double val) |
void |
PortableWriterExImpl.writeDoubleArray(double[] val) |
void |
PortableWriterExImpl.writeDoubleArray(String fieldName,
double[] val) |
<T extends Enum<?>> |
PortableWriterExImpl.writeEnum(String fieldName,
T val) |
<T extends Enum<?>> |
PortableWriterExImpl.writeEnum(T val) |
<T extends Enum<?>> |
PortableWriterExImpl.writeEnumArray(String fieldName,
T[] val) |
<T extends Enum<?>> |
PortableWriterExImpl.writeEnumArray(T[] val) |
void |
PortableWriterExImpl.writeFloat(float val) |
void |
PortableWriterExImpl.writeFloat(String fieldName,
float val) |
void |
PortableWriterExImpl.writeFloatArray(float[] val) |
void |
PortableWriterExImpl.writeFloatArray(String fieldName,
float[] val) |
void |
PortableWriterExImpl.writeInt(int val) |
void |
PortableWriterExImpl.writeInt(int pos,
int val)
Write int value at the specific position.
|
void |
PortableRawWriterEx.writeInt(int pos,
int val)
Write int value at the specific position.
|
void |
PortableWriterExImpl.writeInt(String fieldName,
int val) |
void |
PortableWriterExImpl.writeIntArray(int[] val) |
void |
PortableWriterExImpl.writeIntArray(String fieldName,
int[] val) |
void |
PortableWriterExImpl.writeLong(long val) |
void |
PortableWriterExImpl.writeLong(String fieldName,
long val) |
void |
PortableWriterExImpl.writeLongArray(long[] val) |
void |
PortableWriterExImpl.writeLongArray(String fieldName,
long[] val) |
<K,V> void |
PortableWriterExImpl.writeMap(Map<K,V> map) |
<K,V> void |
PortableWriterExImpl.writeMap(String fieldName,
Map<K,V> map) |
void |
PortableWriterExImpl.writeObject(Object obj) |
void |
PortableWriterExImpl.writeObject(String fieldName,
Object obj) |
void |
PortableWriterExImpl.writeObjectArray(Object[] val) |
void |
PortableWriterExImpl.writeObjectArray(String fieldName,
Object[] val) |
void |
PortableWriterExImpl.writeObjectDetached(Object obj) |
void |
PortableRawWriterEx.writeObjectDetached(Object obj) |
void |
PortableMetaDataImpl.writePortable(PortableWriter writer)
Writes fields to provided writer.
|
void |
PortableWriterExImpl.writeShort(short val) |
void |
PortableWriterExImpl.writeShort(String fieldName,
short val) |
void |
PortableWriterExImpl.writeShortArray(short[] val) |
void |
PortableWriterExImpl.writeShortArray(String fieldName,
short[] val) |
void |
PortableWriterExImpl.writeString(String val) |
void |
PortableWriterExImpl.writeString(String fieldName,
String val) |
void |
PortableWriterExImpl.writeStringArray(String[] val) |
void |
PortableWriterExImpl.writeStringArray(String fieldName,
String[] val) |
void |
PortableWriterExImpl.writeTimestamp(String fieldName,
Timestamp val) |
void |
PortableWriterExImpl.writeTimestamp(Timestamp val) |
void |
PortableWriterExImpl.writeUuid(String fieldName,
UUID val) |
void |
PortableWriterExImpl.writeUuid(UUID val) |
void |
PortableWriterExImpl.writeUuidArray(String fieldName,
UUID[] val) |
void |
PortableWriterExImpl.writeUuidArray(UUID[] val) |
| Modifier and Type | Class and Description |
|---|---|
class |
PortableInvalidClassException
Exception indicating that class needed for deserialization of portable object does not exist.
|
| Modifier and Type | Method and Description |
|---|---|
PortableObject |
PortableBuilder.build()
Builds portable object.
|
<T> T |
PortableObject.deserialize()
Gets fully deserialized instance of portable object.
|
<F> F |
PortableObject.field(String fieldName)
Gets field value.
|
Collection<PortableMetadata> |
IgnitePortables.metadata()
Gets metadata for all known types.
|
PortableMetadata |
PortableObject.metaData()
Gets meta data for this portable object.
|
PortableMetadata |
IgnitePortables.metadata(Class<?> cls)
Gets metadata for provided class.
|
PortableMetadata |
IgnitePortables.metadata(int typeId)
Gets metadata for provided type ID.
|
PortableMetadata |
IgnitePortables.metadata(String typeName)
Gets metadata for provided class name.
|
boolean |
PortableRawReader.readBoolean() |
boolean |
PortableReader.readBoolean(String fieldName) |
boolean[] |
PortableRawReader.readBooleanArray() |
boolean[] |
PortableReader.readBooleanArray(String fieldName) |
byte |
PortableRawReader.readByte() |
byte |
PortableReader.readByte(String fieldName) |
byte[] |
PortableRawReader.readByteArray() |
byte[] |
PortableReader.readByteArray(String fieldName) |
char |
PortableRawReader.readChar() |
char |
PortableReader.readChar(String fieldName) |
char[] |
PortableRawReader.readCharArray() |
char[] |
PortableReader.readCharArray(String fieldName) |
<T> Collection<T> |
PortableRawReader.readCollection() |
<T> Collection<T> |
PortableRawReader.readCollection(Class<? extends Collection<T>> colCls) |
<T> Collection<T> |
PortableReader.readCollection(String fieldName) |
<T> Collection<T> |
PortableReader.readCollection(String fieldName,
Class<? extends Collection<T>> colCls) |
Date |
PortableRawReader.readDate() |
Date |
PortableReader.readDate(String fieldName) |
Date[] |
PortableRawReader.readDateArray() |
Date[] |
PortableReader.readDateArray(String fieldName) |
BigDecimal |
PortableRawReader.readDecimal() |
BigDecimal |
PortableReader.readDecimal(String fieldName) |
BigDecimal[] |
PortableRawReader.readDecimalArray() |
BigDecimal[] |
PortableReader.readDecimalArray(String fieldName) |
double |
PortableRawReader.readDouble() |
double |
PortableReader.readDouble(String fieldName) |
double[] |
PortableRawReader.readDoubleArray() |
double[] |
PortableReader.readDoubleArray(String fieldName) |
<T extends Enum<?>> |
PortableRawReader.readEnum() |
<T extends Enum<?>> |
PortableReader.readEnum(String fieldName) |
<T extends Enum<?>> |
PortableRawReader.readEnumArray() |
<T extends Enum<?>> |
PortableReader.readEnumArray(String fieldName) |
float |
PortableRawReader.readFloat() |
float |
PortableReader.readFloat(String fieldName) |
float[] |
PortableRawReader.readFloatArray() |
float[] |
PortableReader.readFloatArray(String fieldName) |
int |
PortableRawReader.readInt() |
int |
PortableReader.readInt(String fieldName) |
int[] |
PortableRawReader.readIntArray() |
int[] |
PortableReader.readIntArray(String fieldName) |
long |
PortableRawReader.readLong() |
long |
PortableReader.readLong(String fieldName) |
long[] |
PortableRawReader.readLongArray() |
long[] |
PortableReader.readLongArray(String fieldName) |
<K,V> Map<K,V> |
PortableRawReader.readMap() |
<K,V> Map<K,V> |
PortableRawReader.readMap(Class<? extends Map<K,V>> mapCls) |
<K,V> Map<K,V> |
PortableReader.readMap(String fieldName) |
<K,V> Map<K,V> |
PortableReader.readMap(String fieldName,
Class<? extends Map<K,V>> mapCls) |
<T> T |
PortableRawReader.readObject() |
<T> T |
PortableReader.readObject(String fieldName) |
Object[] |
PortableRawReader.readObjectArray() |
Object[] |
PortableReader.readObjectArray(String fieldName) |
void |
PortableSerializer.readPortable(Object obj,
PortableReader reader)
Reads fields from provided reader.
|
void |
PortableMarshalAware.readPortable(PortableReader reader)
Reads fields from provided reader.
|
short |
PortableRawReader.readShort() |
short |
PortableReader.readShort(String fieldName) |
short[] |
PortableRawReader.readShortArray() |
short[] |
PortableReader.readShortArray(String fieldName) |
String |
PortableRawReader.readString() |
String |
PortableReader.readString(String fieldName) |
String[] |
PortableRawReader.readStringArray() |
String[] |
PortableReader.readStringArray(String fieldName) |
Timestamp |
PortableRawReader.readTimestamp() |
Timestamp |
PortableReader.readTimestamp(String fieldName) |
UUID |
PortableRawReader.readUuid() |
UUID |
PortableReader.readUuid(String fieldName) |
UUID[] |
PortableRawReader.readUuidArray() |
UUID[] |
PortableReader.readUuidArray(String fieldName) |
<T> T |
IgnitePortables.toPortable(Object obj)
Converts provided object to instance of
PortableObject. |
void |
PortableRawWriter.writeBoolean(boolean val) |
void |
PortableWriter.writeBoolean(String fieldName,
boolean val) |
void |
PortableRawWriter.writeBooleanArray(boolean[] val) |
void |
PortableWriter.writeBooleanArray(String fieldName,
boolean[] val) |
void |
PortableRawWriter.writeByte(byte val) |
void |
PortableWriter.writeByte(String fieldName,
byte val) |
void |
PortableRawWriter.writeByteArray(byte[] val) |
void |
PortableWriter.writeByteArray(String fieldName,
byte[] val) |
void |
PortableRawWriter.writeChar(char val) |
void |
PortableWriter.writeChar(String fieldName,
char val) |
void |
PortableRawWriter.writeCharArray(char[] val) |
void |
PortableWriter.writeCharArray(String fieldName,
char[] val) |
<T> void |
PortableRawWriter.writeCollection(Collection<T> col) |
<T> void |
PortableWriter.writeCollection(String fieldName,
Collection<T> col) |
void |
PortableRawWriter.writeDate(Date val) |
void |
PortableWriter.writeDate(String fieldName,
Date val) |
void |
PortableRawWriter.writeDateArray(Date[] val) |
void |
PortableWriter.writeDateArray(String fieldName,
Date[] val) |
void |
PortableRawWriter.writeDecimal(BigDecimal val) |
void |
PortableWriter.writeDecimal(String fieldName,
BigDecimal val) |
void |
PortableRawWriter.writeDecimalArray(BigDecimal[] val) |
void |
PortableWriter.writeDecimalArray(String fieldName,
BigDecimal[] val) |
void |
PortableRawWriter.writeDouble(double val) |
void |
PortableWriter.writeDouble(String fieldName,
double val) |
void |
PortableRawWriter.writeDoubleArray(double[] val) |
void |
PortableWriter.writeDoubleArray(String fieldName,
double[] val) |
<T extends Enum<?>> |
PortableWriter.writeEnum(String fieldName,
T val) |
<T extends Enum<?>> |
PortableRawWriter.writeEnum(T val) |
<T extends Enum<?>> |
PortableWriter.writeEnumArray(String fieldName,
T[] val) |
<T extends Enum<?>> |
PortableRawWriter.writeEnumArray(T[] val) |
void |
PortableRawWriter.writeFloat(float val) |
void |
PortableWriter.writeFloat(String fieldName,
float val) |
void |
PortableRawWriter.writeFloatArray(float[] val) |
void |
PortableWriter.writeFloatArray(String fieldName,
float[] val) |
void |
PortableRawWriter.writeInt(int val) |
void |
PortableWriter.writeInt(String fieldName,
int val) |
void |
PortableRawWriter.writeIntArray(int[] val) |
void |
PortableWriter.writeIntArray(String fieldName,
int[] val) |
void |
PortableRawWriter.writeLong(long val) |
void |
PortableWriter.writeLong(String fieldName,
long val) |
void |
PortableRawWriter.writeLongArray(long[] val) |
void |
PortableWriter.writeLongArray(String fieldName,
long[] val) |
<K,V> void |
PortableRawWriter.writeMap(Map<K,V> map) |
<K,V> void |
PortableWriter.writeMap(String fieldName,
Map<K,V> map) |
void |
PortableRawWriter.writeObject(Object obj) |
void |
PortableWriter.writeObject(String fieldName,
Object obj) |
void |
PortableRawWriter.writeObjectArray(Object[] val) |
void |
PortableWriter.writeObjectArray(String fieldName,
Object[] val) |
void |
PortableSerializer.writePortable(Object obj,
PortableWriter writer)
Writes fields to provided writer.
|
void |
PortableMarshalAware.writePortable(PortableWriter writer)
Writes fields to provided writer.
|
void |
PortableRawWriter.writeShort(short val) |
void |
PortableWriter.writeShort(String fieldName,
short val) |
void |
PortableRawWriter.writeShortArray(short[] val) |
void |
PortableWriter.writeShortArray(String fieldName,
short[] val) |
void |
PortableRawWriter.writeString(String val) |
void |
PortableWriter.writeString(String fieldName,
String val) |
void |
PortableRawWriter.writeStringArray(String[] val) |
void |
PortableWriter.writeStringArray(String fieldName,
String[] val) |
void |
PortableWriter.writeTimestamp(String fieldName,
Timestamp val) |
void |
PortableRawWriter.writeTimestamp(Timestamp val) |
void |
PortableWriter.writeUuid(String fieldName,
UUID val) |
void |
PortableRawWriter.writeUuid(UUID val) |
void |
PortableWriter.writeUuidArray(String fieldName,
UUID[] val) |
void |
PortableRawWriter.writeUuidArray(UUID[] val) |
| Modifier and Type | Method and Description |
|---|---|
void |
CacheObjectPortableProcessorImpl.addMeta(int typeId,
PortableMetadata newMeta) |
byte[] |
CacheObjectPortableProcessorImpl.marshal(Object obj) |
Object |
CacheObjectPortableProcessorImpl.marshalToPortable(Object obj) |
Collection<PortableMetadata> |
IgnitePortablesImpl.metadata()
Gets metadata for all known types.
|
Collection<PortableMetadata> |
CacheObjectPortableProcessorImpl.metadata() |
PortableMetadata |
IgnitePortablesImpl.metadata(Class<?> cls)
Gets metadata for provided class.
|
Map<Integer,PortableMetadata> |
CacheObjectPortableProcessorImpl.metadata(Collection<Integer> typeIds) |
PortableMetadata |
IgnitePortablesImpl.metadata(int typeId)
Gets metadata for provided type ID.
|
PortableMetadata |
CacheObjectPortableProcessorImpl.metadata(int typeId) |
PortableMetadata |
IgnitePortablesImpl.metadata(String typeName)
Gets metadata for provided class name.
|
<T> T |
IgnitePortablesImpl.toPortable(Object obj)
Converts provided object to instance of
PortableObject. |
Object |
CacheObjectPortableProcessorImpl.unmarshal(long ptr,
boolean forceHeap) |
Object |
CacheObjectPortableProcessorImpl.unwrapTemporary(GridCacheContext ctx,
Object obj)
Converts temporary off-heap object to heap-based.
|
void |
CacheObjectPortableProcessorImpl.updateMetaData(int typeId,
String typeName,
String affKeyFieldName,
Map<String,Integer> fieldTypeIds) |
| Modifier and Type | Method and Description |
|---|---|
void |
PlatformDotNetPortableConfiguration.readPortable(PortableReader reader)
Reads fields from provided reader.
|
void |
PlatformDotNetConfiguration.readPortable(PortableReader reader)
Reads fields from provided reader.
|
void |
PlatformDotNetPortableTypeConfiguration.readPortable(PortableReader reader)
Reads fields from provided reader.
|
void |
PlatformDotNetPortableConfiguration.writePortable(PortableWriter writer)
Writes fields to provided writer.
|
void |
PlatformDotNetConfiguration.writePortable(PortableWriter writer)
Writes fields to provided writer.
|
void |
PlatformDotNetPortableTypeConfiguration.writePortable(PortableWriter writer)
Writes fields to provided writer.
|
Follow @ApacheIgnite
Ignite Fabric : ver. 1.4.0 Release Date : September 24 2015