# string object (reference counted)

Path: /sdk/add_on/scriptstring/

This add-on registers a string type that is in most situations compatible with the `std::string`, except that it uses reference counting. This means that if you have an application function that takes a `std::string` by reference, you can register it with AngelScript to take a script string by reference. This works because the CScriptString wraps the `std::string` type, with the std::string type at the first byte of the CScriptString object.

Register the type with `RegisterScriptString(asIScriptEngine*)`. Register the utility functions with `RegisterScriptStringUtils(asIScriptEngine*)`.

See also:
  string object (STL)

## Public C++ interface

    class CScriptString
    {
    public:
      // Constructors
      CScriptString();
      CScriptString(const CScriptString &other);
      CScriptString(const char *s);
      CScriptString(const std::string &s);

      // Memory management
      void AddRef() const;
      void Release() const;

      // Assignment
      CScriptString &operator=(const CScriptString &other);

      // Concatenation
      CScriptString &operator+=(const CScriptString &other);
      friend CScriptString *operator+(const CScriptString &a, const CScriptString &b);

      // Memory buffer
      std::string buffer;
    };

## Public script interface

      class string
      {
        // Constructors
        string();
        string(const string &in other);

        // Returns the length of the string
        uint length() const;

        // Assignment and concatenation
        string &opAssign(const string &in other);
        string &opAddAssign(const string &in other);
        string @opAdd(const string &in right) const;

        // Access individual characters
        uint8       &opIndex(uint);
        const uint8 &opIndex(uint) const;

        // Comparison operators
        bool opEquals(const string &in right) const;
        int  opCmp(const string &in right) const;

        // Automatic conversion from number types to string type
        string &opAssign(double val);
        string &opAddAssign(double val);
        string @opAdd(double val) const;
        string @opAdd_r(double val) const;

        string &opAssign(float val);
        string &opAddAssign(float val);
        string @opAdd(float val) const;
        string @opAdd_r(float val) const;

        string &opAssign(int val);
        string &opAddAssign(int val);
        string @opAdd(int val) const;
        string @opAdd_r(int val) const;

        string &opAssign(uint val);
        string &opAddAssign(uint val);
        string @opAdd(uint val) const;
        string @opAdd_r(uint val) const;

        string &opAssign(bool val);
        string &opAddAssign(bool val);
        string @opAdd(bool val) const;
        string @opAdd_r(bool val) const;
      }

      // Get a substring of a string
      string @ substring(const string &in str, int start, int length);

      // Find the first occurrance of the substring
      int findFirst(const string &in str, const string &in sub);
      int findFirst(const string &in str, const string &in sub, int startAt)

      // Find the last occurrance of the substring
      int findLast(const string &in str, const string &in sub);
      int findLast(const string &in str, const string &in sub, int startAt);

      // Find the first character from the set
      int findFirstOf(const string &in str, const string &in set);
      int findFirstOf(const string &in str, const string &in set, int startAt);

      // Find the first character not in the set
      int findFirstNotOf(const string &in str, const string &in set);
      int findFirstNotOf(const string &in str, const string &in set, int startAt);

      // Find the last character from the set
      int findLastOf(const string &in str, const string &in set);
      int findLastOf(const string &in str, const string &in set, int startAt);

      // Find the last character not in the set
      int findLastNotOf(const string &in str, const string &in set);
      int findLastNotOf(const string &in str, const string &in set, int startAt);

      // Split the string into an array of substrings
      string@[]@ split(const string &in str, const string &in delimiter);

      // Join an array of strings into a larger string separated by a delimiter
      string@ join(const string@[] &in str, const string &in delimiter);