14d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Copyright 2016 PDFium Authors. All rights reserved.
24d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be
34d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// found in the LICENSE file.
44d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
54d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
64d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
74d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#ifndef CORE_FPDFAPI_PARSER_CPDF_STRING_H_
84d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define CORE_FPDFAPI_PARSER_CPDF_STRING_H_
94d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <memory>
114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfapi/parser/cpdf_object.h"
134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxcrt/fx_string.h"
144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxcrt/fx_system.h"
15d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "core/fxcrt/string_pool_template.h"
16d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "core/fxcrt/weak_ptr.h"
174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CPDF_String : public CPDF_Object {
194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann public:
204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_String();
21d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  CPDF_String(WeakPtr<ByteStringPool> pPool, const ByteString& str, bool bHex);
22d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  CPDF_String(WeakPtr<ByteStringPool> pPool, const WideString& str);
234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  ~CPDF_String() override;
244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // CPDF_Object:
264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  Type GetType() const override;
274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  std::unique_ptr<CPDF_Object> Clone() const override;
28d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  ByteString GetString() const override;
29d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  WideString GetUnicodeText() const override;
30d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  void SetString(const ByteString& str) override;
314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool IsString() const override;
324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPDF_String* AsString() override;
334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  const CPDF_String* AsString() const override;
34d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  bool WriteTo(IFX_ArchiveStream* archive) const override;
354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool IsHex() const { return m_bHex; }
374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann protected:
39d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  ByteString m_String;
404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool m_bHex;
414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann};
424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmanninline CPDF_String* ToString(CPDF_Object* obj) {
444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return obj ? obj->AsString() : nullptr;
454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmanninline const CPDF_String* ToString(const CPDF_Object* obj) {
484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  return obj ? obj->AsString() : nullptr;
494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}
504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#endif  // CORE_FPDFAPI_PARSER_CPDF_STRING_H_
52