blob: 04bfeabc1279524d71ad0dac898b673236505c0d [file] [log] [blame]
// Copyright 2014 Google Inc. All Rights Reserved.
// Licensed 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
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.
#include "base/compiler_specific.h"
namespace cobalt {
namespace cssom {
class AbsoluteURLValue;
class CalcValue;
class FilterFunctionListValue;
class FontStyleValue;
class FontWeightValue;
class IntegerValue;
class KeywordValue;
class LengthValue;
class LinearGradientValue;
class LocalSrcValue;
class MediaFeatureKeywordValue;
class NumberValue;
class PercentageValue;
class PropertyKeyListValue;
class PropertyListValue;
class PropertyValue;
class RadialGradientValue;
class RatioValue;
class ResolutionValue;
class RGBAColorValue;
class ShadowValue;
class StringValue;
class TimeListValue;
class TimingFunctionListValue;
class TransformFunctionListValue;
class TransformMatrixFunctionValue;
class UnicodeRangeValue;
class URLValue;
class UrlSrcValue;
// Type-safe branching on a class hierarchy of CSS property values,
// implemented after a classical GoF pattern (see
class PropertyValueVisitor {
virtual void VisitAbsoluteURL(AbsoluteURLValue* url_value) = 0;
virtual void VisitCalc(CalcValue* calc_value) = 0;
virtual void VisitFilterFunctionList(FilterFunctionListValue*) = 0;
virtual void VisitFontStyle(FontStyleValue* font_style_value) = 0;
virtual void VisitFontWeight(FontWeightValue* font_weight_value) = 0;
virtual void VisitInteger(IntegerValue* integer_value) = 0;
virtual void VisitKeyword(KeywordValue* keyword_value) = 0;
virtual void VisitLength(LengthValue* length_value) = 0;
virtual void VisitLinearGradient(
LinearGradientValue* linear_gradient_value) = 0;
virtual void VisitLocalSrc(LocalSrcValue* local_src_value) = 0;
virtual void VisitMediaFeatureKeywordValue(
MediaFeatureKeywordValue* media_feature_keyword_value) = 0;
virtual void VisitNumber(NumberValue* number_value) = 0;
virtual void VisitPercentage(PercentageValue* percentage_value) = 0;
virtual void VisitPropertyKeyList(
PropertyKeyListValue* property_key_list_value) = 0;
virtual void VisitPropertyList(PropertyListValue* property_list_value) = 0;
virtual void VisitRadialGradient(
RadialGradientValue* radial_gradient_value) = 0;
virtual void VisitRatio(RatioValue* ratio_value) = 0;
virtual void VisitResolution(ResolutionValue* resolution_value) = 0;
virtual void VisitRGBAColor(RGBAColorValue* color_value) = 0;
virtual void VisitShadow(ShadowValue* shadow_value) = 0;
virtual void VisitString(StringValue* string_value) = 0;
virtual void VisitTimeList(TimeListValue* time_list_value) = 0;
virtual void VisitTimingFunctionList(
TimingFunctionListValue* timing_function_list_value) = 0;
virtual void VisitTransformFunctionList(
TransformFunctionListValue* transform_function_list_value) = 0;
virtual void VisitTransformMatrixFunction(
TransformMatrixFunctionValue* transform_matrix_function_value) = 0;
virtual void VisitUnicodeRange(UnicodeRangeValue* unicode_range_value) = 0;
virtual void VisitURL(URLValue* url_value) = 0;
virtual void VisitUrlSrc(UrlSrcValue* url_src_value) = 0;
~PropertyValueVisitor() {}
// A convenience class that forwards all methods to |VisitDefault|, thus one can
// derive from this class, implement only the value types that they care about,
// and handle every other value type generically.
class DefaultingPropertyValueVisitor : public PropertyValueVisitor {
void VisitAbsoluteURL(AbsoluteURLValue* url_value) override;
void VisitCalc(CalcValue* calc_value) override;
void VisitFilterFunctionList(
FilterFunctionListValue* filter_function_list_value) override;
void VisitFontStyle(FontStyleValue* font_style_value) override;
void VisitFontWeight(FontWeightValue* font_weight_value) override;
void VisitKeyword(KeywordValue* keyword_value) override;
void VisitInteger(IntegerValue* integer_value) override;
void VisitLength(LengthValue* length_value) override;
void VisitLinearGradient(LinearGradientValue* linear_gradient_value) override;
void VisitLocalSrc(LocalSrcValue* local_src_value) override;
void VisitMediaFeatureKeywordValue(
MediaFeatureKeywordValue* media_feature_keyword_value) override;
void VisitNumber(NumberValue* number_value) override;
void VisitPercentage(PercentageValue* percentage_value) override;
void VisitPropertyKeyList(
PropertyKeyListValue* property_key_list_value) override;
void VisitPropertyList(PropertyListValue* property_list_value) override;
void VisitRadialGradient(RadialGradientValue* radial_gradient_value) override;
void VisitRatio(RatioValue* ratio_value) override;
void VisitResolution(ResolutionValue* resolution_value) override;
void VisitRGBAColor(RGBAColorValue* color_value) override;
void VisitShadow(ShadowValue* shadow_value) override;
void VisitString(StringValue* string_value) override;
void VisitTimeList(TimeListValue* time_list_value) override;
void VisitTimingFunctionList(
TimingFunctionListValue* timing_function_list_value) override;
void VisitTransformFunctionList(
TransformFunctionListValue* transform_function_list_value) override;
void VisitTransformMatrixFunction(
TransformMatrixFunctionValue* transform_matrix_function_value) override;
void VisitUnicodeRange(UnicodeRangeValue* unicode_range_value) override;
void VisitURL(URLValue* url_value) override;
void VisitUrlSrc(UrlSrcValue* url_src_value) override;
virtual void VisitDefault(PropertyValue* property_value) = 0;
// A convenience class that implements PropertyValueVisitor with NOTREACHED()
// for each method, thus one can derive from this class, implement only the
// value types that they care about, and then every other value type will
// result in an error.
class NotReachedPropertyValueVisitor : public DefaultingPropertyValueVisitor {
void VisitDefault(PropertyValue* property_value) override;
} // namespace cssom
} // namespace cobalt