summaryrefslogtreecommitdiff
path: root/src/LDOM/LDOMString.cxx
blob: 330be400194156471ff83aa08576c081f550b4b8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
// File:      LDOMString.cxx
// Created:   25.06.01 15:24:17
// Author:    Alexander GRIGORIEV
// Copyright: OpenCascade 2001
// History:

#include <LDOMString.hxx>
#include <LDOM_MemManager.hxx>

//=======================================================================
//function : CreateDirectString
//purpose  : Only for hashed strings!!
//=======================================================================

LDOMString LDOMString::CreateDirectString (const char             * aValue,
                                           const LDOM_MemManager& aDoc)
{
  LDOMString aResult;
  aResult.myPtrDoc = &aDoc;
  aResult.SetDirect (LDOMBasicString::LDOM_AsciiHashed, aValue);
  return aResult;
}

//=======================================================================
//function : LDOMString
//purpose  : Copy from another string with allocation in the document
//=======================================================================

LDOMString::LDOMString (const LDOMBasicString&          anOther,
                        const Handle(LDOM_MemManager)&  aDoc)
     : myPtrDoc (&aDoc -> Self())
{
  myType = anOther.Type();
  switch (myType)
  {
  case LDOM_Integer:
    anOther.GetInteger (myVal.i);
    break;
  case LDOM_AsciiFree:
    myType = LDOM_AsciiDoc;
  case LDOM_AsciiDocClear:
  case LDOM_AsciiDoc:
    {
      const char * aString = anOther.GetString ();
      Standard_Integer aLen = strlen (aString) + 1;
      myVal.ptr = ((LDOM_MemManager *) myPtrDoc) -> Allocate (aLen);
      memcpy (myVal.ptr, aString, aLen);
    }
    break;
  case LDOM_AsciiHashed:
    myVal.ptr = (void *)anOther.GetString ();
    break;
  default:
    myType = LDOM_NULL;
  }
}

//=======================================================================
//function : LDOMString
//purpose  : Copy from another with allocation in the document if necessary
//=======================================================================
/*
LDOMString::LDOMString (const LDOMString& anOther, const LDOM_Document& aDoc)
     : myPtrDoc (&aDoc.myMemManager -> Self())
{
  switch (anOther.Type())
  {
  case LDOM_Integer:
    myType = LDOM_Integer;
    anOther.GetInteger (myVal.i);
    break;
  case LDOM_AsciiDoc:
    if (aDoc == anOther.getOwnerDocument())
  case LDOM_AsciiHashed:
      myVal.ptr = (void *)anOther.GetString ();
    else {
  case LDOM_AsciiFree:
      const char * aString = anOther.GetString ();
      Standard_Integer aLen = strlen (aString) + 1;
      myVal.ptr = aDoc.AllocMem (aLen);
      memcpy (myVal.ptr, aString, aLen);
      myType = LDOM_AsciiDoc;
    }
    break;
  default: ;
  }
}
*/