blob: fb1a4d6395ab0b0580ae619f9248a250f220b99a [file] [log] [blame]
/* $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.
*/
#ifndef __ETCHARRAYVALUE_H__
#define __ETCHARRAYVALUE_H__
#include "common/EtchObject.h"
#include "common/EtchNativeArray.h"
#include "serialization/EtchType.h"
/**
* An array of values, where each value is of arbitrary type
* chosen from the basic types boolean, byte, short, int,
* long, float, double, String, an array of those, the extended
* types ArrayValue and StructValue, and specific types supported
* by ValueFactory.
*
* ArrayValue is not protected against concurrent access.
*/
class EtchArrayValue : public EtchObject {
public:
/**
* TypeId for ArrayValue.
*/
static const EtchObjectType* TYPE();
/**
* Constructs the ArrayValue.
* @param array
* @param size
* @param dim
* @param customStructType
* @param typeCode
*
*/
EtchArrayValue(capu::SmartPointer<EtchNativeArrayBase> array, capu::int32_t size, capu::int8_t typeCode, EtchType* customStructType, capu::int32_t dim);
/**
* Constructs an array value with no type info. This is used perhaps
* by extern struct serializers.
* @param array
* @param size
*/
EtchArrayValue(capu::SmartPointer<EtchNativeArrayBase> array, capu::int32_t size);
/**
* Constructs an array value copy with no type info. This is used perhaps
* by extern struct serializers.
* @param other Array Value
*/
EtchArrayValue(const EtchArrayValue& other);
virtual ~EtchArrayValue();
/**
* @return the TypeCode for this array value.
* For example, if the array is int[][], then
* the type would be TypeCode.INT4.
*/
capu::int8_t getTypeCode();
/**
* @return a struct type if a custom type code.
*/
EtchType* getCustomStructType();
/**
* @return the dimsionality of the array.
* For example, if the array is int[][], the
* dimensionality would be 2.
*/
capu::int32_t getDim();
/**
* @return the capacity of the array.
*/
capu::uint32_t getSize();
/**
* @return the number of elements in the array.
*/
capu::int32_t getIndex();
/**
* @return the number of elements in the array.
*/
void setIndex(capu::int32_t val);
/**
* @return true if two object is equal
* false otherwise
*/
virtual capu::bool_t equals(const EtchObject * other) const;
/**
* @param index
* @return the element at the specified index.
*/
status_t get(capu::uint32_t index, capu::SmartPointer<EtchObject> &result);
/**
* Adds the value to the end of the array, making more space
* available if needed.
* @param value
*/
status_t add(capu::SmartPointer<EtchObject> value);
/**
* @return the array value.
*/
capu::SmartPointer<EtchNativeArrayBase> getArray();
private:
capu::SmartPointer<EtchNativeArrayBase> mArray;
capu::int8_t mTypeCode;
EtchType* mCustomStructType;
capu::int32_t mDim;
capu::int32_t mAddIndex;
capu::int32_t mSize;
};
#endif /* ETCHARRAYVALUE_H */