| #pragma once |
| |
| #ifndef GEODE_GFCPP_DELTA_H_ |
| #define GEODE_GFCPP_DELTA_H_ |
| |
| |
| /* |
| * 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. |
| */ |
| |
| /** |
| * @file |
| */ |
| |
| #include "Cacheable.hpp" |
| #include "DataInput.hpp" |
| #include "DataOutput.hpp" |
| namespace apache { |
| namespace geode { |
| namespace client { |
| |
| /** |
| * This interface is used for delta propagation. |
| * To use delta propagation, an application class must derive from <code>class |
| * Delta</code> as well as <code>class Cacheable</code> publicly. |
| * The methods <code>hasDelta( ), toDelta( )</code> and <code>fromDelta( |
| * )</code> must be implemented by the class, as these methods are used by |
| * Geode |
| * to detect the presence of delta in an object, to serialize the delta, and to |
| * apply a serialized delta to an existing object |
| * of the class. |
| */ |
| |
| class Delta { |
| public: |
| /** |
| * <code>hasDelta( )</code> is invoked by Geode during <code>Region::put( |
| * CacheableKeyPtr, CacheablePtr )</code> to determine if the object contains |
| * a delta. |
| * If <code>hasDelta( )</code> returns true, the delta in the object is |
| * serialized by invoking <code>Delta::toDelta( DataOutput& )</code>. |
| * If <code>hasDelta( )</code> returns false, the object is serialized by |
| * invoking <code>Cacheable::toData( DataOutput& )</code>. |
| */ |
| virtual bool hasDelta() = 0; |
| |
| /** |
| * Writes out delta information to out in a user-defined format. This is |
| * invoked on an application object after Geode determines the presence |
| * of delta in it by calling <code>hasDelta()</code> on the object. |
| * |
| * @throws IOException |
| */ |
| virtual void toDelta(DataOutput& out) const = 0; |
| |
| /** |
| * Reads in delta information to this object in a user-defined format. This is |
| * invoked on an existing application object after Geode determines the |
| * presence of delta in <code>DataInput</code> instance. |
| * |
| * @throws IOException |
| * @throws InvalidDeltaException if the delta in the <code>DataInput</code> |
| * instance cannot be applied |
| * to this instance (possible causes may include mismatch of Delta version or |
| * logic error). |
| */ |
| virtual void fromDelta(DataInput& in) = 0; |
| |
| /** |
| * Creates a copy of the object on which delta is to be applied via |
| * notification. |
| * The region attribute for cloning must be set to 'true' in order to enable |
| * cloning. |
| * The default implementation of this method creates an object clone by first |
| * serializing the object into |
| * a buffer, then deserializing from the buffer thus creating a clone of the |
| * original. |
| */ |
| virtual DeltaPtr clone(); |
| |
| virtual ~Delta() {} |
| }; |
| } // namespace client |
| } // namespace geode |
| } // namespace apache |
| |
| |
| #endif // GEODE_GFCPP_DELTA_H_ |