/*
 * Copyright 2015 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
 *
 *     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.
 */

#include "cobalt/cssom/transform_matrix_function_value.h"

#include "cobalt/cssom/transform_function_visitor.h"

namespace cobalt {
namespace cssom {

TransformMatrixFunctionValue::TransformMatrixFunctionValue(
    const TransformMatrix& matrix)
    : value_(matrix) {}

std::string TransformMatrixFunctionValue::ToString() const {
  // This method should not ever be called, as it is not possible for
  // JavaScript APIs to ever query for this value.
  // It can be implemented if this functionality is required for debugging
  // purposes.
  NOTREACHED();
  return "";
}


}  // namespace cssom
}  // namespace cobalt
