/** * allocate open part value pointable * * @param typeTag * @return the pointable object */ public IVisitablePointable allocateFieldValue(ATypeTag typeTag, byte[] b, int offset) throws AsterixException { if (typeTag == null) return flatValueAllocator.allocate(null); else if (typeTag.equals(ATypeTag.RECORD)) return recordValueAllocator.allocate(DefaultOpenFieldType.NESTED_OPEN_RECORD_TYPE); else if (typeTag.equals(ATypeTag.UNORDEREDLIST)) { ATypeTag listItemType = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(b[offset]); if (listItemType == ATypeTag.ANY) return listValueAllocator.allocate(DefaultOpenFieldType.NESTED_OPEN_AUNORDERED_LIST_TYPE); else { if (listItemType.isDerivedType()) return allocateFieldValue(listItemType, b, offset + 1); else return listValueAllocator.allocate( unorederedListTypeAllocator.allocate(TypeTagUtil.getBuiltinTypeByTag(listItemType))); } } else if (typeTag.equals(ATypeTag.ORDEREDLIST)) { ATypeTag listItemType = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(b[offset]); if (listItemType == ATypeTag.ANY) return listValueAllocator.allocate(DefaultOpenFieldType.NESTED_OPEN_AORDERED_LIST_TYPE); else { if (listItemType.isDerivedType()) return allocateFieldValue(listItemType, b, offset + 1); else return listValueAllocator.allocate( orederedListTypeAllocator.allocate(TypeTagUtil.getBuiltinTypeByTag(listItemType))); } } else return flatValueAllocator.allocate(null); }