Skip to content

Commit 6c6e338

Browse files
committed
.
1 parent 05032b0 commit 6c6e338

File tree

3 files changed

+75
-26
lines changed

3 files changed

+75
-26
lines changed

docs/packages/Bytes.md

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,6 @@ Finally, **note** that these sections deal with bytes in memory and on the stack
121121
- [toBytes(uint)](#tobytesuint)
122122
- [toBytes(uint, uint16)](#tobytesuint-uint16)
123123
- [toBytes(bool)](#tobytesbool)
124-
- [toBytes(bool)](#tobytesbool)
125124
- [highestByteSet(bytes32)](#highestbytesetbytes32)
126125
- [lowestByteSet(bytes32)](#lowestbytesetbytes32)
127126
- [highestByteSet(uint)](#highestbytesetuint)
@@ -516,31 +515,6 @@ Create a new `bytes memory` from a `boolean`.
516515

517516
***
518517

519-
### toBytes(bool)
520-
521-
`function toBytes(bool self) internal pure returns (bytes memory)`
522-
523-
Create a new `bytes memory` from a boolean.
524-
525-
##### params
526-
527-
- `bool self`: The source boolean.
528-
529-
530-
##### returns
531-
532-
- `bytes memory`: The boolean as a `bytes memory`. Note that the bytes array will be of length 1.
533-
534-
##### ensures
535-
536-
- `bts = self.toBytes() => bts.length = 1`.
537-
- `bts = self.toBytes() => if self == true: bts = [1], else bts = [0].
538-
##### gascosts
539-
540-
- Fixed: **318**
541-
542-
***
543-
544518
### highestByteSet(bytes32)
545519

546520
`function highestByteSet(bytes32 self) internal pure returns (uint8 highest)`

examples/strings/StringExamples.sol

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
pragma solidity ^0.4.16;
2+
pragma experimental "v0.5.0";
3+
pragma experimental "ABIEncoderV2";
4+
5+
import {Strings} from '../src/strings/Strings.sol';
6+
7+
contract StringsExamples {
8+
9+
using Strings for string;
10+
11+
function stringExampleValidateRunePoem() public pure {
12+
string memory str = "ᚠᛇᚻ᛫ᛒᛦᚦ᛫ᚠᚱᚩᚠᚢᚱ᛫ᚠᛁᚱᚪ᛫ᚷᛖᚻᚹᛦᛚᚳᚢᛗ ᛋᚳᛖᚪᛚ᛫ᚦᛖᚪᚻ᛫ᛗᚪᚾᚾᚪ᛫ᚷᛖᚻᚹᛦᛚᚳ᛫ᛗᛁᚳᛚᚢᚾ᛫ᚻᛦᛏ᛫ᛞᚫᛚᚪᚾ ᚷᛁᚠ᛫ᚻᛖ᛫ᚹᛁᛚᛖ᛫ᚠᚩᚱ᛫ᛞᚱᛁᚻᛏᚾᛖ᛫ᛞᚩᛗᛖᛋ᛫ᚻᛚᛇᛏᚪᚾ";
13+
str.validate();
14+
}
15+
16+
function stringExampleValidateBrut() public pure {
17+
string memory str = "An preost wes on leoden, Laȝamon was ihoten He wes Leovenaðes sone -- liðe him be Drihten. He wonede at Ernleȝe at æðelen are chirechen, Uppen Sevarne staþe, sel þar him þuhte, Onfest Radestone, þer he bock radde.";
18+
str.validate();
19+
}
20+
21+
function stringExampleValidateOdysseusElytis() public pure {
22+
string memory str = "Τη γλώσσα μου έδωσαν ελληνική το σπίτι φτωχικό στις αμμουδιές του Ομήρου. Μονάχη έγνοια η γλώσσα μου στις αμμουδιές του Ομήρου. από το Άξιον Εστί του Οδυσσέα Ελύτη";
23+
str.validate();
24+
}
25+
26+
function stringExampleValidatePushkinsHorseman() public pure {
27+
string memory str = "На берегу пустынных волн Стоял он, дум великих полн, И вдаль глядел. Пред ним широко Река неслася; бедный чёлн По ней стремился одиноко. По мшистым, топким берегам Чернели избы здесь и там, Приют убогого чухонца; И лес, неведомый лучам В тумане спрятанного солнца, Кругом шумел.";
28+
str.validate();
29+
}
30+
31+
}

misc/EthString.sol

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
library EthString {
2+
3+
uint internal constant MASK_0_128 = 0x00000000000000000000000000000000ffffffffffffffffffffffffffffffff;
4+
uint internal constant MASK_0_128 = 0xffffffffffffffffffffffffffffffff00000000000000000000000000000000;
5+
6+
uint internal constant MASK_0_64 = 0x000000000000000000000000000000000000000000000000ffffffffffffffff;
7+
uint internal constant MASK_1_64 = 0x00000000000000000000000000000000ffffffffffffffff0000000000000000;
8+
uint internal constant MASK_2_64 = 0x0000000000000000ffffffffffffffff00000000000000000000000000000000;
9+
uint internal constant MASK_3_64 = 0xffffffffffffffff000000000000000000000000000000000000000000000000;
10+
11+
function toString(bytes memory bts, uint64 key, uint64 range) internal pure returns (String memory str) {
12+
require(key != 0 && range != 0 || key == 0 && range == 0);
13+
uint len = bts.length;
14+
len |= range << 2**64;
15+
len |= key << 2**128;
16+
if (key != 0) {
17+
len |= (range + 256) / 256 << 2**255;
18+
}
19+
assembly {
20+
mstore(bts, len)
21+
}
22+
str = String(bts);
23+
}
24+
25+
function toString(bytes storage bts, uint64 key, uint64 range) internal view returns (uint) {
26+
require(key != 0 && range != 0 || key == 0 && range == 0);
27+
uint len = bts.length;
28+
len |= key << 2**64;
29+
len |= range << 2**128;
30+
if (key != 0) {
31+
len |= (range + 256) / 256 << 2**255;
32+
}
33+
bts.length = len;
34+
}
35+
36+
function len(bytes bts) internal view returns (uint) {
37+
return bts.length & MASK_0_64;
38+
}
39+
40+
function charAt(bytes bts) internal view returns (uint) {
41+
return bts.length & MASK_0_64;
42+
}
43+
44+
}

0 commit comments

Comments
 (0)