/*
* Copyright (C) 2015, 2016 higherfrequencytrading.com
* Copyright (C) 2016 Roman Leventov
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package net.openhft.chronicle.values;
import com.squareup.javapoet.MethodSpec;
abstract class MemberGenerator {
final FieldModel fieldModel;
protected MemberGenerator(FieldModel fieldModel) {
this.fieldModel = fieldModel;
}
private Class<? extends FieldModel> fieldModelClass() {
return fieldModel.getClass();
}
void generateFields(ValueBuilder valueBuilder) {
// do nothing by default
}
void generateArrayElementFields(ArrayFieldModel arrayFieldModel, ValueBuilder valueBuilder) {
throw new UnsupportedOperationException(fieldModelClass() + "");
}
void generateGet(ValueBuilder valueBuilder, MethodSpec.Builder methodBuilder) {
throw new UnsupportedOperationException(fieldModelClass() + "");
}
void generateArrayElementGet(
ArrayFieldModel arrayFieldModel, ValueBuilder valueBuilder,
MethodSpec.Builder methodBuilder) {
throw new UnsupportedOperationException(fieldModelClass() + "");
}
void generateGetVolatile(ValueBuilder valueBuilder, MethodSpec.Builder methodBuilder) {
throw new UnsupportedOperationException(fieldModelClass() + "");
}
void generateArrayElementGetVolatile(
ArrayFieldModel arrayFieldModel, ValueBuilder valueBuilder,
MethodSpec.Builder methodBuilder) {
throw new UnsupportedOperationException(fieldModelClass() + "");
}
void generateGetUsing(ValueBuilder valueBuilder, MethodSpec.Builder methodBuilder) {
throw new UnsupportedOperationException(fieldModelClass() + "");
}
void generateArrayElementGetUsing(
ArrayFieldModel arrayFieldModel, ValueBuilder valueBuilder,
MethodSpec.Builder methodBuilder) {
throw new UnsupportedOperationException(fieldModelClass() + "");
}
void generateSet(ValueBuilder valueBuilder, MethodSpec.Builder methodBuilder) {
throw new UnsupportedOperationException(fieldModelClass() + "");
}
void generateArrayElementSet(
ArrayFieldModel arrayFieldModel, ValueBuilder valueBuilder,
MethodSpec.Builder methodBuilder) {
throw new UnsupportedOperationException(fieldModelClass() + "");
}
void generateSetVolatile(ValueBuilder valueBuilder, MethodSpec.Builder methodBuilder) {
throw new UnsupportedOperationException(fieldModelClass() + "");
}
void generateArrayElementSetVolatile(
ArrayFieldModel arrayFieldModel, ValueBuilder valueBuilder,
MethodSpec.Builder methodBuilder) {
throw new UnsupportedOperationException(fieldModelClass() + "");
}
void generateSetOrdered(ValueBuilder valueBuilder, MethodSpec.Builder methodBuilder) {
throw new UnsupportedOperationException(fieldModelClass() + "");
}
void generateArrayElementSetOrdered(
ArrayFieldModel arrayFieldModel, ValueBuilder valueBuilder,
MethodSpec.Builder methodBuilder) {
throw new UnsupportedOperationException(fieldModelClass() + "");
}
void generateAdd(ValueBuilder valueBuilder, MethodSpec.Builder methodBuilder) {
throw new UnsupportedOperationException(fieldModelClass() + "");
}
void generateArrayElementAdd(
ArrayFieldModel arrayFieldModel, ValueBuilder valueBuilder,
MethodSpec.Builder methodBuilder) {
throw new UnsupportedOperationException(fieldModelClass() + "");
}
void generateAddAtomic(ValueBuilder valueBuilder, MethodSpec.Builder methodBuilder) {
throw new UnsupportedOperationException(fieldModelClass() + "");
}
void generateArrayElementAddAtomic(
ArrayFieldModel arrayFieldModel, ValueBuilder valueBuilder,
MethodSpec.Builder methodBuilder) {
throw new UnsupportedOperationException(fieldModelClass() + "");
}
void generateCompareAndSwap(
ValueBuilder valueBuilder, MethodSpec.Builder methodBuilder) {
throw new UnsupportedOperationException(fieldModelClass() + "");
}
void generateArrayElementCompareAndSwap(
ArrayFieldModel arrayFieldModel, ValueBuilder valueBuilder,
MethodSpec.Builder methodBuilder) {
throw new UnsupportedOperationException(fieldModelClass() + "");
}
void generateCopyFrom(ValueBuilder valueBuilder, MethodSpec.Builder methodBuilder) {
throw new UnsupportedOperationException(fieldModelClass() + "");
}
void generateArrayElementCopyFrom(
ArrayFieldModel arrayFieldModel, ValueBuilder valueBuilder,
MethodSpec.Builder methodBuilder) {
throw new UnsupportedOperationException(fieldModelClass() + "");
}
void generateWriteMarshallable(ValueBuilder valueBuilder, MethodSpec.Builder methodBuilder) {
methodBuilder.addStatement("bytes.$N($N())",
fieldModel.writeMethod(), fieldModel.getOrGetVolatile().getName());
}
void generateArrayElementWriteMarshallable(
ArrayFieldModel arrayFieldModel, ValueBuilder valueBuilder,
MethodSpec.Builder methodBuilder) {
methodBuilder.addStatement("bytes.$N($N(index))",
fieldModel.writeMethod(), arrayFieldModel.getOrGetVolatile().getName());
}
void generateReadMarshallable(ValueBuilder valueBuilder, MethodSpec.Builder methodBuilder) {
throw new UnsupportedOperationException(fieldModelClass() + "");
}
void generateArrayElementReadMarshallable(
ArrayFieldModel arrayFieldModel, ValueBuilder valueBuilder,
MethodSpec.Builder methodBuilder) {
throw new UnsupportedOperationException(fieldModelClass() + "");
}
void generateEquals(ValueBuilder valueBuilder, MethodSpec.Builder methodBuilder) {
throw new UnsupportedOperationException(fieldModelClass() + "");
}
void generateArrayElementEquals(
ArrayFieldModel arrayFieldModel, ValueBuilder valueBuilder,
MethodSpec.Builder methodBuilder) {
throw new UnsupportedOperationException(fieldModelClass() + "");
}
String generateHashCode(ValueBuilder valueBuilder, MethodSpec.Builder methodBuilder) {
throw new UnsupportedOperationException(fieldModelClass() + "");
}
String generateArrayElementHashCode(
ArrayFieldModel arrayFieldModel, ValueBuilder valueBuilder,
MethodSpec.Builder methodBuilder) {
throw new UnsupportedOperationException(fieldModelClass() + "");
}
void generateToString(ValueBuilder valueBuilder, MethodSpec.Builder methodBuilder) {
genToString(methodBuilder, fieldModel.getOrGetVolatile().getName() + "()");
}
final void genToString(MethodSpec.Builder methodBuilder, String value) {
methodBuilder.addStatement("sb.append($S).append($N)",
", " + fieldModel.name + "=", value);
}
void generateArrayElementToString(
ArrayFieldModel arrayFieldModel, ValueBuilder valueBuilder,
MethodSpec.Builder methodBuilder) {
genArrayElementToString(methodBuilder,
arrayFieldModel.getOrGetVolatile().getName() + "(index)");
}
final void genArrayElementToString(MethodSpec.Builder methodBuilder, String value) {
methodBuilder.addStatement("sb.append($N).append(',').append(' ')", value);
}
}